184
кезінде пайда болады. Бұл жағдайда оқылған ақпараттар көнелеу де,
ішінара жаңартылған деректерді де құрауы мүмкін.
Шиеленіскен жағдайлардың алдын алу үшін семафорлар
қолданылады —жадының қандай да бір бөлігін қолдану мүмкіндігін
көрсететін арнайы жалаушалар. Жадыға жазу кезінде процесс семафор
қойылады — бұл жадының «бос емес»
екендігін білдіреді; ал жазу
аяқталғаннан соң оны алып тастайды, бұл жадының босатылғанын
білдіреді. Басқа процестер ақпараттарды жазу немесе оқудың алдында
семафордың жағдайын тексереді және жазу мүмкін емес жағдай арнайы
өңделеді.
Мұндай жағдайда, процес өзінің орындалуын семафорды
алғанға дейін тоқтата тұрады немесе ақпараттарды өзінің ішкі
буферінде жинайды және семафорды алғанда буферден ақпараттарды
жазып алады.
Семафор механизмі тек жалпы жады пайдаланғанда ғана ыңғайлы
емес, кез келген біріккен ресурстардың
қолданысында пайдаланылуы
мүмкін.
СИГН
АЛДАР
10.3.1. Жалпы түсінік
UNIX - жүйелерінің көбісі сүйемелдейтін процесс аралық өзара
әрекеттесушінің көп таралған механизмі — сигналдар арқылы өзара
әрекеттесу. Процесс аралық (пайдаланушының немесе жүйелік)
сигналдардың алмасуы оларға орындаушы процесс үшін маңызды
басқа оқиғалардың орын алуы туралы ақпараттармен алмасуға
мүмкіндік береді.
Процеске сигналды беруге ықпал етуші операциялық жүйенің
ядросы (мысалы, 0-ге бөлінген жағдайда
ядро процеске сигнал береді,
ядро төтенше жағдайларды хабарлайды), пайдаланушы (мысалы,
үзілістер кезінде, [Ctrl+C] батырмасымен процес орындалуы кезінде,
бұл комбинацияға сәйкес келетін процеске сигнал беріледі) немесе
басқа процесс болып табылады.
Жалпы кез келген процесс онымен параллелді орындалатын басқа
процеске сигнал бере алады. Сигналды беру үшін жіберуші-процесс екі
параметрді анықтау қажет: PID қабылдаушы-процесс сигналы және
жіберілетін сигналдың нөмірі. UNIX-жүйелері сигналдар түрлерінде
шектеулі санды сүйемелдейді, әдетте 30 шамасында. 10.1-
кестеде
негізгі сигнал түрлерінің қысқаша сипаттамасы берілген.
185
Әр сигнал түрі, тіркеу нөмірі және SIGALRM түрінде
мнемоникалық мәндерін иеленеді, SIG — сигналдар мнемонигінің
жалпы мәні; ALRM — берілген сигнал түрінің жіберілуіне байланысты
пайда болған оқиғалардың мәні.
Қабылдаушы-процеске сигналдарды жеткізу операциялық жүйемен
орындалады. Қабылдаушы-процесс қабылдауға жауап ретінде,
сигналды елемеуіне болады немесе берілген сигнал түрінің
қабылдануымен байланысты бағдарламалық кодты орындауды
бастауына болады. Код, нақты сигнал түрінің
қабылдануы кезінде
шақырылатын жекеленген функция ретінде рәсімделеді. Мұндай
функциялар «сигналдарды өңдеуші-функциялар» атауына ие болды
(немесе жай «сигналдарды өңдеуші»).
Әр процесс үшін сигналдарды өңдеушінің жиынтығы, сигналдар
өңдеушінің кестесін құрады. Кесте әр процесс үшін дара.
Өңдеуші
кестесі жолдарының саны, операциялық жүйе сүйемелдейтін сигналдар
санына тең. Кестенің әр жолында өңдеуші-функцияның бағдарламалық
коды басталатын жадының мекенжайы, сигнал нөмірі жазылады —
өңдеуші-функциясын көрсетуші мына формат декларациясына ие:
void h a n d l e r ( i n t s i g _ n u m ) ;
сигналды қабылдау кезінде процесс өзінің қалыпты орындалуын
тоқтатады
және
өңдеуші-функцияның
бағдарламалық
кодын
орындауды бастайды. Өңдеуші-функция орындалуын аяқтаған соң,
сигнал қабылдаған кезде орындалған команданың ізіне басқару
командасымен қайтарылады (10.1-сурет).
Сигналдарды өңдеуші кестенің кейбірі үшін
өңдеуші-функциялар
мекенжайын құрмауы мүмкін.