А.В. Столяров - Введение в операционные системы (1152218), страница 20
Текст из файла (страница 20)
ðèñ. 18). Ìåæäó ñîñòîÿíèÿìè âûïîëíåíèÿè ãîòîâíîñòè ïðîöåññ ïåðåõîäèò ïðè âìåøàòåëüñòâå ïëàíèðîâùèêà ñèñòåìíîãî âðåìåíè (íàïðèìåð, îäèí ïðîöåññ ìîæåò áûòü ñíÿò ñ âûïîëíåíèÿ, òî åñòüïåðåâåäåí èç ñîñòîÿíèÿ âûïîëíåíèÿ â ñîñòîÿíèå ãîòîâíîñòè, à äðóãîé ïðèýòîì, íàîáîðîò, ïîñòàâëåí íà âûïîëíåíèå). ñîñòîÿíèå áëîêèðîâêè ïðîöåññ ìîæåò ïîïàñòü òîëüêî â ñëó÷àå, åñëèýòîò ïðîöåññ ïðîèçâåë òàêîé ñèñòåìíûé âûçîâ, ïîñëå êîòîðîãî íåìåäëåííîåïðîäîëæåíèå âûïîëíåíèÿ íåâîçìîæíî. Íàïðèìåð, ïðîöåññ ìîã çàòðåáîâàòü÷òåíèå äàííûõ ñ äèñêà; â ýòîì ñëó÷àå ïðîäîëæàòü âûïîëíåíèå èìååò ñìûñëíå ðàíüøå, ÷åì äàííûå áóäóò ïðî÷èòàíû, ÷òî òðåáóåò âðåìåíè. Òàêæå ïðîöåññìîã â ÿâíîì âèäå ïîòðåáîâàòü ïðèîñòàíîâèòü åãî âûïîëíåíèå íà íåñêîëüêî ñåêóíä (âûçîâ sleep()) èëè äî ïîñòóïëåíèÿ âíåøíåãî ñèãíàëà (âûçîâ pause()).13.2Ëåãêîâåñíûå ïðîöåññû íåêîòîðûõ ñèñòåìàõ ïîääåðæèâàåòñÿ ïîíÿòèå ëåãêîâåñíîãî ïðîöåññà 2 .Ëåãêîâåñíûé ïðîöåññ ïðåäñòàâëÿåò ñîáîé äîïîëíèòåëüíóþ åäèíèöó ïëàíèðîâêè â ðàìêàõ îäíîãî îáû÷íîãî ïðîöåññà; èíà÷å ãîâîðÿ, îáû÷íûé ïðîöåññ âòàêèõ ñèñòåìàõ ìîæíî ïðåäñòàâèòü êàê ãðóïïó ëåãêîâåñíûõ ïðîöåññîâ, ðàáîòàþùèõ îäíîâðåìåííî íàä îäíèìè è òåìè æå êîäîì, äàííûìè è ðåñóðñàìè.Óäà÷íûì ïðèìåðîì èñïîëüçîâàíèÿ ëåãêîâåñíûõ ïðîöåññîâ ìîæåò ñëóæèòüèíòåðàêòèâíàÿ ïðîãðàììà, ðàáîòàþùàÿ ñî ñæàòûìè äàííûìè (íàïðèìåð, ìóçûêàëüíûé ðåäàêòîð, ñïîñîáíûé ðàáîòàòü ñ mp3-ôàéëàìè).
Ñ îäíîé ñòîðîíû,îïåðàöèè óïàêîâêè/ðàñïàêîâêè äàííûõ òðåáóþò áîëüøèõ îáúåìîâ âû÷èñëåíèé è ìîãóò äëèòüñÿ ïî íåñêîëüêî ìèíóò è äàæå äåñÿòêîâ ìèíóò. Ñ äðóãîé ñòîðîíû, èíòåðàêòèâíàÿ ïðîãðàììà íå ìîæåò ñåáå ïîçâîëèòü â òå÷åíèåíåñêîëüêèõ ìèíóò íå ðåàãèðîâàòü íà äåéñòâèÿ ïîëüçîâàòåëÿ: íàïðèìåð, ïîëüçîâàòåëü ìîæåò ïåðåìåñòèòü îêíî ïðîãðàììû íà ýêðàíå (÷òî ïîòðåáóåò åãîîòðèñîâêè) èëè äàæå ïðèíÿòü ðåøåíèå îá îòìåíå òåêóùåé îïåðàöèè.  òàêîéñèòóàöèè ëîãè÷íî èñïîëüçîâàòü îäèí ëåãêîâåñíûé ïðîöåññ äëÿ âûïîëíåíèÿâû÷èñëåíèé (óïàêîâêè/ðàñïàêîâêè) è äðóãîé − äëÿ îáðàáîòêè èíòåðôåéñíûõ ñîáûòèé, òî åñòü äëÿ ðåàêöèè íà äåéñòâèÿ ïîëüçîâàòåëÿ.2Âàíãëîÿçû÷íûõ èñòî÷íèêàõ îáû÷íî èñïîëüçóåòñÿ òåðìèí thread, ðåæå − lightweight process.
Íà ðóññêèé ÿçûê òåðìèí òàêæå ìîæåò áûòü ïåðåâåäåí êàê óïðîùåííûé ïðîöåññ, ïîòîê, íèòü èëè äàæå òðåä ;ïîñëåäíèé âàðèàíò ÷àñòî èñïîëüçóåòñÿ â ïðîãðàììèñòñêîì æàðãîíå.87Ëåãêîâåñíûå ïðîöåññû, ðàáîòàþùèå â ðàìêàõ îäíîãî îáû÷íîãî ïðîöåññà,èñïîëüçóþò åãî ñåãìåíòû êîäà è äàííûõ, íî ïðè ýòîì ó êàæäîãî ëåãêîâåñíîãî ïðîöåññà èìååòñÿ ñâîé ñîáñòâåííûé ñòåê (äëÿ õðàíåíèÿ ëîêàëüíûõ ïåðåìåííûõ è àäðåñîâ âîçâðàòà èç ïîäïðîãðàìì) è ñ÷åò÷èê êîìàíä. Êîãäà âðàìêàõ ïðîöåññà âûïîëíÿþòñÿ ëåãêîâåñíûå ïðîöåññû, î ñîñòîÿíèè (âûïîëíåíèå, ãîòîâíîñòü, áëîêèðîâêà) èìååò ñìûñë ãîâîðèòü â îòíîøåíèè êàæäîãî èçëåãêîâåñíûõ ïðîöåññîâ.Ñëåäóåò ó÷èòûâàòü, ÷òî ïðîãðàììèðîâàíèå ñ èñïîëüçîâàíèåì ëåãêîâåñíûõïðîöåññîâ òðåáóåò îïðåäåëåííîãî ìàñòåðñòâà è êðàéíå âûñîêîé àêêóðàòíîñòè,êàê è ëþáîå ïàðàëëåëüíîå ïðîãðàììèðîâàíèå ñ èñïîëüçîâàíèåì ðàçäåëÿåìûõäàííûõ.Ê ðàññìîòðåíèþ ëåãêîâåñíûõ ïðîöåññîâ ìû âåðíåìñÿ íà îäíîé èç ïîñëåäíèõ ëåêöèé.1414.1Ïðîöåññû â ÎÑ UnixÑâîéñòâà ïðîöåññà îïåðàöèîííûõ ñèñòåìàõ ñåìåéñòâà Unix ïðîöåññû èìåþò, ïî ìåíüøåéìåðå, ñëåäóþùèå ñâîéñòâà:1.
Ñåãìåíò êîäà (âîçìîæíî, ðàçäåëÿåìûé). Ñîáñòâåííî ïðîãðàììà, âûïîëíÿþùàÿñÿ â äàííîì ïðîöåññå. Èçìåíÿòü äàííûå â ýòîé îáëàñòè ïàìÿòè ïðîöåññ íå ìîæåò, ÷òî ïîçâîëÿåò ïðè çàïóñêå íåñêîëüêèõ êîïèéîäíîé è òîé æå ïðîãðàììû äåðæàòü â ïàìÿòè îäèí ýêçåìïëÿð êîäà.2. Ñåãìåíò äàííûõ, âêëþ÷àÿ ñòåê.3. Ñîñòîÿíèå ðåãèñòðîâ, âêëþ÷àÿ ñ÷åò÷èê êîìàíä, ñëîâî ñîñòîÿíèÿ(PSW), óêàçàòåëü ñòåêà è âñå ðåãèñòðû îáùåãî íàçíà÷åíèÿ. Êîãäà ïðîöåññ ïî òåì èëè èíûì ïðè÷èíàì íàõîäèòñÿ âíå ñîñòîÿíèÿ âûïîëíåíèÿ(òî åñòü îí ëèáî çàáëîêèðîâàí, ëèáî ãîòîâ ê âûïîëíåíèþ, íî íå âûïîëíÿåòñÿ èç-çà çàíÿòîñòè ïðîöåññîðà), ñîäåðæèìîå åãî ðåãèñòðîâ õðàíèòñÿâ ñïåöèàëüíîé ñòðóêòóðå äàííûõ â ÿäðå.4. Òàáëèöà äåñêðèïòîðîâ ôàéëîâîãî ââîäà-âûâîäà, ñîäåðæàùàÿ ñâåäåíèÿ îá îòêðûòûõ ôàéëàõ è äðóãèõ ïîòîêàõ ââîäà-âûâîäà, äîñòóïíûõäàííîìó ïðîöåññó.5. Êîìàíäíàÿ ñòðîêà. Ñòðóêòóðà äàííûõ, ñîäåðæàùàÿ àðãóìåíòû êîìàíäíîé ñòðîêè, âêëþ÷àÿ èìÿ, ïî êîòîðîìó ïðîãðàììà áûëà âûçâàíà(ðèñ.
19, ñëåâà).88l s \0argvPATH=/bin:/usr/bin\0envirHOME=/home/john\0- l \0- a \0NULL/ u s r / l o c a l \0NULLTERM=xterm\0ls -l -a /usr/localÐèñ. 19: Ñòðóêòóðû äàííûõ êîìàíäíîé ñòðîêè è îêðóæåíèÿ6. Îêðóæåíèå. Ñòðóêòóðà äàííûõ, ñîäåðæàùàÿ èìåíà è çíà÷åíèÿ ïåðåìåííûõ îêðóæåíèÿ â âèäå òåêñòîâûõ ñòðîê (ðèñ. 19, ñïðàâà).7. Òåêóùèé êàòàëîã. Êàæäûé ïðîöåññ íàõîäèòñÿ â îäíîì èç êàòàëîãîâôàéëîâîé ñèñòåìû; ýòîò ïàðàìåòð îïðåäåëÿåò, â êàêîì êàòàëîãå èñêàòüôàéëû, åñëè íå çàäàí ïîëíûé ïóòü.8.
Êîðíåâîé êàòàëîã.  ÎÑ Unix ìîæíî îãðàíè÷èòü ôàéëîâóþ ñèñòåìó, âèäèìóþ ïðîöåññó è âñåì åãî ïîòîìêàì, ÷àñòüþ äåðåâà êàòàëîãîâ,èìåþùåé îáùèé êîðåíü. Íàïðèìåð, åñëè óñòàíîâèòü ïðîöåññó êîðíåâîéêàòàëîã /foo, òî ïîä èìåíåì / ïðîöåññ áóäåò âèäåòü êàòàëîã /foo, à ïîäèìåíåì /bar − êàòàëîã /foo/bar. Êàòàëîãè çà ïðåäåëàìè /foo ïðîöåññó è âñåì åãî ïîòîìêàì âîîáùå íå áóäóò âèäíû íè ïîä êàêèìè èìåíàìè.Ýòî èñïîëüçóåòñÿ äëÿ çàïóñêà îòäåëüíûõ ïðîãðàìì â áåçîïàñíîì âàðèàíòå − òàê, ÷òîá îíè íå ìîãëè ïîëó÷èòü äîñòóï íè ê êàêèì ôàéëàìêðîìå òåõ, êîòîðûå ïðåäíàçíà÷åíû ñïåöèàëüíî äëÿ íèõ.9. Äèñïîçèöèÿ îáðàáîòêè ñèãíàëîâ. Ñèãíàëû áóäóò ïîäðîáíî ðàññìîòðåíû íà ñëåäóþùåé ëåêöèè.10. Ïàðàìåòð umask. Ïðè ñîçäàíèè íîâûõ ôàéëîâ, êàòàëîãîâ è ò.ï.
çíà÷åíèå ýòîãî ïàðàìåòðà ïîáèòîâî âû÷èòàåòñÿ èç çíà÷åíèÿ ïðàâà äîñòóïà,çàäàííîãî â ñèñòåìíîì âûçîâå. Íàïðèìåð, åñëè ïàðàìåòð umask ðàâåí0077, âñå ñîçäàâàåìûå ôàéëû áóäóò ïîëíîñòüþ íåäîñòóïíû äëÿ âñåõïîëüçîâàòåëåé, êðîìå âëàäåëüöà ôàéëà.11. Ñ÷åò÷èêè ïîòðåáëåííûõ ðåñóðñîâ (ïðîöåññîðíîãî âðåìåíè, ïàìÿòèè ò.ï.).12. Èíôîðìàöèÿ î âëàäåëüöå ïðîöåññà. Ýòà èíôîðìàöèÿ âêëþ÷àåòuid (èäåíòèôèêàòîð ïîëüçîâàòåëÿ), gid (èäåíòèôèêàòîð ãðóïïû ïîëüçîâàòåëåé), euid è egid (ýôôåêòèâíûå èäåíòèôèêàòîðû ïîëüçîâàòåëÿ èãðóïïû).  áîëüøèíñòâå ñëó÷àåâ ýôôåêòèâíûå èäåíòèôèêàòîðû ñîâïàäàþò ñ îáû÷íûìè; ïðèìåðîì ñëó÷àÿ, êîãäà ýòî íå òàê, ÿâëÿþòñÿ òàê íàçûâàåìûå suid-ïðîãðàììû (òî åñòü ïðîãðàììû, âûïîëíÿåìûå ñ ïðàâàìè89ïîëüçîâàòåëÿ, âëàäåþùåãî èñïîëíÿåìûì ôàéëîì äàííîé ïðîãðàììû, àíå òîãî ïîëüçîâàòåëÿ, êîòîðûé ïðîãðàììó çàïóñòèë).
Ê ÷èñëó òàêèõïðîãðàìì îòíîñèòñÿ passwd (ïðîãðàììà ñìåíû ïàðîëÿ).13. Èäåíòèôèêàòîðû ïðîöåññà, ðîäèòåëüñêîãî ïðîöåññà, ñåàíñà èãðóïïû ïðîöåññîâ. Ïàðàìåòð pid ïðåäñòàâëÿåò ñîáîé ÷èñëî − óíèêàëüíûé èäåíòèôèêàòîð ïðîöåññà â ñèñòåìå. Ïàðàìåòð ppid ðàâåí èäåíòèôèêàòîðó ðîäèòåëüñêîãî ïðîöåññà (ïðîöåññà, ïîðîäèâøåãî äàííûé),åñëè ýòîò ïðîöåññ åùå ñóùåñòâóåò; åñëè ðîäèòåëüñêèé ïðîöåññ çàâåðøàåòñÿ ðàíüøå äî÷åðíåãî, ppid äî÷åðíåãî ñòàíîâèòñÿ ðàâåí 1.
Ïîíÿòèÿñåàíñà è ãðóïïû ïðîöåññîâ áóäóò ðàññìîòðåíû â íàøåì êóðñå ïîçæå.14.214.2.1Óïðàâëåíèå ïðîöåññàìèÏîðîæäåíèå ïðîöåññàÅäèíñòâåííûé ñïîñîá ïîðîæäåíèÿ ïðîöåññà â ÎÑ Unix − ýòî ñîçäàíèåêîïèè ñóùåñòâóþùåãî ïðîöåññà3 . Äëÿ ýòîãî èñïîëüçóåòñÿ ñèñòåìíûé âûçîâint fork(void); ðåçóëüòàòå âûçîâà ñîçäàåòñÿ äî÷åðíèé ïðîöåññ, ÿâëÿþùèéñÿ òî÷íîé êîïèåéðîäèòåëüñêîãî, çà èñêëþ÷åíèåì ñëåäóþùèõ ðàçëè÷èé:1.
Äî÷åðíèé ïðîöåññ èìååò ñâîé èäåíòèôèêàòîð (pid), åñòåñòâåííî, îòëè÷àþùèéñÿ îò èäåíòèôèêàòîðà ðîäèòåëÿ;2. Ïàðàìåòð ppid äî÷åðíåãî ïðîöåññà ðàâåí pid'ó ðîäèòåëüñêîãî ïðîöåññà;3. Ñ÷åò÷èêè ïîòðåáëåííûõ ðåñóðñîâ äî÷åðíåãî ïðîöåññà ñðàçó ïîñëåfork() ðàâíû íóëþ;4. Âûïîëíåíèå îáîèõ ïðîöåññîâ (ðîäèòåëüñêîãî è äî÷åðíåãî) ïðîäîëæàåòñÿ ñ ïåðâîé èíñòðóêöèè, ñëåäóþùåé ñðàçó çà ôóíêöèåé fork() (îáû÷íîýòî ïðèñâàèâàíèå âîçâðàùàåìîãî åþ çíà÷åíèÿ êàêîé-ëèáî ïåðåìåííîé),ïðè÷åì â ðîäèòåëüñêîì ïðîöåññå fork() âîçâðàùàåò pid äî÷åðíåãî ïðîöåññà, à â äî÷åðíåì − ÷èñëî 0.Îòìåòèì, ÷òî ïîñëå âûçîâà fork() îáà ïðîöåññà (ðîäèòåëüñêèé è äî÷åðíèé) èñïîëüçóþò îäèí è òîò æå ñåãìåíò êîäà (ýòî âîçìîæíî, ò.ê. ñåãìåíò3 Íåêîòîðûåñèñòåìû ñåìåéñòâà Unix èìåþò àëüòåðíàòèâíûå âîçìîæíîñòè, òàêèå êàê clone() â ÎÑLinux, íî ýòè âîçìîæíîñòè ñïåöèôè÷íû äëÿ êàæäîé ñèñòåìû è èõ èñïîëüçîâàíèå íå ðåêîìåíäóåòñÿ90êîäà íå ìîæåò áûòü ìîäèôèöèðîâàí). ×òî êàñàåòñÿ îñòàëüíîé ïàìÿòè ïðîöåññà, òî îíà, çà èñêëþ÷åíèåì íåñêîëüêèõ ñïåöèàëüíûõ ñëó÷àåâ, êîïèðóåòñÿ4 .Ýòî îçíà÷àåò, â ÷àñòíîñòè, ÷òî â äî÷åðíåì ïðîöåññå ïðèñóòñòâóþò âñå ïåðåìåííûå, ñóùåñòâîâàâøèå â ðîäèòåëüñêîì ïðîöåññå, ïðè÷åì èçíà÷àëüíî îíèèìåþò òå æå çíà÷åíèÿ, íî èçìåíåíèÿ ïåðåìåííûõ â ðîäèòåëüñêîì ïðîöåññåíèêàê íå îòðàæàþòñÿ íà äî÷åðíåì, è íàîáîðîò.Êîïèðîâàíèþ ïîäâåðãàþòñÿ îòêðûòûå äåñêðèïòîðû ôàéëîâ, óñòàíîâëåííûå îáðàáîò÷èêè ñèãíàëîâ è ò.ï.14.2.2Çàìåíà âûïîëíÿåìîé ïðîãðàììûÇàïóñòèòü íà âûïîëíåíèå äðóãóþ ïðîãðàììó â ÎÑ Unix ìîæíî ïóòåì çàìåíû âûïîëíÿåìîé ïðîãðàììû â ðàìêàõ îäíîãî ïðîöåññà.