СИГН
АЛДАР
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-сурет).
Сигналдарды өңдеуші кестенің кейбірі үшін өңдеуші-функциялар
мекенжайын құрмауы мүмкін.
|