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


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



Pdf көрінісі
бет175/220
Дата25.02.2022
өлшемі2,22 Mb.
#26438
түріОқулық
1   ...   171   172   173   174   175   176   177   178   ...   220
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   ...   171   172   173   174   175   176   177   178   ...   220




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

    Басты бет