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

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

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

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

Îáû÷íîïîëüçîâàòåëüñêèå ïðîãðàììû íå èñïîëüçóþò ýòó âîçìîæíîñòü; â êà÷åñòâå ïàðàìåòðà start ìîæíî ïåðåäàòü NULL, òîãäà ñèñòåìà ñàìà âûáåðåò ñâîáîäíóþîáëàñòü âèðíóàëüíîãî àäðåñíîãî ïðîñòðàíñòâà.Âûçîâ mmap() âîçâðàùàåò óêàçàòåëü íà ñîçäàííóþ îáëàñòü âèðòóàëüíîéïàìÿòè. Îáû÷íî ýòîò óêàçàòåëü ïðåîáðàçóþò ê äðóãîìó òèïó, íàïðèìåð êchar*. ñëó÷àå îøèáêè mmap() âîçâðàùàåò çíà÷åíèå MAP_FAILED, ðàâíîå -1, ïðåîáðàçîâàííîé ê òèïó void*.Ïðèâåäåì ïðèìåð:int fd;char *ptr;fd = open("file.dat", O_RDWR);if(fd == -1) { /* ...

îáðàáîòêà îøèáêè ... */ }ptr = (char*) mmap(NULL, 4096, PROT_READ|PROT_WRITE,MAP_SHARED, fd, 0);if(ptr == MAP_FAILED) { /* ... îáðàáîòêà îøèáêè ... */ }Ïîñëå âûïîëíåíèÿ ýòèõ äåéñòâèé âûðàæåíèå ptr[25] áóäåò ðàâíî çíà÷åíèþ 26ãî áàéòà â ôàéëå "file.dat", ïðè÷åì îïåðàöèÿ ïðèñâàèâàíèÿptr[25] = 'a' çàíåñåò â ýòîò áàéò ñèìâîë 'a'.Ðàññìîòðèì äðóãîé ïðèìåð:int *ptr;ptr = (char*) mmap(NULL, 4096, PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS, 0, 0);if(ptr == MAP_FAILED) { /* ... îáðàáîòêà îøèáêè ... */ }115if(fork() == 0) {/* ... äî÷åðíèé ïðîöåññ ... */} else {/* ... ðîäèòåëüñêèé ïðîöåññ ... */} ýòîì ïðèìåðå ðîäèòåëüñêèé è äî÷åðíèé ïðîöåññû èìåþò äîñòóï ê îäíîìóè òîìó æå ìàññèâó öåëûõ ÷èñåë (äëèíîé 1024 ýëåìåíòà, åñëè ñ÷èòàòü, ÷òî intçàíèìàåò 4 áàéòà).

Ìàññèâ äîñòóïåí ÷åðåç óêàçàòåëü ptr, òàê ÷òî åñëè îäèíèç ïðîöåññîâ ñäåëàåò ïðèñâàèâàíèå ptr[77] = 120, òî â îáîèõ ïðîöåññàõâûðàæåíèå ptr[77] áóäåò èìåòü çíà÷åíèå 120.Îòìåíèòü îòîáðàæåíèå, ñîçäàííîå âûçîâîì mmap(), ìîæíî ñ ïîìîùüþ âûçîâàint munmap(void *start, int lenght);Ôèçè÷åñêóþ çàïèñü â ôàéë èçìåíåíèé, ñäåëàííûõ â îáëàñòè îòîáðàæåíèÿ, ñèñòåìà ìîæåòïðîèçâåñòè íå ñðàçó.

Åñëè íåîáõîäèìî ãàðàíòèðîâàòü, ÷òî èçìåíåíèÿ ôèçè÷åñêè çàïèñàíû íàäèñê, ìîæíî âîñïîëüçîâàòüñÿ âûçîâîìmsync().Èçó÷åíèå ýòîãî âûçîâà îñòàâëÿåì ÷èòàòåëþäëÿ ñàìîñòîÿòåëüíîé ðàáîòû.21Âçàèìîäåéñòâèå ïðîöåññîâ ÷åðåç ïñåâäîòåðìèíàëÊàê óæå ãîâîðèëîñü, â ÎÑ Unix âàæíîå çíà÷åíèå èìååò ïîíÿòèå òåðìèíàëà.  íåêîòîðûõ ñëó÷àÿõ òåðìèíàë ïðèõîäèòñÿ ýìóëèðîâàòü ïðîãðàììíî −íàïðèìåð, â ñëó÷àå, åñëè ìû ïîëó÷àåì äîñòóï ê ìàøèíå óäàëåííî (ïî êîìïüþòåðíîé ñåòè), ëèáî ïðè çàïóñêå ïðîãðàììû xterm.  îáîèõ ñëó÷àÿõ ïðîöåññû,çàïóñêàåìûå íàìè (íà óäàëåííîé ìàøèíå ëèáî â îêîøêå xterm), ðàáîòàþòïîä óïðàâëåíèåì âèðòóàëüíîãî òåðìèíàëà (ïñåâäîòåðìèíàëà ).

ßäðî îáñëóæèâàåò ýòè ïðîöåññû òî÷íî òàêèì æå îáðàçîì, êàê è çàïóùåííûå íà êîíñîëè,ñ òîé òîëüêî ðàçíèöåé, ÷òî ôóíêöèîíèðîâàíèå ôèçè÷åñêîãî òåðìèíàëà ýìóëèðóåòñÿ íåêèì ïðîöåññîì.  ñëó÷àå óäàëåííîãî äîñòóïà òàêèì ýìóëÿòîðîìÿâëÿåòñÿ ñåðâåð óäàëåííîãî äîñòóïà (ïðîãðàììà, ïðèíèìàþùàÿ ñîåäèíåíèÿíà óäàëåííîé ìàøèíå). Ïðîãðàììà xterm ýìóëèðóåò òåðìèíàë ñàìà.×òîáû ïîíÿòü, â ÷åì çàêëþ÷àåòñÿ ôóíêöèîíèðîâàíèå òåðìèíàëà, ðàññìîòðèì ïðîñòåéøèé ïðèìåð − íàæàòèå êîìáèíàöèè êëàâèø Ctrl-C.

Èçâåñòíî,÷òî ïðè ýòîì àêòèâíàÿ ïðîãðàììà ïîëó÷àåò ñèãíàë SIGINT; âîïðîñ òîëüêî âòîì, îòêóäà ýòîò ñèãíàë áåðåòñÿ. ßñíî, ÷òî îáû÷íûé òåðìèíàë − óñòðîéñòâî,ïåðåäàþùåå è ïðèíèìàþùåå äàííûå, − íè÷åãî íå çíàåò î ñèãíàëàõ ÎÑ Unix (è116âîîáùå ìîæåò ðàáîòàòü ñ ðàçíûìè îïåðàöèîííûìè ñèñòåìàìè). Ïîýòîìó ëîãè÷íî ïðåäïîëîæèòü, ÷òî ñèãíàë ãåíåðèðóåò ñàìà ñèñòåìà, ïîëó÷èâ îò òåðìèíàëà íåêèé ñïåöèàëüíûé ñèìâîë. Ýòî äåéñòâèòåëüíî òàê: ïî íàæàòèþ Ctrl-Câ äåéñòâèòåëüíîñòè ãåíåðèðóåòñÿ ñèìâîë ñ êîäîì 3 (âîîáùå, Ctrl-A ãåíåðèðóåò 1, Ctrl-B − 2, è ò.ä.).

Ïîëó÷èâ ýòîò ñèìâîë, äðàéâåð òåðìèíàëà ðàññûëàåòâñåì ïðîöåññàì îñíîâíîé ãðóïïû â òåêóùåì ñåàíñå ïîä óïðàâëåíèåì äàííîãîòåðìèíàëà ñèãíàë SIGINT. Êñòàòè, ñ ïîìîùüþ ôóíêöèè tcsetattr() äðàéâåð òåðìèíàëà ìîæíî ïåðåïðîãðàììèðîâàòü, ÷òîáû îí îòïðàâëÿë SIGINT ïîêàêîé-ëèáî äðóãîé êîìáèíàöèè êëàâèø, òîãäà ñèìâîë ñ êîäîì 3 áóäåò ïðîñòîîòïðàâëåí ðàáîòàþùåé ïðîãðàììå íà ñòàíäàðòíûé ââîä.Ðàññìîòðèì ñèòóàöèþ ñ ïðîãðàììîé xterm. ßñíî, ÷òî ïðè íàæàòèè Ctrl-Cïîëó÷èòü SIGINT äîëæíà íå ñàìà ïðîãðàììà xterm, à òå ïðîöåññû, êîòîðûåçàïóùåíû â åå îêîøêå. Ñîáñòâåííî ãîâîðÿ, ñàìà ïî ñåáå ïðîãðàììà xterm,áóäó÷è îêîííûì ïðèëîæåíèåì, è íå ïîëó÷àåò íèêàêîãî SIGINT, ïî êðàéíåéìåðå, êîãäà àêòèâíî èìåííî åå îêíî è ìû íàæàëè Ctrl-C.

Âìåñòî ýòîãî îíàïîëó÷àåò êëàâèàòóðíîå ñîáûòèå îò ñèñòåìû XWindow, ñâèäåòåëüñòâóþùåå îíàæàòèè êîìáèíàöèè êëàâèø. Íî ãåíåðèðîâàòü ñèãíàë äëÿ çàïóùåííûõ ïîäåå óïðàâëåíèåì ïðîöåññîâ åé íå íóæíî, äîñòàòî÷íî ïåðåäàòü ñèìâîë ñ êîäîì3 äðàéâåðó ïñåâäîòåðìèíàëà, è äðàéâåð ïîñòóïèò òî÷íî òàê æå, êàê åñëè áûíà ìåñòå ïðîãðàììû áûë íàñòîÿùèé òåðìèíàë − òî åñòü ïåðåõâàòèò ñèìâîëè âìåñòî íåãî âûäàñò ñèãíàë SIGINT.Ïðèìåðíî òàê æå îáñòîÿò äåëà è ïðè íàæàòèè Ctrl-D. Ïðîãðàììå xtermíåò íåîáõîäèìîñòè çàêðûâàòü êàíàë ñâÿçè ñ àêòèâíîé ïðîãðàììîé, âïîëíÿþùåéñÿ â åå îêîøêå, òåì áîëåå ÷òî ýòî è íåëüçÿ äåëàòü, âåäü ñåàíñ îäíèì EOF'îìíå çàêàí÷èâàåòñÿ, â íåì ìîãóò áûòü è äðóãèå çàïóùåííûå ïðîãðàììû2 .

Âìåñòî ýòîãî ïðîãðàììà xterm ïðîñòî ïåðåäàåò äðàéâåðó òåðìèíàëà ñèìâîë, ñîîòâåòñòâóþùèé êîìáèíàöèè Ctrl-D (òî åñòü ñèìâîë ñ êîäîì 4). Ïîëó÷èâ åãî,äðàéâåð òåðìèíàëà îáåñïå÷èò, ÷òîáû áëèæàéøèé âûçîâ read(), âûïîëíåííûéíà ïîääåðæèâàåìîì èì ëîãè÷åñêîì òåðìèíàëå, âåðíóë 0 (òî åñòü ñèãíàëèçèðîâàë î ñèòóàöèè êîíåö ôàéëà).Òàêèì îáðàçîì, ïñåâäîòåðìèíàë êàê îáúåêò ÿäðà èìååò äâà äâóñòîðîííèõêàíàëà ñâÿçè, îäèí äëÿ ïðîãðàììû, ýìóëèðóþùåé ôóíêöèîíèðîâàíèå òåðìèíàëà (â íàøåì ïðèìåðå ýòî xterm), âòîðîé äëÿ ïðîãðàìì, âûïîëíÿþùèõñÿïîä óïðàâëåíèåì íàøåãî òåðìèíàëà.

Ïðîãðàììà, ýìóëèðóþùàÿ òåðìèíàë, âäàííîì âèäå âçàèìîäåéñòâèÿ íàçûâàåòñÿ ãëàâíîé (master), à ðàáîòàþùèå ïîäóïðàâëåíèåì òåðìèíàëà − ïîä÷èíåííûìè (slaves).×òîáû ñîçäàòü ïñåâäîòåðìèíàë, ãëàâíàÿ ïðîãðàììà âûçûâàåò ôóíêöèþint getpt();2 Ïðåäñòàâüòå,÷òî âû â îêîøêå xterm'à çàïóñòèëè êîìàíäó cat, ïîòîì íàæàëè Ctrl-D, à âìåñòî òîãî,÷òîáû âåðíóòüñÿ â êîìàíäíûé èíòåðïðåòàòîð, xterm çàêðûëñÿ117âîçâðàùàþùóþ äåñêðèïòîð êàíàëà ñâÿçè ñ ïñåâäîòåðìèíàëîì (äëÿ ãëàâíîéïðîãðàììû). Ïðè ýòîì â ôàéëîâîé ñèñòåìå ïîÿâëÿåòñÿ ôàéë óñòðîéñòâà, îòêðûòèå êîòîðîãî ïîçâîëèò ïðèñîåäèíèòüñÿ ê òîìó æå ïñåâäîòåðìèíàëó óæåñî ñòîðîíû ïîä÷èíåííûõ ïðîãðàìì. Ýòî ëîãè÷åñêîå óñòðîéñòâî íàçûâàåòñÿïîä÷èíåííûé ïñåâäîòåðìèíàë (àíãë.

pseudoterminal slave, ñîêðàùåííî pts ).Çàòåì íåîáõîäèìî ïðèìåíèòü ê ïîëó÷åííîìó äåñêðèïòîðó ïîñëåäîâàòåëüíî ôóíêöèèint grantpt(int fd);int unlockpt(int fd);Ïåðâàÿ èç íèõ èçìåíÿåò ïðèíàäëåæíîñòü ôàéëà óñòðîéñòâà ïîä÷èíåííîãîïñåâäîòåðìèíàëà òàê, ÷òî îí ñòàíîâèòñÿ äîñòóïåí âëàäåëüöó òåêóùåãî ïðîöåññà. Ïåðåä âûçîâîì grantpt() ïðîãðàììà, ýìóëèðóþùàÿ òåðìèíàë, ìîæåò, íàïðèìåð,ñìåíèòü ñâîéuidñ ñóïåðïîëüçîâàòåëüñêîãî íàuidêîíêðåòíîãî ïîëüçîâàòåëÿ.Âòîðàÿ ôóíêöèÿ ðàçðåøàåò îòêðûòèå ôàéëà ïñåâäîòåðìèíàëà ñ ïîìîùüþâûçîâà open() (äî ýòîãî îí íåäîñòóïåí ê îòêðûòèþ, ñ òåì ÷òîáû ãëàâíàÿïðîãðàììà èìåëà âîçìîæíîñòü óñòàíîâèòü ïðàâà äîñòóïà ê íåìó äî òîãî, êàêêòî-ëèáî åãî îòêðîåò).Ïîñëå ýòîãî ïñåâäîòåðìèíàë ãîòîâ ê ðàáîòå, è åãî ìîæíî îòêðûòü ñ ïîìîùüþ open().

Íàïðèìåð, ìîæíî ñîçäàòü äî÷åðíèé ïðîöåññ, òàì çàêðûòüïîòîêè ñòàíäàðòíîãî ââîäà, âûâîäà è îøèáîê, ïîñëå ÷åãî îòêðûòü ïñåâäîòåðìèíàë è ñâÿçàòü åãî äåñêðèïòîð ñî âñåìè òðåìÿ ïîòîêàìè, à ïîòîì âûïîëíèòüexec äëÿ âûçîâà ïîä÷èíåííîé ïðîãðàììû. Óçíàòü èìÿ ôàéëà óñòðîéñòâà ïîä÷èíåííîãî ïñåâäîòåðìèíàëà ìîæíî ñ ïîìîùüþ ôóíêöèèchar *ptsname(int master_fd);ãäå master_fd − äåñêðèïòîð, ïîëó÷åííûé îò getpt().Âñþ ðàáîòó, ñâÿçàííóþ ñ ñîçäàíèåì îïèñàííîé ñâÿçêè ãëàâíûé-ïîä÷èíåííûé, ìîæíî âûïîëíèòü è ïðîùå, ñ ïîìîùüþ îäíîé ôóíêöèè:int openpty(int *master, int *slave, char *name,struct termios *termp, struct winsize *winp);Ïàðàìåòðûmasterèslaveçàäàþò àäðåñà ïåðåìåííûõ, â êîòîðûå ñëåäóåò çàïèñàòü äåñêðèï-òîðû, ñâÿçàííûå, ñîîòâåòñòâåííî, ñ ãëàâíûì è ïîä÷èíåííûì êàíàëàìè ñâÿçè ñ ïñåâäîòåðìèíàëîì.

Ïàðàìåòðnameïñåâäîòåðìèíàëà, ïàðàìåòðûóêàçûâàåò íà áóôåð, êóäà ñëåäóåò çàïèñàòü èìÿ ïîä÷èíåííîãîtermpèwinpçàäàþò ðåæèì ðàáîòû ïñåâäîòåðìèíàëà.  êà÷å-ñòâå ëþáîãî èç ïîñëåäíèõ òðåõ ïàðàìåòðîâ ìîæíî ïåðåäàòü íóëåâîé óêàçàòåëü.22Êðàòêèå ñâåäåíèÿ î òðàññèðîâêåÒðàññèðîâêà ïðèìåíÿåòñÿ â îñíîâíîì ïðè îòëàäêå ïðîãðàìì.  ðåæèìåòðàññèðîâêè îäèí ïðîöåññ (îòëàä÷èê) êîíòðîëèðóåò âûïîëíåíèå äðóãîãî ïðî118öåññà (îòëàæèâàåìîé ïðîãðàììû), ìîæåò îñòàíîâèòü åãî, ïðîñìîòðåòü è èçìåíèòü ñîäåðæèìîå åãî ïàìÿòè, âûïîëíèòü â ïîøàãîâîì ðåæèìå, óñòàíîâèòüòî÷êè îñòàíîâà, ïðîäîëæèòü âûïîëíåíèå äî òî÷êè îñòàíîâà èëè äî ñèñòåìíîãî âûçîâà, è ò.ï. ÎÑ Unix äëÿ ïîääåðæêè òðàññèðîâêè ââåäåí ñèñòåìíûé âûçîâint ptrace(int request, int pid, void *addr, void *data); êà÷åñòâå ïàðàìåòðà request âûçîâ ïîëó÷àåò îäíó èç âîçìîæíûõ êîìàíä(êàêèå êîíêðåòíî äåéñòâèÿ, ñâÿçàííûå ñ òðàññèðîâêîé, òðåáóþòñÿ). Èíòåðïðåòàöèÿ îñòàëüíûõ ïàðàìåòðîâ çàâèñèò îò êîìàíäû.Íà÷àòü òðàññèðîâêó ìîæíî äâóìÿ ñïîñîáàìè: çàïóñòèòü òðàññèðóåìóþïðîãðàììó ñ íà÷àëà èëè ïðèñîåäèíèòüñÿ ê ñóùåñòâóþùåìó (ðàáîòàþùåìó) ïðîöåññó.

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

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

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

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