Операции над процессами и связанные с ними понятия

Лекция №27

Управление процессами

План

1. Введение в процессы.

2. Состояния процесса.

3. Операции над процессами и связанные с ними понятия (набор операций, PCB и контекст процесса, одноразовые и многоразовые операции, переключение контекста).

Введение в процессы

Фундаментальным понятием для изучения работы операционных систем является понятие процессов, как основных динамических объектов, над которыми системы выполняют определенные действия. Данная тема посвящена описанию процессов, их состояний и свойств, их представлению в КС, а также операциям, которые могут проводиться над ними.

Вошедшее в ОС задание становится процессом или группой процессов. Последовательный процесс – это выполнение на последовательном процессоре программы с данными, требующей ресурсов и представленной в ОС блоком управления процессом (PCB).

Ресурсы– объекты, которые запрашиваются, используются и освобождаются процессами в период их активности. Ресурс может быть разделяемым, в этом случае несколько процессов могут его использовать одновременно (в один и тот же момент времени) или параллельно (в течение некоторого интервала времени процессы используют ресурс попеременно); ресурс может быть неделимым.

К наиболее распространенным типам ресурсов относятся:

а) аппаратные (например, процессорное время, память, устройства ввода-вывода);

б) программные (например, библиотеки функций);

в) информационные (например, содержимое файлов и баз данных);

г) операционной среды – структуры, используемые при выполнении системных вызовов (например, структура сообщения).

Не существует взаимно однозначного соответствия между процессами и программами, обрабатываемыми КС. В некоторых операционных системах для работы определенных программ может организовываться более одного процесса или один и тот же процесс может исполнять последовательно несколько различных программ. Более того, даже в случае обработки только одной программы в рамках одного процесса, нельзя считать, что процесс представляет собой просто динамическое описание кода исполняемого файла, данных и выделенных для них ресурсов. Процесс находится под управлением операционной системы и поэтому в нем может выполняться часть кода ее ядра (не находящегося в исполняемом файле!), как в случаях, специально запланированных авторами программы (например, при использовании системных вызовов), так и в непредусмотренных ими ситуациях (например, при обработке внешних прерываний).

В любой момент времени процесс полностью описывается своим контекстом (информацией о процессе), состоящим из регистровой, системной и пользовательской частей. В операционной системе процессы представляются определенной структурой данных – PCB, отражающей содержание регистрового и системного контекстов. Процессы могут находиться в пяти основных состояниях: рождение, готовность, исполнение, ожидание, закончил исполнение. Из состояния в состояние процесс переводится операционной системой в результате выполнения над ним операций. Операционная система может выполнять над процессами следующие операции: создание процесса, завершение процесса, приостановка процесса, запуск процесса, блокирование процесса, разблокирование процесса, изменение приоритета процесса. Между выполнением операций содержимое PCB не изменяется. Деятельность мультипрограммной операционной системы состоит из цепочек перечисленных операций, выполняемых над различными процессами, и сопровождается процедурами сохранения/восстановления работоспособности процессов, т. е. переключением контекста. Переключение контекста не имеет отношения к полезной работе, выполняемой процессами, и время, затраченное на него, уменьшает полезное время работы процессора.

Состояния процесса

При использовании такой абстракции как процесс все, что выполняется в КС (не только программы пользователей, но и, определенные части ОС), организовано как набор процессов. На однопроцессорной компьютерной системе в каждый момент времени может исполняться только один процесс. Для мультипрограммных КС псевдопараллельная обработка нескольких процессов достигается с помощью переключения процессора с одного процесса на другой. Пока один процесс выполняется, остальные ждут своей очереди на получение процессора. Каждый процесс находится как минимум в двух состояниях: процесс исполняется и процесс не исполняется. Диаграмма состояний процесса в такой модели изображена на рис.5.1.

Операции над процессами и связанные с ними понятия - student2.ru

Рисунок 5.1 - Диаграмма двух состояний процесса

Процесс, находящийся в состоянии «процесс исполняется», может через некоторое время завершиться или быть приостановлен операционной системой и снова переведен в состояние «процесс не исполняется». Приостановка процесса происходит по одной из двух причин: для его дальнейшей работы потребовалось возникновение какого-либо события (например, завершения операции ввода-вывода) или истек временной интервал, отведенный операционной системой для работы этого процесса. После этого операционная система по определенному алгоритму выбирает для исполнения один из процессов, находящихся в состоянии «процесс не исполняется», и переводит его в состояние «процесс исполняется». Новый процесс, появляющийся в системе, первоначально помещается в состояние «процесс не исполняется».

Такая модель является очень грубой. Она не учитывает, в частности то, что процесс, выбранный для исполнения, может все еще ждать события, из-за которого он был приостановлен, и реально к выполнению не готов. Для того чтобы избежать такой ситуации, разобьем состояние «процесс не исполняется» на два новых состояния: готовность и ожидание (см. рис. 5.2).

Операции над процессами и связанные с ними понятия - student2.ru

Рисунок 5.2 - Диаграмма трех состояний процесса

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

а) либо он заканчивает свою деятельность;

б) либо он не может продолжать свою работу, пока не произойдет некоторое событие, и операционная система переводит его в состояние «ожидание»;

в) либо в результате возникновения прерывания в КС (например, прерывания от таймера по истечении дозволенного времени выполнения) его возвращают в состояние «готовность».

Новая модель хорошо описывает поведение процессов во время их жизни, но она не акцентирует внимания на появлении процесса в системе и его исчезновении из системы. Для полноты картины необходимо ввести еще два дополнительных состояния процессов: рождение и закончил исполнение (рис.5.3).

Теперь для появления в КС процесс должен пройти через состояние «рождение». При рождении процесс получает в свое распоряжение адресное пространство, в которое загружается программный код процесса; ему выделяются стек и системные ресурсы; устанавливается начальное значение программного счетчика этого процесса и т.д. Родившийся процесс переводится в состояние «готовность». При завершении своей деятельности процесс из состояния «исполнение» попадает в состояние «закончил исполнение».

В конкретных операционных системах состояния процесса могут быть еще более детализированы, могут появиться некоторые новые варианты переходов из состояния в состояние. Так, например, модель состояний процессов для операционной системы Windows NT содержит 7 различных состояний, а для операционной системы UNIX – 9. Тем не менее, в принципе, все операционные системы подчиняются модели, изображенной на рис.5.3.

Операции над процессами и связанные с ними понятия - student2.ru

Рисунок 5.3 - Диаграмма пяти состояний процесса

Операции над процессами и связанные с ними понятия

Рассмотрим наборы операций, блок управления процессом и контекст процесса, одноразовые и многоразовые операции, прерывание и типы прерываний, переключение контекста, ядро ОС.

Набор операций

Процесс не может сам перейти из одного состояния в другое. Изменением состояния процессов занимается операционная система, совершая операции над ними. Количество таких операций в модели пока совпадает с количеством стрелок на диаграмме состояний. Удобно объединить их в три пары:

1) Создание процесса – завершение процесса;

2) Приостановка процесса (перевод из состояния «исполнение» в состояние «готовность») – запуск процесса (перевод из состояния «готовность» в состояние «исполнение»);

3) Блокирование процесса (перевод из состояния «исполнение» в состояние «ожидание») – разблокирование процесса (перевод из состояния «ожидание» в состояние «готовность»);

В дальнейшем в модели появится еще одна операция, не имеющая парной - изменение приоритета процесса.

Операции создания и завершения процесса являются одноразовыми, так как применяются к процессу не более одного раза (некоторые системные процессы никогда не завершаются при работе КС). Все остальные операции, связанные с изменением состояния процессов, будь то запуск или блокировка, как правило, являются многоразовыми. Рассмотрим подробнее, как операционная система выполняет операции над процессами.

PCB и контекст процесса

Для того чтобы операционная система могла выполнять операции над процессами, каждый процесс представляется в ней некоторой структурой данных. Эта структура содержит информацию, специфическую для данного процесса:

а) состояние, в котором находится процесс;

б) программный счетчик процесса или, другими словами, адрес команды, которая должна быть выполнена для него следующей;

в) содержимое регистров процессора;

г) данные, необходимые для планирования использования процессора и управления памятью (приоритет процесса, размер и расположение адресного пространства и т.д.);

д) учетные данные (идентификационный номер процесса, какой пользователь инициировал его работу, общее время использования процессора данным процессом и т.д.);

е) информацию об устройствах ввода-вывода, связанных с процессом (например, какие устройства закреплены за процессом, таблицу открытых файлов).

Конкретный ее состав и строение зависят от конкретной операционной системы. Во многих операционных системах информация, характеризующая процесс, хранится не в одной, а в нескольких связанных структурах данных. Эти структуры могут иметь различные наименования, содержать дополнительную информацию или, наоборот, лишь часть описанной информации. Однако для любого процесса, находящегося в КС, вся информация, необходимая для совершения операций над ним, доступна операционной системе. Будем считать, что она хранится в одной структуре данных и называется PCB (Process Control Block) или блоком управления процессом. Блок управления процессом является моделью процесса для операционной системы. Любая операция, производимая операционной системой над процессом, вызывает определенные изменения в PCB. В рамках принятой модели состояний процессов содержимое PCB между операциями остается постоянным.

Контекст процесса – это информация о процессе. В любой момент времени процесс полностью характеризуется своим контекстом.

Контекст состоит из трех частей:

- регистрового контекста;

- системного контекста;

- пользовательского контекста.

Содержимое всех регистров процессора (включая значение программного счетчика) называется регистровым контекстом процесса, а все остальное – системным контекстом процесса. Знания регистрового и системного контекстов процесса достаточно для того, чтобы управлять его поведением в операционной системе, совершая над ним операции. Однако этого недостаточно, чтобы полностью характеризовать процесс. Операционную систему не интересует, какими именно вычислениями занимается процесс, т.е. какой код и какие данные находятся в его адресном пространстве. С точки зрения пользователя, наоборот, наибольший интерес представляет содержимое адресного пространства процесса, возможно наряду с регистровым контекстом, определяющее последовательность преобразования данных и полученные результаты. Код и данные, находящиеся в адресном пространстве процесса, будем называть его пользовательским контекстом.

Одноразовые операции

Кратко опишем действия, которые производит операционная система при выполнении одноразовых операций над процессами.

1) Создание. Сложный жизненный путь процесса в компьютере начинается с его рождения. Любая операционная система, поддерживающая концепцию процессов, должна обладать средствами для их создания. В очень простых системах (например, в системах, спроектированных для работы только одного конкретного приложения) все процессы могут быть порождены на этапе старта системы. Более сложные операционные системы создают процессы динамически, по мере необходимости. Инициатором рождения нового процесса после старта операционной системы может выступить либо процесс пользователя, совершивший специальный системный вызов, либо сама операционная система, то есть, в конечном итоге, тоже некоторый процесс. Процесс, инициировавший создание нового процесса, принято называть процессом-родителем (parent process), а вновь созданный процесс - процессом-ребенком (child process). Процессы-дети могут, в свою очередь, порождать новых детей и т.д., образуя, в общем случае, внутри системы набор генеалогических деревьев процессов - генеалогический лес. Пример генеалогического леса изображен на рис.5.4. Следует отметить, что все пользовательские процессы вместе с некоторыми процессами операционной системы принадлежат к одному и тому же дереву леса. В ряде КС лес вообще вырождается в одно такое дерево. При рождении процесса система заводит новый PCB с состоянием процесса «рождение» и начинает его заполнение. Новый процесс получает свой собственный уникальный идентификационный номер.

Операции над процессами и связанные с ними понятия - student2.ru

Рисунок 5.4 - Упрощенный генеалогический лес процессов. Стрелка означает отношение родитель-ребенок.

Поскольку для хранения идентификационного номера процесса в операционной системе отводится ограниченное количество бит, то для соблюдения уникальности номеров количество одновременно присутствующих в ней процессов должно быть ограничено. После завершения какого-либо процесса его освободившийся идентификационный номер может быть повторно использован для другого процесса. Обычно для выполнения своих функций процесс-ребенок требует определенных ресурсов: памяти, файлов, устройств ввода-вывода и т.д. Существует два подхода к их выделению. Новый процесс может получить в свое пользование некоторую часть родительских ресурсов, возможно, разделяя с процессом-родителем и другими процессами-детьми права на них, подобно распределению ресурсов в нормальной человеческой семье, или может получить свои ресурсы непосредственно от операционной системы, став, так сказать, на государственное обеспечение в детдоме. Информация о выделенных ресурсах заносится в PCB. После наделения процесса-ребенка ресурсами необходимо занести в его адресное пространство программный код, значения данных, установить программный счетчик. Здесь также возможны два решения. В первом случае процесс-ребенок становится дубликатом процесса-родителя по регистровому и пользовательскому контекстам, при этом должен существовать способ определения кто для кого из процессов-двойников является родителем. Во втором случае процесс-ребенок загружается новой программой из какого-либо файла. Операционная система UNIX разрешает порождение процесса только первым способом; для запуска новой программы необходимо сначала создать копию процесса-родителя, а затем процесс-ребенок должен заменить свой пользовательский контекст с помощью специального системного вызова. Операционные системы VAX/VMS и WINDOWS NT допускают только второе решение. Порождение нового процесса как дубликата процесса-родителя приводит к возможности существования программ (т.е. исполняемых файлов), для работы которых организуется более одного процесса. Возможность замены пользовательского контекста процесса по ходу его работы (т.е. загрузки для исполнения новой программы) приводит к тому, что в рамках одного и того же процесса могут быть последовательно выполнены несколько различных программ. После того как процесс наделен содержанием, в PCB дописывается оставшаяся информация и состояние нового процесса изменяется на «готовность». После рождения процессов-детей процесс-родитель может продолжать свое выполнение одновременно с выполнением процесса-ребенка, а может ожидать завершения работы некоторых или всех своих детей.

2) Завершение. После того, как процесс завершил свою работу, операционная система переводит его в состояние «закончил исполнение» и освобождает все ассоциированные с ним ресурсы, делая соответствующие записи в блоке управления процессом. При этом сам PCB не уничтожается, а остается в системе еще некоторое время. Это связано с тем, что процесс-родитель после завершения процесса-ребенка может запросить операционную систему о причине произошедшей смерти порожденного им процесса и/или статистическую информацию об его работе. Подобная информация сохраняется в PCB мертвого процесса до запроса процесса-родителя или до конца его деятельности, после чего все следы умершего процесса окончательно исчезают из системы. В операционной системе UNIX процессы, находящиеся в состоянии «закончил исполнение», принято называть процессами зомби. Следует заметить, что в ряде операционных систем (например, в VAX/VMS) гибель процесса-родителя приводит к завершению работы всех его детей. В других операционных системах (например, в UNIX) процессы-дети продолжают свое существование и после окончания работы процесса-родителя. При этом возникает необходимость изменения информации в PCB процессов-детей о породившем их процессе для того, чтобы генеалогический лес процессов оставался целостным. Рассмотрим следующий пример. Пусть процесс с номером 2515 был порожден процессом с номером 2001 и после завершения его работы остается в КС неограниченно долго. Тогда, не исключено, что номер 2001 будет использован операционной системой повторно для совсем другого процесса. Если не изменить информацию о процессе-родителе для процесса 2515, то генеалогический лес процессов окажется некорректным – процесс 2515 будет считать своим родителем новый процесс 2001, а процесс 2001 будет открещиваться от нежданного потомка. Как правило, осиротевшие процессы усыновляются одним из системных процессов, который порождается при старте операционной системы, и функционирует все время, пока она работает.

Многоразовые операции

Одноразовые операции приводят к изменению количества процессов, находящихся под управлением операционной системы, и всегда связаны с выделением или освобождением определенных ресурсов. Многоразовые операции, напротив, не приводят к изменению количества процессов в операционной системе и не обязаны быть связанными с выделением или освобождением ресурсов.

Кратко опишем действия, которые производит операционная система при выполнении многоразовых операций над процессами.

1) Запуск процесса.Из числа процессов, находящихся в состоянии «готовность», операционная система выбирает один процесс для последующего исполнения. Для избранного процесса операционная система обеспечивает наличие в оперативной памяти информации, необходимой для его дальнейшего выполнения. Далее состояние процесса изменяется на «исполнение», восстанавливаются значения регистров для данного процесса, и управление передается команде, на которую указывает счетчик команд процесса. Все данные, необходимые для этого восстановления контекста, извлекаются из PCB процесса, над которым совершается операция.

2) Приостановка процесса.Работа процесса, находящегося в состоянии «исполнение», приостанавливается в результате какого-либо прерывания. Процессор автоматически сохраняет счетчик команд и, возможно, один или несколько регистров в стеке исполняемого процесса и передает управление по специальному адресу обработки данного прерывания. На этом деятельность hardware по обработке прерывания завершается. По указанному адресу обычно располагается одна из частей операционной системы. Она сохраняет динамическую часть системного и регистрового контекстов процесса в его PCB, переводит процесс в состояние «готовность» и приступает к обработке прерывания, то есть к выполнению определенных действий, связанных с возникшим прерыванием.

3) Блокирование процесса.Процесс блокируется, когда он не может продолжать свою работу, не дождавшись возникновения какого-либо события в КС. Для этого он обращается к операционной системе с помощью определенного системного вызова. Операционная система обрабатывает системный вызов (инициализирует операцию ввода-вывода, добавляет процесс в очередь процессов, дожидающихся освобождения устройства или возникновения события, и т.д.) и, при необходимости, сохранив необходимую часть контекста процесса в его PCB, переводит процесс из состояния «исполнение» в состояние «ожидание».

4) Разблокирование процесса. После возникновения в системе какого-либо события, операционной системе нужно точно определить какое именно событие произошло. Затем операционная система проверяет: находился ли некоторый процесс в состоянии «ожидание» для данного события и, если находился, переводит его в состояние «готовность», выполняя необходимые действия, связанные с наступлением события (инициализация операции ввода-вывода для очередного ожидающего процесса и т.п.).

Наши рекомендации