Хэрэглэгчийн яриа:Bulgan mn

Page contents not supported in other languages.

Device queue (I/O queue) - Мөн процесс нь диск гэх зэрэг О/Г-ын төхөөрөмж ашигладаг. Системд маш олон процессууд байхад, диск бусад процессын О/Г-нд ашиглагдаж болно. Иймээс процесс дискийг хүлээх хэрэгтэй. Тодорхой оролт гаралтын төхөөрөмжийг хүлээж байгаа процессуудын жагсаалтыг төхөөрөмж дэх дараалал гэдэг. Төхөөрөмж бүр өөр өөрийн гэсэн дараалалтай. Урсгал (Stream) гэж юу вэ? Урсгал гэдэг нь ерөөсөө, ямар нэг эх үүсвэрээс ямар нэг хүлээн авагч руу мэдээлэл (өгөгдөл) дамжих процессыг илэрхийлсэн хийсвэр ойлголт юм. Арай тодорхой хэлбэл, мэдээллийг үүсгэж буй эсвэл мэдээллийг хүлээн авч буй бодит хэрэгслийг төлөөлсөн логик хэрэгсэл (logical device) юм. Ямар ч гадаад төхөөрөмжийг урсгалтай холбож (ө.х. урсгалаар илэрхийлж) болно. Ингэснээр, дэлгэц, гар г.м. оролт-гаралтын хэрэгсэл, эсвэл диск дээр байрлах физик файлтай шууд харьцаж ажиллахын оронд тэдгээр тус бүрийг төлөөлсөн урсгалтай ажиллана гэсэн үг. “Програмчлал” хичээлийн лекц Файлтай ажиллах талаар товчхон 2 Тиймээс, хэрэв програмд гараас оролтын үйлдэл хийж байвал энэ нь гарыг төлөөлсөн урсгалтай ажиллаж байгаа хэрэг болно. Хэрэв програм дэлгэцэнд гаралтын үйлдэл хийж байвал энэ нь дэлгэцийг төлөөлсөн урсгалтай ажиллаж байгаа хэрэг болно. Гар ба дэлгэцийг төлөөлсөн урсгалуудыг стандарт урсгалууд (standard streams) гэдэг. Стандарт урсгалуудыг дотор нь: • Стандарт оролт (standard input) – гарыг төлөөлсөн урсгал • Стандарт гаралт (standard output) – дэлгэцийг төлөөлсөн урсгал гэж хуваадаг. Хэрэв програм файлтай ажиллаж байвал энэ нь файлыг төлөөлсөн урсгалтай ажиллаж буй хэрэг болно. Ийм урсгалыг файлын урсгал (file stream) гэдэг. Програм ба стандарт урсгалын хооронд мэдээлэл байт байтаар дамждаг. Ө.х. солилцож буй мэдээллийн хамгийн бага хэмжээ нь байт байдаг байна. Харин файлын урсгалтай ажиллаж буй тохиолдолд мэдээлэл багц багцаар дамждаг байна. Нэг ийм багц нь 512, эсвэл 1024 байтын хэмжээтэй байдаг. Үүнийг блок гэдэг. Учир нь аливаа файл диск дээр нэг буюу түүнээс олон блок зайг эзэлж оршдог. Үнэн хэрэгтээ файлын урсгалтай ажиллах процесс буфер (buffer) хэмээн нэрлэгдэх завсрын санах ойг дамжин явагддаг байна. Програмаас файл руу (урсгал руу) бичиж буй тохиолдолд, мэдээлэл эхлээд буферт хуримтлагдсаар, тэр нь дүүрмэгц нэг бүтэн блокоор ганц удаагийн хандалтаар шууд диск рүү (урсгал руу) шилжинэ. Програм файлаас (урсгалаас) уншиж буй тохиолдолд, буфер бүрэн суларсан үед блок мэдээлэл буферт орж ирээд, тэндээс харин байт байтаар эсвэл тодорхой багцаар уншигдана. Буфер нь мэдээллийг түрхэн зуур хадгалах зориулалттай, үндсэн санах ойн тусгай хэсэг юм. Тиймээс буферээр дамжуулан мэдээлэл солилцох нь урсгалтай шууд харьцсанаас илүү хурдан явагддаг ажээ.

Ашигласан материал:

- Abraham Silberschatz. Operating system concepts, 7th edition
- “Operating Systems – A modern perspective”, Garry Nutt, ISBN 0-8053-1295-1

Олон програм зэрэг хамтран ажиллах үед тэдгээрийн дунд ашиглагдаж буй мэдээлэл, төхөөрөмж зэрэгт нэг дор олон хандалт үүсгэхгүй байх үүднээс эгзэгтэй мужийн асуудал яригддаг. Өөрөөр хэлбэл процессууд дундаа ашигладаг фунц, хүснэгт зэрэгт хандсан тухайн процессын өөрийнх нь кодын хэсгийг эгзэгтэй муж гэнэ. Тухайн эгзэгтэй муж нь тодорхой хугацаанд нээгдэж, хаагдах ба түүнд хандахыг хүссэн процесс, таск зэрэг нь хүсэлт үлдээн хэсэг хугацаанд хүлээлтийн горимд ордог. Иймээс процесс эсвэл таск нь эгзэгтэй мужид орж гарч байгааг зохицуулах механизмууд бий болжээ. Жишээ нь Семафор. N тооны процессоос тогтсон систем байна гэж төсөөл. {P0, P1, P2.... Pn-1 г.м} Процесс бүрт эгзэгтэй муж гэж байх ба тэр хэсэг нь уг процессуудын дундын эзэмшлийн хувьсагч, хүснэгт, аль эсвэл өгөгдлийг өөрчилдөг гэж үзье. Зэрэг хандалт хийгдэх үед маш том асуудал үүсэх учраас үйлдлийн системийн гол үүрэг бол эгзэгтэй мужид нэг дор нэгээс олон процесс оруулахгүй байх явдал. Энэ асуудлыг шийдэхийн тулд процессуудыг хамтран ажилуулж чадахуйц нь зохицуулах механизм боловсруулах хэрэгтэй. Процесс болгон эгзэгтэй муж руу орохын өмнө хүсэлт явуулдаг байх ёстой. Механизмын энэ хэсгийг хэрэгжүүлж буй кодыг оролтын хэсэг гэнэ. Хүсэлт явуулж зөвшөөрөл авсны үндсэн дээр эгзэгтэй мужид нэвтэрсэн процесс гаралтын кодын хэсэгт дуусна. Үлдсэн бусад кодыг үлдэгдэл хэсэг гэнэ.[1] Эгзэгтэй мужийн асуудлыг шийдэхийн тулд дараах шаардлагуудыг хангасан байх шаардлагатай. 1. Давхар нэвтрэлтийг хорих (Mutual exclusion) Хэрэв нэг процесс эгзэгтэй мужид нэвтэрсэн бол өөр процесс үл нэвтрүүлэх 2. Явцыг дэмжих (progress) Өөр ямар ч процессд эгзэгтэй муж үүсээгүй байхад процесс түүнийг хүлээх ёсгүй. 3. Дамжсан хүлээлт (bounded waiting) Процесс тодорхой хугацаанд л эгзэгтэй мужид байх ёстой. Кернелийн түвшинд эгзэгтэй муж нь процессууд болон хуулбар процессууд хоорондоо зөрчилдөлгүй ажиллах боломжыг хангаж өгдөг. Зарим үйлдлийн систем нэг зэрэг олон эгзэгтэй муж /холбоотой процессууд бүрт нэг/ үүсгэж ажилладаг. Диспетчер нь процессуудыг хооронд нь зохицуулах ба эгзэгтэй мужид байгаа процессыг дараа биелүүлэхээр түр зогсоох эсвэл эгзэгтэй мужаас гартал нь хүлээсний дараа дараагын процессд эгзэгтэй муж олгох зэргийг хариуцна. Аппликэйшн түвшний эгзэгтэй муж

Аппликэйшн түвшний эгзэгтэй муж нь ихэвчлэн санах ойн тухайн хэсгийг аль процесс эзллэх тухайд яригддаг. POSIX pthread санд эгзэгтэй мужийг шийдэх жишээ код /* C/C++ Жишээ, Unix/Linux */

  1. include <pthread.h>

/* Энэ бол эгзэгтэй муж объект (тогтмолоор өгөгдсөн). */ static pthread_mutex_t cs_mutex = PTHREAD_MUTEX_INITIALIZER;

void f() {

   /* Эгзэгтэй мужид орох хэсэг -- Бусад процессүүд цоожлогдоно */
   pthread_mutex_lock( &cs_mutex );

   /* Энэ хэсэгт бусад процессуудаас хамааралгүй аюулгүй тооцоолол хийгдэнэ! */

   /*Эгзэгтэй мужаас гарах хэсэг -- бусад процессүүд эгзэгтэйи мужид орох эрхтэй болно. pthread_mutex_lock()  */
   pthread_mutex_unlock( &cs_mutex );

}

int main() {

   f();

   return 0;

} Эх сурвалж ↑ [1]Operating System Concepts - 7th edition, Page 302-303