А.В. Столяров - Введение в операционные системы (1114673), страница 22
Текст из файла (страница 22)
îáðàáîòêà îøèáêè ... */ }if(pid == 0) {/* äî÷åðíèé ïðîöåññ */int fd = open("filelist", O_CREAT|O_WRONLY|O_TRUNC, 0666);if(fd == -1) exit(1);dup2(fd, 1);100close(fd);execlp("ls", "ls", "-l", "-a", "-R", "/", NULL);perror("ls");exit(1);}/* ðîäèòåëüñêèé ïðîöåññ */wait(&status);if(!WIFEXITED(status) || WEXITSTATUS(status)!=0) {/* ... îáðàáîòêà îøèáêè ... */}16.5Óïðàâëåíèå ïðî÷èìè ñâîéñòâàìè ïðîöåññàÓçíàòü çíà÷åíèÿ ïàðàìåòðîâ uid, gid, euid, egid, pid, ppid, sid è pgidìîæíî, ñîîòâåòñòâåííî, ñèñòåìíûìè âûçîâàìè getuid(), getgid() è ò.ä.Ïàðàìåòðû pid, ppid (èäåíòèôèêàòîð ïðîöåññà è åãî ïðåäêà) èçìåíåíèòüíåëüçÿ.Ìàíèïóëÿöèÿ ïàðàìåòðàìè sid è pgid áóäåò ðàññìîòðåíà â íàøåì êóðñåïîçæå, íà ëåêöèè, ïîñâÿùåííîé ñåàíñàì è ãðóïïàì ïðîöåññîâ.Ïàðàìåòðû uid, gid, euid, egid, èäåíòèôèöèðóþùèå ïîëíîìî÷èÿ ïðîöåññà, â íåêîòîðûõ ñëó÷àÿõ ìîãóò áûòü èçìåíåíû.
Îá ýòîì ðå÷ü ïîéäåò ïðèðàññìîòðåíèè ïîëíîìî÷èé ïðîöåññîâ.Íàêîíåö, îáðàáîòêà ñèãíàëîâ áóäåò ðàññìîòðåíà ïðè èçó÷åíèè ñèãíàëîâêàê ñðåäñòâà ìåæïðîöåññíîãî âçàèìîäåéñòâèÿ.17Îáùàÿ êëàññèôèêàöèÿ ñðåäñòâ âçàèìîäåéñòâèÿ ïðîöåññîâ â ÎÑ Unix ðàìêàõ îäíîé Unix-ñèñòåìû ïðîöåññû ìîãóò òàê èëè èíà÷å âçàè-ìîäåéñòâîâàòü ìåæäó ñîáîé. Âîîáùå ãîâîðÿ, îäèí ïðîöåññ ìîæåò ïîâëèÿòüíà ðàáîòó äðóãîãî, íå ïðèáåãàÿ ê ñïåöèàëèçèðîâàííûì ñðåäñòâàì; íàïðèìåð, ïðîöåññ ìîæåò ìîäèôèöèðîâàòü ôàéë, ÷èòàåìûé äðóãèì ïðîöåññîì. Òåìíå ìåíåå, äëÿ îðãàíèçàöèè âçàèìîäåéñòâèÿ ïðîöåññîâ óäîáíåé ïîëüçîâàòüñÿñðåäñòâàìè, êîòîðûå äëÿ ýòîãî ñïåöèàëüíî ïðåäíàçíà÷åíû.Íàèáîëåå ïðèìèòèâíûì èç òàêèõ ñðåäñòâ ÿâëÿþòñÿ ñèãíàëû 1 . Ñèãíàë íåíåñåò â ñåáå íèêàêîé èíôîðìàöèè, êðîìå íîìåðà ñèãíàëà − öåëîãî ÷èñëà èç1 Íåñìîòðÿíà ïðîñòîòó ñàìîãî ñðåäñòâà, êîððåêòíîå èñïîëüçîâàíèå ñèãíàëîâ èíîãäà îêàçûâàåòñÿ ÷ðåçâû÷àéíî ñëîæíîé çàäà÷åé; ãîâîðÿ î ïðèìèòèâíîñòè ñèãíàëîâ, ìû íå ïîäðàçóìåâàåì, ÷òî îíè ïðîñòû âèñïîëüçîâàíèè.101средствавзаимодействияпроцессовлокальныесетевыесигналыканалысокетывирт.
терминалименованныетрассировканеименованныеSystem V IPCочереди сообщенийmmapразделяемая памятьсемафорыÐèñ. 21: Êëàññèôèêàöèÿ ñðåäñòâ âçàèìîäåéñòâèÿ ïðîöåññîâïðåäîïðåäåëåííîãî ìíîæåñòâà.Äëÿ ïåðåäà÷è äàííûõ ìåæäó ïðîöåññàìè ìîæíî èñïîëüçîâàòü îäíîíàïðàâëåííûå êàíàëû, ðàçëè÷àþùèåñÿ íà èìåíîâàííûå è íåèìåíîâàííûå.Ñèñòåìíûé âûçîâ mmap() ïîçâîëÿåò ñîçäàòü îáëàñòü ïàìÿòè, äîñòóïíóþíåñêîëüêèì ïðîöåññàì2 . Òàêàÿ îáëàñòü ïàìÿòè íàçûâàåòñÿ ðàçäåëÿåìîé, àïðîöåññû, ðàáîòàþùèå ñ íåé, ñ÷èòàþòñÿ âçàèìîäåéñòâóþùèìè ÷åðåç ðàçäåëÿåìóþ ïàìÿòü.Ïðè îòëàäêå ïðîãðàìì èñïîëüçóåòñÿ ðåæèì òðàññèðîâêè, ïðè êîòîðîéîäèí ïðîöåññ (îáû÷íî îòëàä÷èê) êîíòðîëèðóåò âûïîëíåíèå äðóãîãî (îòëàæèâàåìîé ïðîãðàììû).Êàê óæå ãîâîðèëîñü íà ëåêöèè, ïîñâÿùåííîé ââåäåíèþ â ÎÑ Unix, âàæíóþ ðîëü â ñèñòåìàõ ñåìåéñòâà Unix èãðàåò ïîíÿòèå òåðìèíàëà.
Ïðè íåîáõîäèìîñòè, ôóíêöèîíàëüíîñòü òåðìèíàëà êàê óñòðîéñòâà ìîæåò èìèòèðîâàòüïîëüçîâàòåëüñêèé ïðîöåññ (òàê ðàáîòàåò, íàïðèìåð, ïðîãðàììà xterm, à òàêæå ñåðâåðû, îòâå÷àþùèå çà óäàëåííûé äîñòóï ê ìàøèíå, òàêèå êàê sshd èëètelnetd). Âçàèìîäåéñòâèå òàêîãî ïðîöåññà ñ ïðîöåññàìè, äëÿ êîòîðûõ èìèòèðóåìûé (òî åñòü ïðîãðàììíî ðåàëèçîâàííûé) òåðìèíàë ÿâëÿåòñÿ óïðàâëÿþùèì, íàçûâàåòñÿ âçàèìîäåéñòâèåì ÷åðåç âèðòóàëüíûé òåðìèíàë.Íåñêîëüêî îñîáîå ìåñòî â êëàññèôèêàöèè çàíèìàþò ñðåäñòâà, îáúåäèíåííûå îáùèì íàçâàíèåì System V IPC 3 . Ýòè ñðåäñòâà âêëþ÷àþò ìåõàíèçìûñîçäàíèÿ ðàçäåëÿåìîé ïàìÿòè, ìàññèâîâ ñåìàôîðîâ è î÷åðåäåé ñîîáùåíèé.Ñëåäóåò îòìåòèòü, ÷òî â ïðàêòè÷åñêîì ïðîãðàììèðîâàíèè System V IPC èñ2 Ýòîíå îñíîâíàÿ ôóíêöèîíàëüíîñòü mmap(). Èçíà÷àëüíî âûçîâ ïðåäíàçíà÷åí äëÿ îòîáðàæåíèÿ ñîäåðæèìîãî ôàéëîâ â âèðòóàëüíîå àäðåñíîå ïðîñòðàíñòâî ïðîöåññîâ.3 Ñèìâîë V â äàííîì ñëó÷àå îçíà÷àåò ðèìñêîå ïÿòü; òåðìèí ÷èòàåòñÿ êàê ñèñòýì ôàéâ àé-ïè-ñè102ïîëüçóåòñÿ ñðàâíèòåëüíî ðåäêî.
Ýðèê Ðåéìîíä â êíèãå [3] íàçûâàåò ýòè ñðåäñòâà óñòàðåâøèìè.Îñíîâíûì ñðåäñòâîì âçàèìîäåéñòâèÿ ÷åðåç êîìïüþòåðíóþ ñåòü (òîåñòü âçàèìîäåéñòâèÿ ïðîöåññîâ, íàõîäÿùèõñÿ â ðàçíûõ ñèñòåìàõ), ÿâëÿþòñÿ ñîêåòû (sockets). Ñîêåòû ïðåäñòàâëÿþò ñîáîé óíèâåðñàëüíûé ìåõàíèçì,ïðèãîäíûé äëÿ ðàáîòû ñ øèðîêèì ñïåêòðîì ïðîòîêîëîâ; ýòî îçíà÷àåò, ÷òîîáëàñòü ïðèìåíåíèÿ ñîêåòîâ íå îãðàíè÷åíà ñåòÿìè íà îñíîâå TCP/IP èëèêàêîãî-ëèáî äðóãîãî ñòàíäàðòà; áîëåå òîãî, ïðè äîáàâëåíèè â ñèñòåìó ïîääåðæêè íîâûõ ïðîòîêîëîâ íåò íåîáõîäèìîñòè èçìåíÿòü èíòåðôåéñû ñèñòåìíûõ âûçîâîâ.
Ðåàëèçàöèÿ ñîêåòîâ â ÎÑ Unix ïîääåðæèâàåò òàêæå ñïåöèàëüíûé âèä ïðîòîêîëà, êîòîðûé ìîæíî èñïîëüçîâàòü âíóòðè îäíîé ñèñòåìû, äàæå åñëè ïîääåðæêà êîìïüþòåðíûõ ñåòåé â ñèñòåìå îòñóòñòâóåò.Ñóùåñòâóþò è äðóãèå ñðåäñòâà âçàèìîäåéñòâèÿ ïî ñåòè, íî èñïîëüçóþòñÿîíè â íàñòîÿùåå âðåìÿ êðàéíå ðåäêî è â íàøåì êóðñå ðàññìàòðèâàòüñÿ íåáóäóò.1818.1ÑèãíàëûÏðåäíàçíà÷åíèå íåêîòîðûõ ñèãíàëîâÎäèí èç ïðîñòåéøèõ ñïîñîáîâ ïîâëèÿòü íà ðàáîòó ïðîöåññà − ýòî îòïðàâèòü åìó ñèãíàë èç íåêîòîðîãî ïðåäîïðåäåëåííîãî ìíîæåñòâà.Èçíà÷àëüíî ñèãíàëû áûëè ïðåäíàçíà÷åíû äëÿ ñíÿòèÿ ïðîöåññîâ ñ âûïîëíåíèÿ, íî ñ ðàçâèòèåì ñèñòåìû ïðèîáðåëè äðóãèå ôóíêöèè. Ïåðå÷èñëèì íåêîòîðûå íàèáîëåå óïîòðåáèòåëüíûå ñèãíàëû:• SIGTERM ïðåäïèñûâàåò ïðîöåññó çàâåðøèòüñÿ.
Ïðîöåññ ìîæåò ïåðåõâàòèòü èëè èãíîðèðîâàòü ýòîò ñèãíàë.• SIGKILL óíè÷òîæàåò ïðîöåññ.  îòëè÷èå îò SIGTERM, ýòîò ñèãíàë íèïåðåõâàòèòü, íè èãíîðèðîâàòü íåëüçÿ. Íåëèøíèì áóäåò çàïîìíèòü, ÷òî ñèãíàëSIGKILLèìååò íîìåð 9.Ðàçäåëåíèå óíè÷òîæàþùèõ ñèãíàëîâ íà ïåðåõâàòûâàåìûé è íåïåðåõâàòûâàåìûé ââåäåíî ñ öåëüþ ñîçäàíèÿ áîëåå ãèáêîé ïðîöåäóðû ñíÿòèÿïðîöåññîâ. Òàê, ïðè ïåðåçàãðóçêå ñèñòåìû âñåì ïðîöåññàì ðàññûëàåòñÿñíà÷àëà SIGTERM, à çàòåì, ÷åðåç 5 ñåêóíä − SIGKILL. Ýòî ïîçâîëÿåò ïðîöåññàì ïðèâåñòè ñâîè äåëà â ïîðÿäîê: íàïðèìåð, ðåäàêòîð òåêñòîâ ìîæåò ñîõðàíèòü íåñîõðàíåííûé ðåäàêòèðóåìûé òåêñò âî âðåìåííîì ôàéëå ñ òåì, ÷òîáû ïîòîì (â íà÷àëå ñëåäóþùåãî ñåàíñà ðåäàêòèðîâàíèÿ)ïðåäëîæèòü ïîëüçîâàòåëþ âîññòàíîâèòü íåñîõðàíåííûå èçìåíåíèÿ.• SIGILL, SIGSEGV, SIGFPE è SIGBUS ñèñòåìà îòïðàâëÿåò ïðîöåññàì, ÷üèäåéñòâèÿ ïðèâåëè ê âîçíèêíîâåíèþ ïðîãðàììíîãî ïðåðûâàíèÿ (ñîîò103âåòñòâåííî, ïîïûòêà âûïîëíèòü íåñóùåñòâóþùóþ èëè íåäîïóñòèìóþêîìàíäó ïðîöåññîðà, íàðóøåíèå çàùèòû ïàìÿòè, äåëåíèå íà íîëü è îáðàùåíèå ê ïàìÿòè ïî íåêîððåêòíîìó àäðåñó).
Ïî óìîë÷àíèþ ëþáîé èçýòèõ ñèãíàëîâ óíè÷òîæàåò ïðîöåññ ñ ñîçäàíèåì core-ôàéëà4 äëÿ ïîñëåäóþùåãî àíàëèçà ïðè÷èí ïðîèñøåñòâèÿ. Îäíàêî ëþáîé èç ýòèõ ñèãíàëîâ ìîæíî ïåðåõâàòèòü (íàïðèìåð, ÷òîáû ïîïûòàòüñÿ ïåðåä çàâåðøåíèåì çàïèñàòü â ôàéë ðåçóëüòàòû ðàáîòû).SIGSTOP è SIGCONT ïîçâîëÿþò, ñîîòâåòñòâåííî, ïðèîñòàíîâèòü è ïðîäîëæèòü âûïîëíåíèå ïðîöåññà. Îòìåòèì, ÷òî SIGSTOP, êàê è SIGKILL,íåëüçÿ íè ïåðåõâàòèòü, íè èãíîðèðîâàòü. SIGCONT ïåðåõâàòèòü ìîæíî,íî ñâîþ îñíîâíóþ ôóíêöèþ (ïðîäîëæèòü âûïîëíåíèå ïðîöåññà) îí âûïîëíÿåò â ëþáîì ñëó÷àå.SIGINT è SIGQUIT îòïðàâëÿþòñÿ îñíîâíîé ãðóïïå ïðîöåññîâ äàííîãîòåðìèíàëà5 ïðè íàæàòèè íà êëàâèàòóðå êîìáèíàöèé Ctrl+C è Ctrl-\,ñîîòâåòñòâåííî.
Ïî óìîë÷àíèþ îáà ñèãíàëà ïðèâîäÿò ê çàâåðøåíèþ ïðîöåññà, ïðè÷åì SIGQUIT åùå è ñîçäàåò core-ôàéë.SIGCHLD ñèñòåìà ïðèñûëàåò ðîäèòåëüñêîìó ïðîöåññó ïðè çàâåðøåíèèäî÷åðíåãî.SIGALRM ïðèñûëàåòñÿ ïî èñòå÷åíèè çàäàííîãî èíòåðâàëà âðåìåíè ïîñëåâûçîâà alarm(). Òàêèì îáðàçîì ïðîöåññ ìîæåò âçâåñòè äëÿ ñåáÿ íàïîìèíàíèå, íàïðèìåð, íà ñëó÷àé ÷ðåçìåðíî äîëãîãî âûïîëíåíèÿ òåõ èëèèíûõ äåéñòâèé. Îòïðàâèòåëåì ýòîãî ñèãíàëà îáû÷íî ÿâëÿåòñÿ îïåðàöèîííàÿ ñèñòåìà.SIGUSR1 è SIGUSR2 ïðåäíàçíà÷åíû äëÿ èñïîëüçîâàíèÿ ïðîãðàììèñòîìäëÿ ñâîèõ öåëåé.
Îòìåòèì, ÷òî ïî óìîë÷àíèþ ýòè ñèãíàëû òàêæå çàâåðøàþò ïðîöåññ.•••••18.2Îòïðàâêà ñèãíàëàÎòïðàâèòåëåì ñèãíàëà ìîæåò áûòü êàê ïðîöåññ, òàê è îïåðàöèîííàÿ ñèñòåìà, ïîëó÷àòåëåì − âñåãäà ïðîöåññ.Äëÿ îòïðàâêè ñèãíàëà ñëóæèò ñèñòåìíûé âûçîâint kill(int target_pid, int sig_no);4 Core-ôàéë− ýòî ôàéë ñ èìåíåì core èëè prog.core, ñîçäàâàåìûé îïåðàöèîííîé ñèñòåìîé â òåêóùåìêàòàëîãå ïðè àâàðèéíîì çàâåðøåíèè ïðîãðàììû.  ýòîò ôàéë ïîëíîñòüþ çàïèñûâàåòñÿ ñîäåðæèìîå ñåãìåíòîâ äàííûõ è ñòåêà íà ìîìåíò àâàðèè. Core-ôàéëû ïîçâîëÿþò ñ ïîìîùüþ îòëàä÷èêà ïðîàíàëèçèðîâàòüïðè÷èíû àâàðèè, â òîì ÷èñëå − óçíàòü òî÷êó êîäà, â êîòîðîé ïðîèçîøëà àâàðèÿ, ïðîñìîòðåòü çíà÷åíèÿïåðåìåííûõ íà ìîìåíò àâàðèè è ò.ä.5 Ñåàíñû è ãðóïïû ïðîöåññîâ áóäóò ðàññìîòðåíû â íàøåì êóðñå ïîçæå.
Ïîêà ìîæíî ñ÷èòàòü, ÷òî ñèãíàëû SIGINT è SIGQUIT ïðè íàæàòèè ñîîòâåòñòâóþùèõ êëàâèø ïîëó÷àåò òîò ïðîöåññ, êîòîðûé âû ñàìèçàïóñòèëè, íàáðàâ êîìàíäó, à òàêæå åãî ïîòîìêè (åñëè îíè íå ïðåäïðèíÿëè ñïåöèàëüíûõ ìåð).104Ïàðàìåòð sig_no çàäàåò íîìåð ïîäëåæàùåãî îòïðàâêå ñèãíàëà. Äëÿ ëó÷øåéÿñíîñòè ïðîãðàììû ðåêîìåíäóåòñÿ èñïîëüçîâàòü âìåñòî ÷èñåë ìàêðîêîíñòàíòû ñ ïðåôèêñîì SIG, òàêèå êàê SIGINT, SIGUSR1 è ò.ï.Ïàðàìåòð target_pid çàäàåò ïðîöåññ(û) êîòîðîìó (êîòîðûì) ñëåäóåò îòïðàâèòü ñèãíàë.