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

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

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

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

Ýòî äåéñòâèå îñóùåñòâëÿåòñÿ ñ ïîìîùüþ ñèñòåìíîãî âûçîâàint execve(const char *path, char* const argv[],char* const envir[]);Ïàðàìåòð path çàäàåò èñïîëíÿåìûé ôàéë ïðîãðàììû, êîòîðóþ íåîáõîäèìîçàïóñòèòü íà âûïîëíåíèå âìåñòî òåêóùåé (ôàéë ìîæíî çàäàòü êàê ïîëíûìïóòåì, òàê è îòíîñèòåëüíî òåêóùåãî êàòàëîãà). Ïàðàìåòðû argv è envir çàäàþò, ñîîòâåòñòâåííî, êîìàíäíóþ ñòðîêó è îêðóæåíèå äëÿ çàïóñêàåìîé ïðîãðàììû â âèäå àäðåñîâ ñòðóêòóð äàííûõ, ïîêàçàííûõ íà ðèñ. 19 (ñì. ñòð. 89).Äëÿ óäîáñòâà ïðîãðàììèðîâàíèÿ ñóùåñòâóþò åùå íåñêîëüêî ôóíêöèé ñåìåéñòâà exec, ðåàëèçîâàííûõ â áèáëèîòåêå ÷åðåç âûçîâ execve().

Íà÷íåì ñôóíêöèèint execv(const char *path, char* const argv[]);Îò âûçîâà execve(), êàê ìîæíî çàìåòèòü, ýòà ôóíêöèÿ îòëè÷àåòñÿ îòñóòñòâèåì ïàðàìåòðà envir. Îêðóæåíèå äëÿ çàïóñêàåìîé ïðîãðàììû â ýòîì ñëó÷àåáåðåòñÿ â òî÷íîñòè òî æå, êîòîðîå èìåëî ìåñòî ó òåêóùåé ïðîãðàììû, òî åñòüîêðóæåíèå, ïîïðîñòó ãîâîðÿ, íàñëåäóåòñÿ.Ñëåäóþùàÿ ïîëåçíàÿ ôóíêöèÿ èìååò òî÷íî òàêîé æå ïðîòîòèï, êàê èïðåäûäóùàÿ:int execvp(const char *path, char* const argv[]);4Âñîâðåìåííûõ ñèñòåìàõ îáû÷íî ïðîöåññû ïðîäîëæàþò ðàçäåëÿòü ñòðàíèöû ïàìÿòè äî òåõ ïîð, ïîêà îäèí èç íèõ íå ïîïûòàåòñÿ òó èëè èíóþ ñòðàíèöó ìîäèôèöèðîâàòü: â ýòîì ñëó÷àå ñîçäàåòñÿ êîïèÿñòðàíèöû91Îòëè÷èå execvp() îò execv() ñîñòîèò â òîì, ÷òî èìÿ, çàäàííîå â ïàðàìåòðåpath, ìîæåò áûòü èìåíåì ïðîãðàììû, èñïîëíÿåìûé ôàéë êîòîðîé íàõîäèòñÿâ îäíîé èç äèðåêòîðèé, ïåðå÷èñëåííûõ â ïåðåìåííîé îêðóæåíèÿ PATH; òàê,åñëè ïåðåìåííàÿ PATH âêëþ÷àåò äèðåêòîðèþ /bin, òî âûçâàòü ïðîãðàììó lsìîæíî ïðîñòî ïî èìåíè, íå óêàçûâàÿ ïîëíûé ïóòü.Íàêîíåö, áûâàþò ñëó÷àè, êîãäà óæå íà ýòàïå íàïèñàíèÿ èñõîäíîé ïðîãðàììû íàì èçâåñòíî òî÷íîå êîëè÷åñòâî ïàðàìåòðîâ êîìàíäíîé ñòðîêè äëÿ çàïóñêàåìîé ïðîãðàììû.

 ýòîì ñëó÷àå íåò íåîáõîäèìîñòè ôîðìèðîâàòü ñòðóêòóðó äàííûõ, òðåáóþùóþñÿ äëÿ ðàññìîòðåííûõ ôóíêöèé. Âìåñòî ýòîãî ìîæíîèñïîëüçîâàòü îäíó èç äâóõ ôóíêöèéint execl(const char *path, const char *argv0, ...);int execlp(const char *path, const char *argv0, ...);Ýòè ôóíêöèè ïîëó÷àþò ïðîèçâîëüíîå ÷èñëî àðãóìåíòîâ, ïåðâûé èç êîòîðûõçàäàåò èñïîëíÿåìûé ôàéë, îñòàëüíûå − àðãóìåíòû êîìàíäíîé ñòðîêè. ×òîáûôóíêöèÿ çíàëà, ãäå îñòàíîâèòüñÿ, ïîñëå ïîñëåäíåãî ñëîâà êîìàíäíîé ñòîêèñëåäóåò äîáàâèòü åùå îäèí ïàðàìåòð ñî çíà÷åíèåì NULL. Ñëåäóåò îáðàòèòüâíèìàíèå, ÷òî êîìàíäíàÿ ñòðîêà âêëþ÷àåò íóëåâîé ýëåìåíò, ïîä êîòîðûìïîäðàçóìåâàåòñÿ èìÿ ñàìîé ïðîãðàììû; òàêèì îáðàçîì, àðãóìåíò argv0 −ýòî íå ïåðâûé àðãóìåíò êîìàíäíîé ñòðîêè, à íå÷òî èìåþùåå îòíîøåíèå êèìåíè ïðîãðàììû, â áîëüøèíñòâå ñëó÷àåâ çíà÷åíèå argv0 ïîïðîñòó ñîâïàäàåòñ path.Ðàçëè÷èå ìåæäó execl() è execlp() â òîì, ÷òî ïåðâàÿ òðåáóåò óêàçàíèÿÿâíîãî ïóòè ê èñïîëíÿåìîìó ôàéëó, òîãäà êàê âòîðàÿ âûïîëíÿåò ïîèñê ïîïåðåìåííîé PATH, ïîäîáíî òîìó, êàê ýòî äåëàåò execvp().Äîïóñòèì, òðåáóåòñÿ âûïîëíèòü êîìàíäó ls -l -a /var.

Ýòî ìîæíî ñäåëàòü, íàïðèìåð, òàê:char *argv[] = { "ls", "-l", "-a", "/var", NULL };execvp("ls", argv);ëèáî òàê:execlp("ls", "ls", "-l", "-a", "/var", NULL);Ïîâòîðèì, ÷òî âñå ôóíêöèè ñåìåéñòâà exec çàìåíÿþò â ïàìÿòè ïðîöåññàâûïîëíÿâøóþñÿ (è âûçâàâøóþ exec) ïðîãðàììó íà äðóãóþ, óêàçàííóþ â ïàðàìåòðàõ âûçîâà. Ïîýòîìó â ñëó÷àå óñïåõà ôóíêöèè exec óïðàâëåíèå óæå íåâîçâðàùàþò (â ñàìîì äåëå, ïðîãðàììû, â êîòîðóþ ìîæíî áûëî áû âåðíóòüóïðàâëåíèå, â ýòîì ñëó÷àå óæå íåò; âìåñòî íåå ðàáîòàåò íîâàÿ ïðîãðàììà). Âñëó÷àå îøèáêè âîçâðàùàåòñÿ çíà÷åíèå -1, íî ïðîâåðÿòü åãî íå îáÿçàòåëüíî:ñàì ôàêò âîçâðàòà óïðàâëåíèÿ ñâèäåòåëüñòâóåò î ïðîèñøåäøåé îøèáêå.92Îòìåòèì, ÷òî îòêðûòûå ôàéëîâûå äåñêðèïòîðû ïðè âûïîëíåíèè execîñòàþòñÿ îòêðûòûìè5 , ÷òî ïîçâîëÿåò ïåðåä çàïóñêîì íà âûïîëíåíèå âíåøíåé ïðîãðàììû ïðîèçâåñòè ìàíèïóëÿöèè ñ äåñêðèïòîðàìè.

Ýòî ñâîéñòâî execèñïîëüçóåòñÿ äëÿ ïåðåíàïðàâëåíèÿ ââîäà-âûâîäà.14.2.3Çàâåðøåíèå ïðîöåññàÄëÿ çàâåðøåíèÿ ïðîöåññà èñïîëüçóåòñÿ âûçîâvoid exit(int code);Ïàðàìåòð code çàäàåò êîä çàâåðøåíèÿ ïðîöåññà. Ñ÷èòàåòñÿ, ÷òî çíà÷åíèå 0îçíà÷àåò óñïåøíîå çàâåðøåíèå, çíà÷åíèÿ 1, 2, 3 è ò.ä. − ÷òî ïðîèçîøëà òà èëèèíàÿ îøèáêà èëè íåóäà÷à.

Îáû÷íî èñïîëüçóþòñÿ çíà÷åíèÿ, íå ïðåâûøàþùèå10, õîòÿ ýòî íå îáÿçàòåëüíî.Ïðîöåññ òàêæå çàâåðøàåòñÿ, åñëè çàêàí÷èâàåò èñïîëíÿòüñÿ åãî ôóíêöèÿmain().  ýòîì ñëó÷àå â êà÷åñòâå êîäà çàâåðøåíèÿ áåðåòñÿ çíà÷åíèå, âîçâðàùåííîå èç ôóíêöèè main() (ýòî ÿâëÿåòñÿ ïðè÷èíîé òîãî, ÷òî â Unix'åôóíêöèÿ main() îáÿçàòåëüíî èìååò òèï âîçâðàùàåìîãî çíà÷åíèÿ int).Çàáåãàÿ âïåðåä, îòìåòèì, ÷òî ïðîöåññ òàêæå ìîæåò áûòü óíè÷òîæåí ñèãíàëîì èçâíå; â ýòîì ñëó÷àå êîäà çàâåðøåíèÿ ó íåãî íå áóäåò.14.2.4Ïðîöåññû-çîìáè è èõ îáðàáîòêàÏîñëå çàâåðøåíèÿ ïðîöåññà â ñèñòåìå îñòàåòñÿ èíôîðìàöèÿ î òîì, ïðèêàêèõ îáñòîÿòåëüñòâàõ çàâåðøèëñÿ ïðîöåññ (ñàì ëè îí çàâåðøèëñÿ, åñëè äà −òî ñ êàêèì êîäîì çàâåðøåíèÿ, åñëè íåò − òî êàêèì ñèãíàëîì îí óíè÷òîæåí)è çíà÷åíèÿ ñ÷åò÷èêîâ ïîòðåáëåííûõ ðåñóðñîâ.

Ýòó èíôîðìàöèþ äîëæåí çàòðåáîâàòü ðîäèòåëüñêèé ïðîöåññ6 . Äî òåõ ïîð, ïîêà ñîîòâåòñòâóþùàÿ èíôîðìàöèÿ íå áóäåò çàòðåáîâàíà ðîäèòåëüñêèì ïðîöåññîì, çàâåðøåííûé ïðîöåññïðîäîëæàåò ñóùåñòâîâàòü â ñèñòåìå â âèäå ïðîöåññà-çîìáè, òî åñòü çàíèìàåò ìåñòî â òàáëèöå ïðîöåññîâ, ïðè ýòîì íå èìåÿ êîäà, äàííûõ è ò.ï., à òîëüêîèäåíòèôèêàòîð, ñ÷åò÷èêè ðåñóðñîâ è ñòàòóñ çàâåðøåíèÿ.Çàòðåáîâàòü èíôîðìàöèþ (è óáðàòü çîìáè-ïðîöåññ èç ñèñòåìû) ïîçâîëÿþò ñèñòåìíûå âûçîâû ñåìåéñòâà wait(). Ïðîñòåéøèé èç íèõ èìååò ñëåäóþùèé ïðîòîòèï:int wait(int *status);5Âïðèíöèïå, ìîæíî çàñòàâèòü ñèñòåìó çàêðûòü íåêîòîðûå äåñêðèïòîðû ïðè âûïîëíåíèè exec, óñòàíîâèâ íà ýòè äåñêðèïòîðû ôëàã close-on-exec ñ ïîìîùüþ âûçîâà fcntl(), íî òàê äåëàþò ðåäêî6 Åñëè ðîäèòåëüñêèé ïðîöåññ çàâåðøàåòñÿ ðàíüøå äî÷åðíåãî, ôóíêöèè ðîäèòåëüñêîãî áåðåò íà ñåáÿïðîöåññ init (ïðîöåññ íîìåð 1)93 ñëó÷àå, åñëè íè îäíîãî äî÷åðíåãî ïðîöåññà íåò, âûçîâ âîçâðàùàåò êîä îøèáêè (çíà÷åíèå -1).

 ñëó÷àå, åñëè äî÷åðíèå ïðîöåññû åñòü, íî íè îäèí èç íèõåùå íå çàâåðøèëñÿ (òî åñòü íåò íè îäíîãî çîìáè, êîòîðîãî ìîæíî ñíÿòü),âûçîâ æäåò çàâåðøåíèÿ ëþáîãî èç äî÷åðíèõ ïðîöåññîâ (îòñþäà íàçâàíèå âûçîâà − wait, àíãë. æäàòü ). ñëó÷àå óñïåõà âûçîâ âîçâðàùàåò pid çàâåðøèâøåãîñÿ ïðîöåññà. Åñëèïàðàìåòð ïðåäñòàâëÿë ñîáîé íåíóëåâîé óêàçàòåëü, â öåëî÷èñëåííóþ ïåðåìåííóþ, íà êîòîðóþ îí óêàçûâàë, çàïèñûâàåòñÿ èíôîðìàöèÿ î êîäå çàâåðøåíèÿ ïðîöåññà èëè î íîìåðå ñèãíàëà, ïî êîòîðîìó ïðîöåññ áûë ñíÿò. Äëÿàíàëèçà èíôîðìàöèè â ýòîé ïåðåìåííîé èñïîëüçóþòñÿ ìàêðîñû WIFEXITED,WIFSIGNALED (áûë ëè ïðîöåññ çàâåðøåí îáû÷íûì ñïîñîáîì èëè ïî ñèãíàëó),WEXITSTATUS (åñëè çàâåðøåí îáû÷íûì îáðàçîì, òî êàêîâ êîä çàâåðøåíèÿ),WTERMSIG (åñëè ïî ñèãíàëó, òî êàêîâ íîìåð ñèãíàëà).Áîëåå ãèáêèì ÿâëÿåòñÿ âûçîâint wait4(int pid, int *status, int options,struct rusage *rusage); êà÷åñòâå ïåðâîãî ïàðàìåòðà ìîæíî óêàçàòü èäåíòèôèêàòîð êîíêðåòíîãîïðîöåññà, ëèáî -1, åñëè òðåáóåòñÿ äîæäàòüñÿ ëþáîãî äî÷åðíåãî ïðîöåññà; èìååòñÿ òàêæå âîçìîæíîñòü äîæäàòüñÿ ïðîöåññà èç îïðåäåëåííîé ãðóïïû ïðîöåññîâ.

Ïàðàìåòð status èñïîëüçóåòñÿ òàê æå, êàê äëÿ ïðåäûäóùåãî âûçîâà. Âêà÷åñòâå çíà÷åíèÿ options ìîæíî óêàçàòü ÷èñëî 0, ëèáî êîíñòàíòó WNOHANG. ýòîì ñëó÷àå âûçîâ íå æäåò çàâåðøåíèÿ ïðîöåññîâ; åñëè íè îäíîãî ïîäõîäÿùåãî çîìáè íåò, âûçîâ íåìåäëåííî âîçâðàùàåò çíà÷åíèå 0.

Åñëè óêàçàòåëü rusage íåíóëåâîé, â óêàçóåìóþ îáëàñòü ïàìÿòè çàïèñûâàþòñÿ çíà÷åíèÿñ÷åò÷èêîâ ðåñóðñîâ çàâåðøèâøåãîñÿ ïðîöåññà. Âûçîâ âîçâðàùàåò -1 â ñëó÷àåîøèáêè, 0 â ñëó÷àå, åñëè èñïîëüçîâàëàñü îïöèÿ WNOHANG è çàâåðøèâøèõñÿïðîöåññîâ íå áûëî, è pid çàâåðøèâøåãîñÿ ïðîöåññà, åñëè âûçîâ óñïåøíî ïîëó÷èë èíôîðìàöèþ èç çîìáè.14.2.5ÏðèìåðÏðèâåäåì ïðèìåð çàïóñêà âíåøíåé ïðîãðàììû ñ ïîìîùüþ ñâÿçêèfork()+exec().int pid;pid = fork();if(pid == -1) { /* îøèáêà */perror("fork");exit(1);94}if(pid == 0) { /* äî÷åðíèé ïðîöåññ */execlp("ls", "ls", "-l", "-a", "/var", NULL);perror("ls"); /* exec âåðíóë óïðàâëåíèå -> îøèáêà */exit(1); /* çàâåðøàåì ïðîöåññ ñ íåóñïåøíûì êîäîì */}/* ðîäèòåëüñêèé ïðîöåññ */wait(NULL); /* äîæäàåìñÿ îêîí÷àíèÿ äî÷åðíåãî ïðîöåññà,çàîäíî óáèðàåì çîìáè */14.3Æèçíåííûé öèêë ïðîöåññàблокировка(откачан)готовность(откачан)блокировкасозданиеготовностьядропольз.

режимпрерываниепланировщиквыполнениев режиме ядравыйзовынемстисгопроенммарепрzombieерратвозввыполнениеÐèñ. 20: Æèçíåííûé öèêë ïðîöåññàÑ ó÷åòîì âîçìîæíîñòè îòêà÷êè íåîáõîäèìûõ ïðîöåññó äàííûõ èç ïàìÿòèíà âíåøíèå óñòðîéñòâà, æèçíåííûé öèêë ïðîöåññà ïðèíèìàåò âèä, ïîêàçàííûé íà ðèñ.

20. Íà ñõåìå âèäíî, ÷òî ïðîöåññ ìîæåò áûòü ñîçäàí êàê ãîòîâûìê èñïîëíåíèþ (åñëè â ñèñòåìå áûëî äîñòàòî÷íî äëÿ ýòîãî ñâîáîäíîé îïåðàòèâíîé ïàìÿòè), òàê è ñðàçó îòêà÷àííûì, åñëè ïàìÿòè íå õâàòèëî. Ñèñòåìàïî ñâîåìó óñìîòðåíèþ ìîæåò îòêà÷èâàòü è ïîäêà÷èâàòü îáðàòíî ïàìÿòü ãîòîâûõ ê âûïîëíåíèþ ïðîöåññîâ (êàê îòäåëüíûå ñòðàíèöû, òàê è ïðîöåññûöåëèêîì).95Ïðè çàïóñêå ïðîöåññà íà âûïîëíåíèå ÿäðî ñíà÷àëà âûïîëíÿåò íåêîòîðóþïîäãîòîâèòåëüíóþ ðàáîòó; âìåñòå ñ îáðàáîòêîé ñèñòåìíûõ âûçîâîâ è ïðîãðàììíûõ ïðåðûâàíèé ýòî ñîñòàâëÿåò âûïîëíåíèå â ðåæèìå ÿäðà. Âàæíîïîíèìàòü, ÷òî â ðåæèìå ÿäðà âûïîëíÿþòñÿ òîëüêî èíñòðóêöèè ÿäðà, íèêàêèå÷àñòè êîäà ïðîöåññà â ðåæèìå ÿäðà íèêîãäà íå èñïîëíÿþòñÿ. Íà ñàìîì äåëå,â ðåæèìå ÿäðà ðàáîòàåò, êàê ìû âèäèì, ñàìî ÿäðî.

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

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

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

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