Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТУЖ.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
196.85 Кб
Скачать

28.Процестерді тура уақыт жүйелерінде жоспарлау

29.Семафорлардың қызметі және оларды қолдану. Түрлері

Семафорлар-дегеніміз болашақ үшін сақталған жіберу сигналдарын санаушы айнымалылар. Ең алғаш болып 1965 жылы Дейкстра(Dijkstra) процесстердің синхрондалуын жүргізетін механизмдердің бірі ретінде семафорды сипаттап берді.

Семафор өзі теріс емес мәндерді қабылдайтын бүтін айнымалыны көрсетеді, оның инициализацияланған моменттен басқа кез келген процесстің қол жеткізуі екі атомарлық операциялар арқылы жүзеге асады: P ( лат тілінен аударғанда proberen – тексеру) және V (verhogen – арттыру). Бұлардың классикалық түрдегі сипаттамасы мынадай:

P(S): S == 0 болғанша процесс блокталады;

S = S – 1;

V(S): S = S + 1;

Бұл жазудың түсіндірмесі: S семефорына P операциясының орындалуы кезінде бірінші оның мәні тексеріледі. Егер ол 0 ден үлкен болса, онда S тан 1 алынады. Егер ол кіші немесе тең 0 ге болса, процесс S 0 ден үлкен болғанға дейін блокталынады, содан кейін S тан 1алынады. S семефорына V операциясының орындалуы кезінде оның мәніне 1 қосылады. Құрылған кезде семафор кез келген теріс емес мәнмен инициялизияланған болуы мүмкін.

Осындай айнымалы семафорлар процесстердің өзара байланысын ұйымдастырудағы есептер үшін қолданылуы мүмкін.Програмамалау тілінде ол мысалға, ALGOL-68 тілінің синтаксисына енгізілген болатын, ал басқа жағдайларда арнайы жүйелік шақырулар арқылы жүзеге асырылады. Осы бүтін айнымалы операциялық жүйенің ядросының адрестік кеңістігінде жайғасады. Операциялық жүйе P және V операцияларының атомарлығын қамтамасыз етеді, мысалға, сәйкес келетін жүйелік шақырулардың орындалуы кезінде үзілісті болдырмау әдісі. Егер P операцясының орындалу кезінде бірнеше операция блокталып қалса, онда оларды блоктан алып тастау еркімен болуы мүмкін, мысалға FIFO.

Producer-consumer мәселесін семафорлар арқылы шешу. Процестердің өзара байланысын ұйымдастыруды қажет ететін есептердің бірі producer-consumer (өндіруші-тұтынушы) есебі. Екі процесс шектелген өлшемі бар буфер арқылы ақпаратпен алмасып жатыр делік. Өндіруші буферге ақпаратты салады, ал тұтынушы одан ақпаратты алады. Бұл деңгейде мына түрде жазуға болады: Producer: while(1) { produce_item;

put_item;

}

Consumer: while(1) {

get_item;

consume_item;

}

Егербуфертолықболса, ондаөндірушіжаңаақпаратқаорынтабылғаншакүтуіқажет. Алегербуфербосболса, тұтынушыжаңахаттыкүтуіқажет. Бұлшарттардысемафорларарқылықалайжүзегеасыруғаболады? Empty, full и mutex дегенүшсемафоралайық. Full семафорынтұтынушыбуфердеақпараткелгеншекүтуіүшінқолданайық. Empty семафорынбуфертолыпқалғанкездегіөндірушініңкүтуінұйымдастыруүшінқолданайық, ал mutex семафорасынкритикалықоблыстардағыөзарашығарудыұйымдастыруүшін, бұлісәрекеттер put_item и get_item ( "ақпараттысалу" және "ақпараттыалу" қиылысаалмайды, бұлжағдайдаақпараттыңбұзылуыболуымүмкін). C-тіліндежүзегеасырылуы: Semaphore mutex = 1; Semaphore empty = N; /* где N – емкостьбуфера*/ Semaphore full = 0; Producer: while(1) { produce_item; P(empty); P(mutex); put_item; V(mutex); V(full); } Consumer: while(1) { P(full); P(mutex); get_item; V(mutex); V(empty); consume_item; } Соныменсемафорларбұлжердеекімақсаттақолданды: критикалықоблыстаөзарашығарудыұйымдастыруыүшінжәнепроцестердіңжұмысыныңжылдамдығыныңөзарасинхрондалуыүшін.

Семафорлармен жұмыс істеу үшін post және wait операциясы қолданылады. Wait операциясы есептегіш мәнін нөлмен салыстырады. Егер мәні нөлден үлкен болса wait операциясы мәнін кешірейтіп басқаруды қайтарады. Ал егер мәні нөлге тең болса , wait рәсімі басқаруды ағынға қайтармайды, алағын күту күйіне өтеді.

Post операциясы есептегіш мәнін үлкейтеді. Егер осы семаформен бір немесе бірнеше күту күйінде тұрғып, wait операциясын аяқтамай тұрған ағын байланыста болса, онда олардың біреуі жүйемен таңдалынып , мәні кемітіледі де wait операциясы тоқтатылады.

Семафордың түрлері

Семафордың екі түрі белгілі: есептік және бинарлық(екілік).Ең алдымен семафордың қарапайым түрінен бастасақ, ол тек 0 және 1 сандарын қабылдай алатын бинарлық немесе екелік семафор. Семафордағы 0 саны блок қатү суді білдірсе, 1 саны блоктан босатылуды көрсетеді. Бұл семафордың ең көп тараған түрі. Көп дұрыс мәнді қабылдайтын семафорларды жалпы түрдегі семафор деп атайды.

Бинарлықсемафорлардыңқолданылуы:

Semaphore S = 1;

while( true ){

P(S);

Ресурстың қолданылуы

V(S);}

Ал енді семафордың күрделілек түрі есептік семафор туралы біраз айтып өтсек . Есептік –семафордың мәні 0 мен белгілі бір шектің арасын да жатады. Posix-ке сәйкес оның мәні 32767 –ден кем болмауы тиіс. Олар тапсырмадағы қолданушылармен тұтынушыларға қолайлы ресурстарды есептеу үшін қолданылады және де семафордың мағынасы қолайлы ресурстармен сәйкескелуі керек.Есептік семафорлар есептегішке байланысты бірнеше күйде бола алады.

Есептік семафорлардың қолданылуы :

Semaphore S1 = N, S2 = 1;

while( true ){

P(S1);

P(S2);

Бос ресурсты таңдау

V(S2);

Ресурсты қолдану

P(S2);

Ресурсты босату

V(S2);

V(S1);}

Бинарлық семафорларда есептік семафорлардан айырмашылығы есептегіштің мәні бірден артық бола алмайды. Сол себепті тек екі күйде бола алады: блокталған және блокталмаған.