Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Н.В. Вдовикина, И.В. Машечкин, А.Н. Терехин, А.Н. Томилин - Операционные системы - взаимодействие процессов (2008)

Н.В. Вдовикина, И.В. Машечкин, А.Н. Терехин, А.Н. Томилин - Операционные системы - взаимодействие процессов (2008), страница 9

PDF-файл Н.В. Вдовикина, И.В. Машечкин, А.Н. Терехин, А.Н. Томилин - Операционные системы - взаимодействие процессов (2008), страница 9 Операционные системы (38890): Книга - 3 семестрН.В. Вдовикина, И.В. Машечкин, А.Н. Терехин, А.Н. Томилин - Операционные системы - взаимодействие процессов (2008): Операционные системы - PDF, стран2019-05-08СтудИзба

Описание файла

PDF-файл из архива "Н.В. Вдовикина, И.В. Машечкин, А.Н. Терехин, А.Н. Томилин - Операционные системы - взаимодействие процессов (2008)", который расположен в категории "". Всё это находится в предмете "операционные системы" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 9 страницы из PDF

Во-первых, в какомпорядке будет происходить печать с момента появления двухпроцессов? Определенного ответа здесь дать нельзя, это будетопределяться конкретным планировщиком процессов. –Второйвопрос: какой идентификатор родительского процесса распечатаетвновь созданный процесс, если процесс-предок к этому моменту ужезавершит свою работу? Ответ на этот вопрос мы разберем немногопозже.Пример 2. Порождение сыновнего процесса.

Различениепредка и потомка.Программасоздаетдвапроцесса:процесс-предокраспечатывает заглавные буквы, а процесс-потомок строчные.#include <sys/types.h>#include <unistd.h>#include <stdio.h>int main(int argc, char **argv){char ch, first, last;int pid;if((pid=fork())>0){45/*процесс-предок*/first =’A’;last =’Z’;}else{/*процесс-потомок*/first =’a’;last =’z’;}for (ch = first; ch <= last; ch++){write(1,&ch,1);}return 0;}Оба процесса распечатывают буквы одним и тем жеоператором for.

Оба процесса имеют возможность получитьуправление, таким образом любой из них может начать исполнениепервым. Более того, символы, выводимые на печать обоимипроцессами, могут перемешиваться, т.к. тот из процессов, которыйполучит управление первым, затем может быть приостановлен, иуправление получит другой процесс (такое переключение можетпроисходить неоднократно).3.4 Механизм замены тела процессаСемейство системных вызовов exec()8 производит заменутела вызывающего процесса, после чего данный процесс начинаетвыполнять другую программу, начиная с ее точки входа. Возврата кпервоначальной программе затем не происходит. Таким образом,код, следующий в исходной программе после вызова exec(),проработает лишь в случае неудачного завершения этого системноговызова, т.е.

если фактической замены тела процесса не произошло.8Существует шесть различных системных вызовов exec(), отличающихся параметрами,которые будут описаны ниже.46Заметим, что выполнение «нового» тела происходит в рамкахуже существующего процесса, т.е. после вызова exec() сохраняетсяидентификатор процесса, а также идентификатор родительскогопроцесса, ранее открытые файлы, приоритет и большая часть другихатрибутов процесса. Фактически происходит замена сегмента кодаи сегмента данных. Изменяются следующие атрибуты процесса:- диспозициясигналов:длясигналов,которыеперехватывались, после замены тела процесса будетустановлена обработка по умолчанию, так как в новойпрограмме могут отсутствовать ранее установленныефункции-обработчики сигналов;- эффективные идентификаторы владельца и группы могутизмениться, если для новой выполняемой программыустановлен s-бит;- перед началом выполнения новой программы могут бытьзакрыты некоторые файлы, ранее открытые в процессе.

Этокасается тех файлов, для которых при помощи системноговызова fcntl() был установлен флаг close-on-exec.Соответствующие файловые дескрипторы будут помеченыкак свободные.PID = 2757PID = 2757main(){…execl(“/bin/ls”, ”ls”,”-l”, (char*)0);…}exec()main(){// реализация программыls}Рис. 10 Выполнение системного вызова exec()Ниже представлены прототипы функций семейства exec():#include <unistd.h>int execl(const char *path, char *arg0,…);int execlp(const char *file, char *arg0,…);int execle(constchar **env);char*path,char*arg0,…,constint execv(const char *path, const char **arg);int execvp(const char *file, const char **arg);int execve(const char *path, const char **arg, constchar **env);47Первый параметр во всех вызовах задает имя (краткое илиполное путевое) файла программы, подлежащей запуску иисполнению в качестве нового тела процесса. Этот файл долженбыть исполняемым файлом (в отдельных UNIX-системах это можетбыть также командный файл (сценарий) интерпретатора shell, ностандарт POSIX этого не допускает), и пользователь-владелецпроцесса должен иметь право на исполнение данного файла.

Дляфункций execlp, execvp имя файла может быть кратким, при этомпри поиске нужного файла будет использоваться переменнаяокружения PATH.Далее передаются аргументы командной строки для вновьзапускаемой программы, которые отобразятся в ее массив argv – ввиде списка аргументов переменной длины для функций ссуффиксом «l» либо в виде вектора строк для функций с суффиксом«v». В любом случае, в списке аргументов должно присутствоватькак минимум 2 аргумента: имя программы, которое отобразится вэлемент argv[0], и значение NULL, завершающее список.В функциях с суффиксом «e» имеется также дополнительныйаргумент, задающий значения переменных окружения для вновьзапускаемой программы – это массив строк вида name=value,завершенный значением NULL.Пример 3. Запуск на выполнение команды ls.#include <unistd.h>#include <stdio.h>int main(int argc, char **argv){…/*тело программы*/…execl(“/bin/ls”,”ls”,”-l”,(char*)0);/*или execlp(“ls”,”ls”, ”-l”,(char*)0);*/printf(“это напечатается в случае неудачногообращения к предыдущей функции, к примеру, если небыл найден файл ls \n”);…}Пример 4.

Вызов программы компиляции.#include <unistd.h>48int main(int argc, char **argv){char *pv[]={“cc”,“-o”,“ter”,“ter.c”,(char*)0};…/*тело программы*/…execv (“/bin/cc”,pv);…}В данном случае второй параметр – вектор из указателей напараметры строки, которые будут переданы в вызываемуюпрограмму. Как и ранее, первый указатель – имя программы,последний – нулевой указатель. Эти вызовы удобны, когда заранеенеизвестно число аргументов вызываемой программы.Наиболее интересным является использование fork()совместно с системным вызовом exec().

Как отмечалось выше,системный вызов fork() используется для порождения новогопроцесса с таким же телом, в то время как exec() позволяетзапустить новый исполняемый файл в рамках существующегопроцесса. Комбинируя эти возможности, программист получаетмощное и гибкое средство управления процессами. Ниже приведенаобщая схема использования связки fork() - exec().Пример 5. Применение связки fork-exec#include <sys/types.h>#include <unistd.h>int main(int argc, char **argv){int pid;if(pid=fork())==0)49{/* процесс-потомок */execl(“/bin/ls”, ”ls”, ”-l”,(char*)0);}else if (pid > 0){/* процесс-предок */...} else {/* ошибка при вызове exec() */...}}Схема работы данного примера проиллюстрирована на Рис.11.50PID = 2757main(){…if(pid=fork())==0){execl(“/bin/ls”, ”ls”, ”-l”,(char*)0);}else{…}}fork()PID = 2757PID = 2760main(){…if(pid=fork())==0)main(){…if(pid=fork())==0){execl(“/bin/ls”, ”ls”, ”-l”,(char*)0);}else{…}}{execl(“/bin/ls”, ”ls”, ”-l”,(char*)0);}else{…}}Потомок: выполняется exec()Предок: выполняютсяоператоры в else-секцииexec()PID = 2760main(){// реализация программы ls}Рис.

11 Использование схемы fork()-exec()Пример 6. Использование схемы fork-exec.Программа порождает три процесса, каждый из которыхзапускает программу echo посредством системного вызоваexec().Программа echo выводит на стандартный вывод всепереданные ей аргументы без изменения. Данный примердемонстрирует важностьпроверки успешного завершениясистемного вызова exec(), ибо в противном случае вместоожидаемого поведения возможно исполнение нескольких копийисходной программы. В нашем примере, если все вызовы exec()51проработают неуспешно, то копий программ будет восемь. Если всевызовы exec() будут успешными, то после последнего вызоваfork() будет существовать четыре копии процесса. В любом случае,порядок, в котором они будут выполняться, не определен.#include <sys/types.h>#include <unistd.h>#include <stdio.h>int main(int argc, char **argv){if(fork()==0){execl(“/bin/echo”,”echo”,”сообщение один”, NULL);”это”,printf(“ошибка\n”);}if(fork()==0){execl(“/bin/echo”,”echo”,”сообщение два”, NULL);”это”,printf(“ошибка\n”);}if(fork()==0){execl(“/bin/echo”,”echo”,”сообщение три”, NULL);”это”,printf(“ошибка\n ”);}printf(“процесс-предок закончился\n”);return 0;}В случае, если все вызовы exec() проработают корректно,результат работы программы может быть следующим:процесс-предок закончилсяэто сообщение триэто сообщение дваэто сообщение один523.5 Завершение процессаДля завершения выполнениясистемный вызов _exit()процессапредназначен#include <unistd.h>void _exit (int exitcode);Этот вызов никогда не завершается неудачно, поэтому длянего не предусмотрено возвращающего значения.

С помощьюпараметра exit_code процесс может передать породившему егопроцессу информацию о статусе своего завершения. Принято, хотя ине является обязательным правилом, чтобы процесс возвращалнулевое значение при нормальном завершении, и ненулевое – вслучае какой-либо ошибки или нештатной ситуации.В стандартной библиотеке Си имеется сервисная функцияexit(), описанная в заголовочном файле stdlib.h, которая,помимо обращения к системному вызову _exit(), осуществляет ряддополнительных действий, таких как, например, очисткастандартных буферов ввода-вывода.Кроме обращения к вызову _exit(), другими причинамизавершения процесса могут быть:- выполнение операторафункции main();return,входящеговсостав- получение некоторых сигналов (об этом речь пойдет чутьниже).В любом из этих случаев происходит следующее:- освобождаются сегмент кода и сегмент данных процесса;- закрываются все открытые дескрипторы файлов;- если у процесса имеются потомки, их предком назначаетсяпроцесс с идентификатором 1;- освобождается большая часть контекста процесса, однакосохраняется запись в таблице процессов и та частьконтекста, в которой хранится статус завершения процессаи статистика его выполнения;- процессу-предку завершаемого процесса посылается сигналSIGCHLD.Состояние, в которое при этом переходит завершаемыйпроцесс, в литературе часто называют состоянием “зомби”.53Процесс-предок имеет возможность получить информацию озавершении своего потомка.

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