
Тема 5. Процессы и их поддержка в ос.
5.1. Понятие процесса.
Понятие процесса введено разработчиками ОС с 60-х годов. Изначально процесс рассматривался как программа во время выполнения. Программа в ходе выполнения является динамически активным объектом. Походу ее работы компьютер обрабатывает различные команды, и преобразуют значения переменных. Для выполнения программы ОС должна выделить определенное количество оперативной памяти, закрепить за ней устройство ввода-вывода или файлы, т.е. зарезервировать ресурсы. С течением времени их количество и конфигурация могут изменяться. Для описания такого активного объекта, характеризующегося набором команд, связанных с ним ресурсов и текущим моментом выполнения используется термин процесс. Не существует взаимно однозначного соответствия между процессами и программами, обрабатываемыми вычислительными системами. В некоторых ОС для работы программы может организовываться более 1 процесса, или один и тот же процесс может исполнять последовательно несколько различных программ.
5.2. Состояния процесса.
Н
Рождение
Ожидание
Готовность
Исполнение
Окончание
а однопроцессорной системе в каждый момент времени может исполняться только один процесс. Для мультипрограммных вычислительных систем псевдопараллельная обработка нескольких процессов достигается с помощью переключения процессора с одного процесса на другой. Таким образом, для процесса есть ряд дискретных состояний, причем смену этих состояний могут вызывать различные состояния. Рассмотрим основные состояния процесса
Допуск к параметрам
Событие произошло
Ожидание Прерывание Выбран для исполнения
События
Завершение
работы
При рождении процесс получает адресное пространство, в который загружается его программный код. Ему выделяется стек и системные ресурсы, устанавливается начальное значение программного счетчика и т.д. После того , как это сделано, родившийся процесс переходит в состояние готовности. Оно означает, что процесс может сразу использовать центральный процессор, предоставленный в его распоряжение. ОС, пользуясь алгоритмом планирования, выбирает один из готовых процессов и переводит его в состояние выполнения, в котором на выделенном ЦП происходит непосредственное выполнение программного кода. Покинуть состояние выполнения процесс может по 3 причинам:
1)заканчивает свою работу и попадает в состояние «закончил выполнение»
2)не может продолжить свою работу, пока не произойдет некоторое событие (завершение операции ввода-вывода). ОС переводит его в состояние ожидания
3)В результате возникновения прерываний в системе (прерывание от таймера по истечении кванта процессорного времени) его возвращают в состояние готовности.
В некоторых ОС состояния процесса могут быть более детализированы. Могут появляться некоторые новые варианты перехода из состояния в состояние. Так, например, модель для ОС Windows NT содержит 7 различных состояний, а для UNIX- 9.
5.3. Операции над процессами.
5.3.1. Набор операций.
Процесс не может сам перейти из одного состояния в другое. Этим занимается ОС, совершая определенные операции над процессами. Выделяют 3 пары операций:
Рождение процесса - завершение
Приостановка (перевод из выполнения в готовность)-запуск(перевод из готовности в исполнение)
Блокирование (перевод из выполнение в ожидание)- разблокирование (перевод из ожидания в готовность)
Кроме того, существует еще одна операция, не имеющая пары – изменение приоритета процессора.
Операции создания и завершения процесса являются одноразовыми, все остальные операции, как правило, многоразовые.
5.3.2. Блок управления процессов и контекст процессора.
Блок управления процессом (process control block) – PCB – объект, который определяет процесс для ОС. Представляет собой структуру данных, содержащую всю ключевую информацию о процессе: 1)состояние, в котором находится процесс;
2)программный счетчик процесса (адрес команды, которая должна быть выполнена следующей);
3)Содержимое регистров процесса
4)Данные для планирования процесса и управление памятью(приоритет процесса), размер и расположение адресного пространства и т.д.
5)Учетные данные(идентификационный номер процесса, имя пользователя, инициирующего работу, общее процессорное время данного процесса и т.д.)
6)Информация об устройствах ввода-вывода, связанных с процессом(закрепленное устройство, таблица открытых файлов и т.д.).
Информация, содержащаяся в PCB, называется контекстом процесса. В любой момент времени она полностью характеризует процесс для операционной системы. Содержимое всех регистров процессора, включая значение программного счетчика, называется регистровым контекстом процесса, все остальное – системным контекстом. Знание регистрового и системного контекстов достаточно для управления поведением процесса в ОС. Однако этого недостаточно, чтобы полностью охарактеризовать процесс. С точки зрения пользователя, интерес составляет содержимое адресного пространства, которое наряду с регистровым контекстом определяет последовательность преобразования данных и полученные результаты. Код и данные в адресном пространстве процесса, называются его пользовательским контекстом.
5.3.3 Одноразовые операции.
Инициатором создания нового процесса после старта ОС может выступать либо процесс пользователя, совершивший специальный системный вызов, либо сама ОС. Процесс, инициировавший создание нового процесса, принято называть процессом-родителем(parent process), а вновь созданный – процессом-наследником(child process). В общем случае, наследники могут порождать новых наследников, образуя внутри системы набор генеалогических деревьев процессов – генеалогический лес
Процесс 1
Процесс 2
11
12
21
22
При создании процесса система заводит новый PCB с состоянием рождения, затем заполняет его. Новый процесс получает свой персональный идентификационный номер. Так как количество присутствующих в системе процессов ограничено, то после завершения процесса его номер может быть повторно использован для другого процесса. Существует 2 подхода к выделению ресурсов для процесса наследника. Новый процесс может получить некоторую часть родительских ресурсов, разделяя права на них с процессом родителя и другими процессами-наследниками, или может получить свои ресурсы от непосредственно ОС. После выделения процессу наследнику ресурсов необходимо внести в его адресное пространство программный код и значение данных, а также установить программный счетчик. Здесь также возможны 2 решения. В 1 случае наследник становится дубликатом по регистровому и пользовательскому контекстам. При этом должен существовать способ определения, кто для кого из процессов-двойников является родителем. Во 2 случае процесс-наследник загружается новой программой из какого либо файла. ОС UNIX разрешает рождение процесса только первым способом. Для запуска новой программы необходимо сначала создать копию процесса-родителя, а затем наследник должен заменить свой пользовательский контекст с помощью специального системного вызова. Windows NT допускает только 2 решение. После того , как процесс наделен содержанием, в PCB дописывается оставшаяся информация, и состояние нового процесса изменяется на готовность. После рождения наследников процесс-родитель может продолжать свое выполнение, а может ожидать завершение работы всех или некоторых своих наследников. После того, как процесс завершил свою работу, ОС переводит его в состояние «закончил выполнение» и освобождает все ассоциированные с ним ресурсы, делая соответствующие записи в PCB. При этом сам PCB не уничтожается, а остается в системе еще некоторое время. Это связано с тем, что процесс-родитель после завершения наследника может запросить ОС о причине завершения, или статистическую информацию о его работе. Подобная информация сохраняется в PCB мертвого процесса до запроса родителя, или до конца его деятельности, после чего все следы мертвого процесс окончательно исчезают. В ряде ОС гибель процесса родителя приводит к завершению работы всех его наследников. В других ОС, например, UNIX, процессы- наследники продолжают свое существование и после завершения родителя, при этом PCB наследников изменяется, чтобы генеалогический лес процессов оставался целостным. В других ОС осиротевшие процессы обычно усыновляются одним из системных процессов, который порождается при старте системы и функционирует все время, пока она работает.
5.3.4 Многоразовые операции, в отличие от одноразовых, не приводят к изменению количества процессов в ОС, и необязательно связано с выделением и ли освобождением ресурсов:
1)Запуск процесса – из числа процессов, находящихся в состоянии готовности, ОС выбирает один процесс для последующего исполнения и обеспечивает наличие в оперативной памяти данных, необходимых для его исполнения. Состояние процесса изменяется на выполнение, восстанавливаются значения регистров для данного процесса, и управление передается команде, на которую указывает программный счетчик процесса. Все данные извлекаются из PCB.
2)Приостановка процесса – работа процесса, находящегося в состоянии выполнения, приостанавливается в результате какого либо прерывания. Процессор автоматически сохраняет счетчик команд, и один или несколько регистров в стеке. Затем передает управления адресу данного прерывания. По этому адресу обычно располагается один из модулей ОС. Он сохраняет динамическую часть контекста процесса в его блоке управления, переводит процесс в состояние «готовность» и приступает к обработке прерываний.
3)Блокирование процесса – процесс блокируется в том случае, если не может продолжать свою работу, не дождавшись возникновения, какого либо события в системе. Для этого он обращается к ОС с помощью системного вызова. ОС обрабатывает вызов (инициализирует операцию ввода-вывода, добавляет процесс в очередь за ресурсом, и т.д.), и при необходимости, сохранив нужную часть контекста в его PCB, переводит процесс из состояния выполнения в ожидание.
4)Разблокирование процесса – после возникновения в системе какого либо события, ОС проверяет, находился ли некоторый процесс в состоянии ожидания для данного события, и если да, переводит его в состояние готовности. При этом выполняются необходимые действия, связанные с наступлением события.
5.3.5 Переключение контекста.
Рассмотрим операцию разблокирования процесса, ожидающего ввода-вывода
Выполн. Кода работа оборуд
П роцесс 1 выполнение готовность
П роцесс2 готовность
Прерывание сохр.конт обработка прер перехлест процесса
При исполнении процессором некоторого процесса, возникает прерывание устройств ввода вывода, сигнализирующее об окончании операции. Над выполняющимся процессом происходит прерывание. Разблокируется процесс 2 , инициировавший запрос на ввод-вывод и осуществляет запуск приостановленного или нового процесса, выбранного при планировании. Для корректного переключения процессора с одного процесса на другой необходимо сохранить контекст исполнявшегося процесса и восстановить контекст процесса, на который будет переключен процессор. Такая процедура смены процессов называется переключением контекста. Время , затраченное для контекста, не используется системой для совершения , и представляют собой расходы, снижающие производительность. Время обычно находится в диапазоне от одной до тысячи микросекунд.
5.4. Процессы и нити.
Усилие, направленное на ускорения решения задач в рамках классических ОС, привели к появлению новой абстракции внутри понятия процесса – нити исполнения, или просто нити. Задача , оформленная в виде нескольких нитей в рамках процесса, может быть выполнена быстрее засчет псевдопараллельного(параллельного в мультипроцессорной системе) выполнения ее отдельных частей. Например, в электронных таблицах с многонитиевой обработкой пользователь может запросить пересчет рабочего листа и одновременно продолжать заполнять таблицу. Особенно эффективно можно использовать многонитиевость для выполнения распределенных приложений, например, многонитиевой сервер может параллельно выполнять запросы нескольких клиентов. Нити, относящиеся к одному процессу, не настолько изолированы друг от друга , как процессы в традиционной многозадачной системе. Между ними легко организовать тесное взаимодействие. Для процессов, который принадлежат разным процессам, все нити одного процесса всегда принадлежат одному приложению, поэтому программист может заранее продумать работу множества нитей таким образом, чтобы они могли взаимодействовать, а не бороться за ресурсы. Однако во многих отношения нити подобны процессам, и их называют облегченными процессами, или минипроцессами. Каждая нить выполняется строго последовательно, и имеет свой программный счетчик и стек. Нити, как и процессы, могут порождать потомков, переходить из состояния в состояние и т.д. Подобно традиционным процессам(процесс из одной нити), нити могут находиться в одном из следующих состояний – выполнение, ожидание и готовность. Состояние нити аналогично состояниям традиционных процессов. Из состояния рождения процесс приходит, содержащим всего одну нить. Другие нити будут являться потомками этой нити. Процесс находится в состоянии готовность, если хотя бы одна из его нитей находится в состоянии готовность, и ни одна из них не находится в состоянии выполнения. Процесс находится в состоянии выполнения, если выполняется одна из его нитей. Процесс находится в состоянии ожидания, если все его нити находятся в этом состоянии. Процесс завершает выполнение, если все его нити находятся в состоянии «завершил выполнение». Пока одна нить процесса заблокирована, другая вполне может выполняться. Поскольку нити одного процесса разделяют существенно больше ресурсов, чем различные процессы, то операции создания новой нити и переключение контекста между нитями занимает гораздо меньше времени, чем аналогичные операции для процесса. Однако нити в рамках одного процесса не настолько независимы, как отдельные процессы. Все такие нити имеют одно и то же адресное пространство. Это означает, что они разделяют одни и те же глобальные переменные, набор открытых файлов, таймеры, сигналы прерываний, симфоры, статистическую информацию и т.д. Поскольку каждая нить может иметь доступ к каждому виртуальному адресу, одна нить может использовать стек другой нити.