Өлшемі шектеулі буферді бірге қолданатын екі процесті қарастырайық, бір процесс буферге
жазады, екіншісі берілгендерді оқиды. Буфер толып кеткен кезде бірінші процесс жазбас үшін, ал
бос болған кезде екінші процесс одан оқымас үшін буфердегі
элементтер санын есептеуге
арналған count айнымалысы енгізіледі.
Бұл жағдайда егер ағымдандыру сигналы жоғалып кетсе екі процесс те күту жағдайына түсіп
қалуы мүмкін.
Осындай жағдайдың алгоритмі:
1. В процесі count=0 оқиды (блоктанып әлі үлгерген жоқ)
2. Жоспарлаушы басқаруды А процесіне берді.
3. А процесі В процесін блоктан шығаруға тырысып Wakeup-қа шейін барлығын істейді.
(бірақ В процесі блокталған емес, Wakeup босқа іске қосылады)
4. Жоспарлаушы басқаруды В процесіне береді.
5. ол блоктанды, енді блоктан шығу сигналын алмайды.
6. А процесі бара-бара буферді толтырады, бірақ блоктан шығу сигналын алмайды.
Семафорлар.
Семафорлар-
болашаққа деп сақталған, іске қосу сигналдарын санауға арналған
айнымалылар. Down және up екі операциялары ұсынылған (sleep және wekeup-тардың бір түрі).
Процесті боктамас
бұрын Down семафорды тексереді, егер ол нөлге тең болса,
онда ол
процесті блоктайды, егер олай болмаса, онда процесс қайтадан ағымдалады да Down семафорды
бірге кемітеді.
Up- семафордың мәнін 1-ге арттырады немесе күту жағдайындағы
процесті блоктан
шығарады.
Down-семафордың мәнін 1-ге кемітеді немесе егер семафор тең 0 болса, онда процесті
блоктайды.
Down және Up элементарлық
әрекет ретінде жұмыс істейді, яғни процесс осы
операциялардың орындалу барысында блоктана алмайды. Бұл дегеніміз операциялық жүйеде
барлық үзулулерге тыйым салу және процесті күту режиміне ауыстыру болу керек.
Толып кеткен буфер проблемасын семафор көмегімен шешу.
Үш семафор қолданамыз:
Full-толтырылған сегменттерді санау (әуелі 0-ге тең)
Empty-бос сегменттерді санау (әуелі сегменттер санына тең)
Mutex- екі процестің бір уақытта буферге рұқсат алуын болдырмас үшін (әуелі бірге тең)
Mutex-семафордың
қарапайымдалған версиясы, ол ресурске деген рұқсатты басқарады.
Ресурс блокталған ба, әлде жоқ па екенін көрсетеді.
Достарыңызбен бөлісу: