Оқулық «Федералдық білім беруді дамыту институты»


  СИГНАЛ АЛМАСУДЫҢ УАҚЫТША



Pdf көрінісі
бет121/158
Дата01.07.2023
өлшемі3.83 Mb.
#475485
түріОқулық
1   ...   117   118   119   120   121   122   123   124   ...   158
операциялық жуйелер

10.3.4. 
СИГНАЛ АЛМАСУДЫҢ УАҚЫТША 
СИПАТТАМАЛАРЫ 
 
Соңғы мысалды талдау кезінде, егер SIGALRM немесе SIGINT 
сигналдары signal() функциясы осы сигналдарды өңдеушіні орнатқанға 
дейін процеспен қабылданған болса, онда handler() функциясы емес, ал 
әдеттегідей сигнал-өңдеуші шақырылатына назар аударғаныңыз жөн.
Берілген нақты бағдарлама үшін бұл мәселе өте маңызды емес, себебі 
процестің іске асырылуы мен сигналды орнату аралығына кететін 
уақыт процестің іске асырылуы мен оған бірінші сигналдың жетуіне 
кететін уақыттан аз. Дегенмен егерде, сигналдарды орнатудың алдында 
бағдарлама есептеуші ресурстардың мәнін талап ететін кейбір 
әрекеттерді орындаса, демек, орындалуға кететін уақытты да, бірінші 
сигналды 
қабылдағанға 
дейін 
сигналдардың 
өңдеушілері 
қондырылатына да кепілдік бере алмайтын еді. 


192 
Процеске келіп түскен сигналдың процестің өзіне емес сыртқы 
ортаға байланысты болатындықтан, процестер арасындағы сигнал 
алмасудың уақытша сипаттамаларының есебі және уақыттың нақты 
сәтінде сигналдардың түсу мүмкіндігі — сигналдарды пайдаланушы 
бағдарламаларды жобалау кезінде есепке алынуы қажет негізгі сәттер 
болып табылады.
Процесс басқа жұмыспен айналысқан кезде, қолайсыз уақытта 
сигналдардың түсу мүмкіндігін төмендету, біріншіден, басқа 
процестермен (мүмкін болған кезде) сигналдарды жіберуі сәттерін 
нақты жоспарлау үшін екіншіден, сигналдарды қабылдау мүмкіншілігі 
көп болған уақытта, қабылдаушы-процестің орындалуын тоқтата тұруы 
үшін қажет. Егер процесс тоқтатылған күйде сигналды қабылдап алса, 
мұны ешқандай есептеуіш процесс үзе алмайды. 
Процестің орындалуын екі әдіспен тоқтатуға болады. Бірінші 
процестің орындалуын тоқтатады және тоқтатылған жағдайдан шығу 
тек процес сигналды қабылдаған кезде мүмкін болады. Осындай кідіріс 
үшін pause() функция қолданылады, ал кідірту тәсілінің өзін, үзілістегі 
процесті орнату деп аталады. Екінші тәсіл уақыт аралығында берілетін 
процестің орындалуын тоқтатады. Процесс орындалуы осы аралықтың 
бітуімен немесе сигналды қабылдауымен жалғасады. Мұндай кідіріс 
үшін sleep() функциясы орнатылады, ал тәсілдің өзі «процесті 
ұйықтату» деген атауға ие болды.
Рause() және sleep() функцияларының мынадай прототиптері бар :
#include 
void pause(void);
int sleep(int sleep_sec);
Рause() функциясы ешқандай параметрлерді қайтармайды және 
қабылдамайды. Функциямен орындалатын жалғыз әрекет — процеспен 
сигналдың қабылдауына дейін процестің орындалуын кідірту. 
Сигналды қабылдағаннан және өңдеуші аяқтағаннан кейін басқару 
pause()-н кейінгі командаға беріледі. 
Sleep() функциясы ұзақтығы секундта sleep_sec параметрінің 
мәніне тең, уақыт аралығындағы процестің орындалуын кідіртеді. 
Процесс кідірісі кезінде сигнал қабылданған болса берілген уақыт 
аралығының аяқталуына дейін қалған толық секундқа тең мәнді 
қайтарады. Мысалы, егер уақыт аралығының аяқталуына 5,8 с қалса 
онда функция 5 қайтарады.
Егер уақыт интервалын нақтырақ беру талап етілсе usleep() 
функциясын қолдануға болады: 
#include 


193 
void usleep(long sleep_usec);
usleep() функциясы sleep() функциясынан уақыт бірлігінің 
өлшенуімен 
ерекшеленеді 
—sleep_usec 
параметрі 
уақытты 
микросекундта береді. Sleep() функциясына қарағанда, usleep() 
функциясы - егер процесс usleep() функциясының жұмысы кезінде 
сигнал алған болса, онда интервал аяқталуына дейін қалған уақыт 
мәнін қайтармайды.


Достарыңызбен бөлісу:
1   ...   117   118   119   120   121   122   123   124   ...   158




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет