Главная » Просмотр файлов » А.В. Столяров - Введение в операционные системы

А.В. Столяров - Введение в операционные системы (1114673), страница 30

Файл №1114673 А.В. Столяров - Введение в операционные системы (А.В. Столяров - Введение в операционные системы) 30 страницаА.В. Столяров - Введение в операционные системы (1114673) страница 302019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 30)

Ïàðàìåòð n óêàçûâàåò, êàêîå êîëè÷åñòâî ýëåìåíòîâ â ýòèõìíîæåñòâàõ ÿâëÿåòñÿ çíà÷àùèì. Ýòîò ïàðàìåòð íåîáõîäèìî óñòàíîâèòü ðàâíûì max_d+1, ãäå max_d − ìàêñèìàëüíûé íîìåð äåñêðèïòîðà ñðåäè ïîäëåæèùèõ îáðàáîòêå. Íàêîíåö, ïàðàìåòð timeout çàäàåò ïðîìåæóòîê âðåìåíè,ñïóñòÿ êîòîðûé ñëåäóåò âåðíóòü óïðàâëåíèå, äàæå åñëè íèêàêèõ ñîáûòèé,ñâÿçàííûõ ñ äåñêðèïòîðàìè, íå ïðîèçîøëî.Îáúåêò ìíîæåñòâî äåñêðèïòîðîâ çàäàåòñÿ ïåðåìåííîé òèïà fd_set.Âíóòðåííÿÿ ðåàëèçàöèÿ ïåðåìåííûõ ýòîãî òèïà, âîîáùå ãîâîðÿ, äëÿ ðàçëè÷íûõ ñèñòåì ìîæåò îêàçàòüñÿ ðàçíîé, íî ïðîùå âñåãî åå ïðåäñòàâëÿòü ñåáå êàêáèòîâóþ ñòðîêó, ãäå êàæäîìó äåñêðèïòîðó ñîîòâåòñòâóåò îäèí áèò.

Äëÿ ðàáîòû ñ ïåðåìåííûìè ýòîãî òèïà ñèñòåìà ïðåäîñòàâëÿåò â íàøå ðàñïîðÿæåíèåñëåäóþùèå ìàêðîñû:FD_ZERO(fd_set *set);/*FD_CLR(int fd, fd_set *set);/*FD_SET(int fd, fd_set *set);/*FD_ISSET(int fd, fd_set *set);/*î÷èñòèòü ìíîæåñòâî */óáðàòü äåñêðèïòîð èç ìí-âà */äîáàâèòü äåñêðèïòîð ê ìí-âó */âõîäèò ëè äåñêð-ð â ìí-âî? */Ñòðóêòóðà timeval, ñëóæàùàÿ äëÿ çàäàíèÿ ïîñëåäíåãî ïàðàìåòðà, èìååòäâà ïîëÿ òèïà long. Ïîëå tv_sec çàäàåò êîëè÷åñòâî ñåêóíä, ïîëå tv_usec −êîëè÷åñòâî ìèêðîñåêóíä (ìèëëèîííûõ äîëåé ñåêóíäû). Òàêèì îáðàçîì, íàïðèìåð, çàäàòü òàéì-àóò â 5.3 ñåêóíäû ìîæíî ñëåäóþùèì îáðàçîì:struct timeval t;t.tv_sec = 5;t.tv_usec = 300000; êà÷åñòâå ëþáîãî èç ïàðàìåòðîâ, êðîìå ïåðâîãî (êîëè÷åñòâà äåñêðèïòîðîâ), ìîæíî óêàçûâàòü íóëåâîé óêàçàòåëü, åñëè çàäàíèå äàííîãî ïàðàìåòðàíàì íå òðåáóåòñÿ.

Òàê, åñëè íóæíî ïðîñòî íåêîòîðîå âðåìÿ ïîäîæäàòü, ìîæíîóêàçàòü NULL âìåñòî âñåõ òðåõ ìíîæåñòâ äåñêðèïòîðîâ.Âûçîâ select() âîçâðàùàåò óïðàâëåíèå â ñëåäóþùèõ ñëó÷àÿõ:•  ñëó÷àå, åñëè ïðîèçîøëà îøèáêà (â ÷àñòíîñòè, â îäíîì èç ìíîæåñòâäåñêðèïòîðîâ îêàçàëîñü ÷èñëî, íå ñîîòâåòñòâóþùåå íè îäíîìó èç îòêðûòûõ äåñêðèïòîðîâ); â ýòîì ñëó÷àå âûçîâ âîçâðàùàåò -1.•  ñëó÷àå, åñëè ïðîãðàììà ïîëó÷èëà íåèãíîðèðóåìûé ñèãíàë.  ýòîìñëó÷àå òàêæå âîçâðàùàåòñÿ -1; îòëè÷èòü ýòó ñèòóàöèþ îò îøèáî÷íîéìîæíî ïî çíà÷åíèþ ãëîáàëüíîé ïåðåìåííîé errno, êîòîðàÿ â ýòîì ñëó÷àå áóäåò ðàâíà êîíñòàíòå EINTR.137• Èñòåê òàéì-àóò, òî åñòü ñ ìîìåíòà âõîäà â âûçîâ ïðîøëî áîëüøå âðåìåíè, ÷åì óêàçàíî â ïàðàìåòðå timeout (åñëè, êîíå÷íî, ýòîò ïàðàìåòð íåáûë íóëåâûì óêàçàòåëåì).

 ýòîì ñëó÷àå âûçîâ âîçâðàùàåò 0.• Íà êàêîé-ëèáî èç äåñêðèïòîðîâ, âõîäÿùèõ â ìíîæåñòâî readfds, ïðèøëè äàííûå, êîòîðûå ìîæíî ïðî÷èòàòü âûçîâîì read() (òî åñòü âûçîâread() íå çàáëîêèðóåòñÿ); â ñëó÷àå ñëóøàþùåãî ñîêåòà â ðîëè äàííûõâûñòóïàþò çàïðîñû íà ñîåäèíåíèå, òî åñòü, ñîîòâåòñòâåííî, ìîæíî ãàðàíòèðîâàòü, ÷òî âûçîâ accept() íå çàáëîêèðóåòñÿ; â ñëó÷àå íåïîòîêîâûõ ñîêåòîâ ãàðàíòèðóåòñÿ, ÷òî íå áóäåò çàáëîêèðîâàí ñîîòâåòñòâóþùèé âûçîâ recvfrom() è ò.ï. Ñëåäóåò îáðàòèòü âíèìàíèå, ÷òî ñèòóàöèÿêîíåö ôàéëà òàêæå èñòîëêîâûâàåòñÿ êàê ãîòîâíîñòü ñîêåòà íà ÷òåíèå, ïîñêîëüêó â ýòîé ñèòóàöèè âûçîâ read() òàêæå íå áëîêèðóåòñÿ.• Êàêîé-ëèáî èç äåñêðèïòîðîâ, âõîäÿùèõ â writefds, ãîòîâ ê íåìåäëåííîé çàïèñè, òî åñòü, åñëè ïðèìåíèòü ê íåìó âûçîâ write(), send() èëèåùå êàêîé-òî ïîäîáíûé, òî îí íå çàáëîêèðóåò ïðîöåññ.

Ñëåäóåò îòìåòèòü, ÷òî áîëüøèíñòâî äåñêðèïòîðîâ, îòêðûòûõ íà çàïèñü, ê çàïèñèãîòîâû â ëþáîé ìîìåíò, òàê ÷òî, åñëè âíåñòè êàêîé-òî èç íèõ â ìíîæåñòâî writefds, âûçîâ âåðíåò óïðàâëåíèå íåìåäëåííî. Îáû÷íî ïàðàìåòðwritefds èñïîëüçóåòñÿ ïðè ïåðåäà÷å â ñåòü áîëüøèõ îáúåìîâ äàííûõ,êîãäà áóôåð èñõîäÿùåé èíôîðìàöèè ìîæåò ïåðåïîëíèòüñÿ è ñòàòü ïðè÷èíîé áëîêèðîâàíèÿ ïðîöåññà íà âûçîâå write().• Íà êàêîì-ëèáî èç äåñêðèïòîðîâ, âõîäÿùèõ âî ìíîæåñòâî exceptfds,âîçíèêëà èñêëþ÷èòåëüíàÿ ñèòóàöèÿ. Íà ñàìîì äåëå, ýòî âîçìîæíî òîëüêî íà ñåòåâûõ ñîêåòàõ è òîëüêî â ñëó÷àå èñïîëüçîâàíèÿ ìåõàíèçìà OOB(out-of-band), à îí èñïîëüçóåòñÿ ñðàâíèòåëüíî ðåäêî.

Ïîýòîìó è ñàì ïàðàìåòð exceptfds èñïîëüçóåòñÿ ðåäêî, îáû÷íî óêàçûâàåòñÿ NULL. ïîñëåäíèõ òðåõ ñëó÷àÿõ âûçîâ select() âîçâðàùàåò êîëè÷åñòâî äåñêðèïòîðîâ, èçìåíèâøèõ ñòàòóñ.Âñå ìíîæåñòâà äåñêðèïòîðîâ, ïåðåäàííûõ âûçîâó select(), â ýòîì ñëó÷àåèçìåíÿþòñÿ: â íèõ îñòàþòñÿ òîëüêî òå äåñêðèïòîðû, ñòàòóñ êîòîðûõ èçìåíèëñÿ. Òàêèì îáðàçîì, ïðîâåðèâ ñ ïîìîùüþ ìàêðîñà FD_ISSET èíòåðåñóþùèå íàñäåñêðèïòîðû, ìîæíî óçíàòü, íà êàêîì èç íèõ òðåáóåòñÿ âûïîëíèòü îïåðàöèþ÷òåíèÿ (èëè ïðèíÿòèÿ ñîåäèíåíèÿ, èëè çàïèñè, è ò.ï.)Òàêèì îáðàçîì, ðàáîòó ñ âûçîâîì select() ìîæíî ïîñòðîèòü ïî íèæåïðèâåäåííîé ñõåìå.  ïðèâåäåííîì êîäå ïðåäïîëàãàåòñÿ, ÷òî íîìåð ñëóøàþùåãîñîêåòà õðàíèòñÿ â ïåðåìåííîé ls; îðãàíèçîâàòü õðàíåíèå äåñêðèïòîðîâ êëèåíòñêèõ ñîêåòîâ ìîæíî ñàìûìè ðàçíûìè ñïîñîáàìè, â çàâèñèìîñòè îò çàäà÷è.Êðîìå òîãî, ïðåäïîëàãàåòñÿ, ÷òî out-of-band data íå èñïîëüçóåòñÿ, è ÷òî ïåðåäàâàåìûå â ñåòü îáúåìû äàííûõ íåâåëèêè, òàê ÷òî èñïîëüçóåòñÿ òîëüêîìíîæåñòâî readfds.138for(;;) { /* ãëàâíûé öèêë */int fd;fd_set readfds;int max_d = ls;/* èçíà÷àëüíî ïîëàãàåì, ÷òî ìàêñèìàëüíûì ÿâëÿåòñÿíîìåð ñëóøàþùåãî ñîêåòà */FD_ZERO(&readfds); /* î÷èùàåì ìíîæåñòâî */FD_SET(ls, &readfds);/* ââîäèì â ìíîæåñòâîäåñêðèïòîð ñëóøàþùåãî ñîêåòà *//* îðãàíèçóåì öèêë ïî ñîêåòàì êëèåíòîâ */for(fd=/*äåñêðèïòîð ïåðâîãî êëèåíòà*/ ;/*êëèåíòû åùå íå èñ÷åðïàíû?*/;fd=/*äåñêðèïòîð ñëåäóþùåãî êëèåíòà*/){/* çäåñü fd - î÷åðåäíîé êëèåíòñêèé äåñêðèïòîð *//* âíîñèì åãî â ìíîæåñòâî */FD_SET(fd, &readfds);/* ïðîâåðÿåì, íå áîëüøå ëè îí,íåæåëè òåêóùèé ìàêñèìóì */if(fd > max_d) max_d = fd;}timeout.tv_sec = /*çàïîëíÿåì*/;timeout.tv_usec = /*òàéì-àóò*/;int res = select(max_d+1, &readfds, NULL, NULL, NULL);if(res < 1) {if(errno != EINTR) {/* îáðàáîòêà îøèáêè, ïðîèñøåäøåé â select()'å */} else {/* îáðàáîòêà ñîáûòèÿ "ïðèøåäøèé ñèãíàë */}continue; /* äåñêðèïòîðû ïðîâåðÿòü áåñïîëåçíî */}if(res == 0) {/* îáðàáîòêà ñîáûòèÿ "òàéì-àóò" */continue; /* äåñêðèïòîðû ïðîâåðÿòü áåñïîëåçíî */}if(FD_ISSET(ls, &readfds)) {139}}/* ïðèøåë íîâûé çàïðîñ íà ñîåäèíåíèå *//* çäåñü åãî íåîáõîäèìî ïðèíÿòüâûçîâîì accept() è çàïîìíèòüäåñêðèïòîð íîâîãî êëèåíòà *//* òåïåðü ïåðåáèðàåì âñå êëèåíòñêèå äåñêðèïòîðû */for(fd=/*äåñêðèïòîð ïåðâîãî êëèåíòà*/ ;/*êëèåíòû åùå íå èñ÷åðïàíû?*/;fd=/*äåñêðèïòîð ñëåäóþùåãî êëèåíòà*/){if(FD_ISSET(fd, &readfds)) {/* ïðèøëè äàííûå îò êëèåíòà ñ ñîêåòîì fd *//* ÷èòàåì èõ âûçîâîì read() èëèrecv() è îáðàáàòûâàåì */}}/* êîíåö ãëàâíîãî öèêëà */Ñïîñîá ïîñòðîåíèÿ ïðîãðàìì, ïðè êîòîðîì ïðîãðàììà èìååòãëàâíûé öèêë, îäíà èòåðàöèÿ êîòîðîãî ñîîòâåòñòâóåò íàñòóïëåíèþ íåêîòîðîãî ñîáûòèÿ èç îïðåäåëåííîãî ìíîæåñòâà, à âñå äåéñòâèÿ ïðîãðàììû ïîñòðîåíû êàê ðåàêöèÿ íà ñîáûòèå, íàçûâàåòñÿñîáûòèéíî-óïðàâëÿåìûì ïðîãðàììèðîâàíèåì (àíãë.

event-drivenprogramming)2525.1Ãðóïïû ïðîöåññîâ è ñåàíñû â ÎÑ UnixÎáùèå ñâåäåíèÿÏðîöåññû â ÎÑ Unix îáúåäèíÿþòñÿ â ãðóïïû ïðîöåññîâ è â ñåàíñû.Ñåàíñû èçíà÷àëüíî çàäóìûâàëèñü äëÿ îáúåäèíåíèÿ âñåõ ïðîöåññîâ, çàïóùåííûõ ïîëüçîâàòåëåì ñ îäíîãî êîíêðåòíîãî òåðìèíàëà. Òàêèì îáðàçîì,ñåàíñ ìîæåò èìåòü íå áîëåå îäíîãî óïðàâëÿþùåãî òåðìèíàëà, è òåðìèíàë íåìîæåò áûòü óïðàâëÿþùèì äëÿ áîëåå ÷åì îäíîãî ñåàíñà. Êàê ìîæíî äîãàäàòüñÿ, ñåàíñ îáû÷íî ñîçäàåòñÿ êàê ðàç â òîò ìîìåíò, êîãäà ïîëüçîâàòåëü âîøåë âñèñòåìó ïî òåðìèíàëüíîé ëèíèè èëè, íàïðèìåð, çàïóñòèë ïðîãðàììó xterm. ðàìêàõ îäíîãî ñåàíñà ïðîöåññû ìîãóò áûòü ðàçáèòû íà ãðóïïû. Ãðóïïàïðîöåññîâ âõîäèò â ñåàíñ öåëèêîì, òî åñòü â îäíó ãðóïïó íå ìîãóò âõîäèòü1402573группа 2573сеанс257325992581426172597нссеа2762582группа 258130772764группа 2617Ðèñ.

24: Ñåàíñû è ãðóïïû ïðîöåññîâïðîöåññû èç ðàçíûõ ñåàíñîâ. Ìèíèìóì îäíà ãðóïïà â ñåàíñå âñåãäà ïðèñóòñòâóåò, îíà ñîçäàåòñÿ ïðè ñîçäàíèè ñåàíñà. êàæäîì ñåàíñå, èìåþùåì óïðàâëÿþùèé òåðìèíàë, îäíà ãðóïïà ïðîöåññîâ íàçûâàåòñÿ îñíîâíîé ãðóïïîé 2 , à âñå îñòàëüíûå ãðóïïû òîãî æå ñåàíñà,åñëè òàêîâûå åñòü, − ôîíîâûìè ãðóïïàìè.Ãðóïïû ïðîöåññîâ èçíà÷àëüíî çàäóìàíû äëÿ îáúåäèíåíèÿ ïðîöåññîâ, ðàáîòàþùèõ íàä îáùåé çàäà÷åé. Êîìàíäíûé èíòåðïðåòàòîð îáû÷íî ñîçäàåò íîâóþ ãðóïïó ïðîöåññîâ äëÿ âûïîëíåíèÿ êàæäîé ïîäàííîé êîìàíäû, òàê ÷òîâñå ïðîöåññû, ïîðîæäåííûå â îòâåò íà êàæäóþ êîíêðåòíóþ êîìàíäó ïîëüçîâàòåëÿ, îêàçûâàþòñÿ îáúåäèíåíû â îäíó ãðóïïó (â ÷àñòíîñòè, ïðè çàïóñêåêîíâåéåðà âñå åãî ýëåìåíòû îáúåäèíÿþòñÿ â ãðóïïó).Ïðîöåññ íàñëåäóåò ïðèíàäëåæíîñòü ê ñåàíñó è ãðóïïå îò ñâîåãî íåïîñðåäñòâåííîãî ïðåäêà (êàê óæå ãîâîðèëîñü, ïðè âûçîâå fork() ïàðàìåòðû sidè pgid íå èçìåíÿþòñÿ).

Îäíàêî ïðîöåññ ìîæåò ïðè æåëàíèè óéòè â íîâóþãðóïïó èëè äàæå â íîâûé ñåàíñ. Ãîâîðÿ êîíêðåòíåå, ïðîöåññ ìîæåò:• ñîçäàòü ñåàíñ (ïðè ýòîì â ýòîì ñåàíñå ñîçäàåòñÿ è ãðóïïà, ïðè÷åì ïðîöåññ, ñîçäàâøèé ñåàíñ, àâòîìàòè÷åñêè ñòàíîâèòñÿ ëèäåðîì è ñåàíñà, èãðóïïû; îòìåòèì, ÷òî èäåíòèôèêàòîð ñåàíñà è èäåíòèôèêàòîð ãðóïïûðàâíû èäåíòèôèêàòîðó ïðîöåññà, èõ ñîçäàâøåãî);• ñîçäàòü ãðóïïó â ðàìêàõ òîãî æå ñåàíñà (ïðè ýòîì ïðîöåññ ñòàíîâèòñÿëèäåðîì ãðóïïû);2 Àíãëèéñêèé îðèãèíàë ýòîãî òåðìèíà − foreground group, ÷òî ìîæíî áóêâàëüíî ïåðåâåñòè êàê ãðóï-ïà ïåðåäíåãî ïëàíà; â ðóññêîÿçû÷íîé ëèòåðàòóðå âñòðå÷àåòñÿ òàêæå òåðìèí141òåêóùàÿ ãðóïïà• ïåðåéòè â äðóãóþ ãðóïïó òîãî æå ñàíñà.Îòìåòèì åùå îäèí ìîìåíò: ïðîöåññ íå ìîæåò ñîçäàòü íîâûé ñåàíñ, åñëè îíóæå ÿâëÿåòñÿ ëèäåðîì ñåàíñà (òî åñòü åãî sid ñîâïàäàåò ñ pid'îì) è íå ìîæåòñîçäàòü íîâóþ ãðóïïó, åñëè óæå ÿâëÿåòñÿ ëèäåðîì ãðóïïû (òî åñòü åãî pgidñîâïàäàåò ñ pid'îì).Âñå ýòè ìåõàíèçìû ââåäåíû â ÎÑ Unix äëÿ îáëåã÷åíèÿ óïðàâëåíèÿ ïðîöåññàìè.

Характеристики

Тип файла
PDF-файл
Размер
1,27 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6439
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее