Основные сведения о процессах
ЭВМ может одновременно выполнять несколько работ. Для этого ОС должна поддерживать мультипрограммный режим работы.
Преимущества мультипрограммного режима:
- увеличение пропускной способности за счет лучшей загрузки устройств;
- возможность совмещать длительные операции (например, печать) с другой полезной работой;
- новые средства декомпозиции при разработке сложных систем, обрабатывающих различные асинхронные события.
В мультипрограммных ОС вводится понятие процесса. Процесс – это программа в момент выполнения и выделенные ей ресурсы. Часть ОС, осуществляющая управление процессами, называется диспетчер, или планировщик.
Создание процессов
Ниже перечислены причины создания процессов.
1. Инициализация системы. Обычно при запуске ОС создаются несколько процессов. Некоторые из них – высокоприоритетные, они обеспечивают взаимодействие с пользователем. Остальные – фоновые, они не связаны с конкретными пользователями и выполняют особые функции (обработка приходящей почты, вывод на печать и т.п.). Они называются демонами (daemon, Disk And Execution MONitor).
2. Создание процесса другим работающим процессом. При этом созданный процесс называется дочерним, а создавший его процесс – родительским.
3. Запрос пользователя на создание процесса.
4. Инициирование пакетного задания (на больших ЭВМ).
Независимо от причины создания процесса он всегда создается одинаково – при помощи системного вызова для создания нового процесса.
Завершение процессов
Ниже перечислены причины завершения процессов:
1. Обычное завершение.
2. Выход по неустранимой ошибке.
3. Уничтожение другим процессом.
Иерархия процессов
В некоторых операционных системах родительские и дочерние процессы остаются связанными между собой определенным образом. Дочерний процесс также может создать другие процессы, формируя дерево процессов. В UNIX процесс, все его "дети" и дальнейшие потомки образуют группу процессов.
Модели процесса
Модель с двумя состояниями
На рис. 3.1, а представлена модель процесса с двумя состояниями, а на рис. 3.1, б – диаграмма использования очереди. Состояния процесса на рисунке изображены в виде эллипсов, дугами обозначены переходы между состояниями, надписи над дугами обозначают действие, вызвавшее переход между состояниями.
Создав новый процесс, ОС вводит его в систему в состоянии не выполняющегося. Созданный процесс ждет, пока он сможет быть запущен. Время от времени выполняющиеся процессы будут прерываться, и диспетчер будет выбирать для выполнения другой процесс.
Не выполняющиеся процессы следует организовать в очередь, где они ожидали бы своего выполнения. Элементы такой очереди – указатели на процессы. Процесс, работа которого прервана, переходит в очередь процессов, ожидающих выполнения. Если процесс завершен, он выводится из системы. Для выполнения диспетчер выбирает из очереди следующий процесс.
Модель с пятью состояниями
Модель с двумя состояниями неадекватно отражает реальность. Возможны две разные ситуации, когда процесс не выполняется:
1) ОС решила предоставить процессор на время другому процессу;
2) 2) процесс блокируется, т.к. с точки зрения своей внутренней логики он не может выполняться далее (например, ожидает входные данные).
Поэтому в диаграмме состояний на рис. 3.2, а представлены три состояния процесса: выполняющийся (использует процессор); готовый к выполнению (процесс временно приостановлен, чтобы позволить выполняться другому процессу); блокированный (процесс не может быть запущен прежде, чем произойдет некоторое внешнее событие). Также добавлены еще два состояния: новый (только что созданный процесс, который не помещен операционной системой в очередь выполнимых процессов; это новый процесс, который еще не загружен в ОП); завершенный (процесс, удаленный из пула выполнимых процессов).
Возможны следующие переходы между состояниями:
Нулевое состояние -> Новый. Причины перехода между этими состояниями совпадают с причинами создания процессов.
Новый -> Готовый к выполнению. Этот переход произойдет, когда ОС будет готова к обработке дополнительного процесса, т.к. в большинстве ОС есть ограничение на количество процессов или на объем выделенной для процессов виртуальной памяти.
Готовый -> Выполняющийся. Этот переход происходит в момент выбора нового процесса для запуска.
Выполняющийся -> Завершающийся. Причины перехода между этими состояниями совпадают с причинами завершения процессов.
Выполняющийся -> Готовый к выполнению. Этот переход происходит чаще всего по истечении кванта времени, выделенного процессу. В некоторых ОС может произойти вытеснение процесса до истечения кванта (например, при появлении процесса с более высоким приоритетом).
Вытеснение (Preemtion) – ситуация, когда процесс лишается некоторого ресурса до того, как он завершит работу с ним.
Выполняющийся -> блокированный. Данный переход происходит, если для продолжения работы требуется наступление некоторого события (например, ожидание освобождения занятого ресурса; ожидание окончания операции ввода-вывода; ожидание сообщения от другого процесса).
Блокированный -> Готовый к выполнению. Данный переход происходит, когда наступает ожидаемое процессом событие.
На рис. 3.2, б показан один из способов реализации порядка очередности. Имеется две очереди: очередь готовых к выполнению и очередь заблокированных процессов. Каждый процесс, поступающий в систему для обработки, помещается в очередь готовых к выполнению процессов. ОС выбирает для выполнения процесс из этой очереди. Если схема приоритетов отсутствует, то очередь имеет тип FIFO. Когда выполнение процесса прерывается, то он, в зависимости от обстоятельств, может либо завершиться, либо попасть в одну из двух очередей. После того, как произойдет какое-либо событие, все ожидающие его процессы из очереди заблокированных перемещаются в очередь готовых процессов.
Недостатком такой схемы является то, что после любого события ОС должна просматривать всю очередь блокированных процессов, отыскивая среди них те, которые ожидают именно этого события. Поэтому эффективнее организовать несколько очередей, для каждого события – свою. Тогда при наступлении какого-либо события все процессы из соответствующей очереди могут быть переведены в очередь готовых к выполнению процессов. Если диспетчеризация осуществляется с использованием приоритетов, то можно организовать несколько очередей готовых процессов, по одной очереди на каждый уровень приоритета.
Описание процессов
Для управления процессами ОС создает и поддерживает таблицы процессов, которые содержат указатель на образ процесса.
Образ процесса содержит программу (код), данные, стек и атрибуты процесса (управляющий блок процесса). Структура данных с атрибутами процесса часто называется управляющим блоком процесса.
Атрибуты процесса включают в себя следующее:
- Идентификация процесса (идентификатор данного процесса, идентификатор родительского процесса, идентификатор пользователя).
- Информация о состоянии процесса (содержимое регистров общего назначения, управляющих регистров и регистров состояния, указатели на стек).
- Управляющая информация процесса (состояние процесса – выполняющийся, готовый к выполнению, блокированный т.д.., приоритет, информация, связанная с планированием; информация о событиях; информация о связи с другими процессами (в очередях, родственные связи); обмен информацией между процессами (различные флаги, сигналы, сообщения); привилегии процесса; информация о владении ресурсами и их использовании.
Управление процессами
Создание процессов
При создании процесса ОС должна выполнить следующие действия:
1. Присвоить новому процессу уникальный идентификатор. В таблицу процессов вносится новая запись.
2. Выделить пространство для процесса – для образа процесса и для управляющего блока процесса.
3. Инициализировать управляющий блок процесса.
4. Установить необходимые связи. Например, включить новый процесс в очередь готовых процессов.
5. Создать или расширить другие структуры данных
Переключение процессов
Переключение процессов может произойти в любой момент, когда управление передается операционной системе: аппаратное прерывание, включая прерывание от таймера; ловушка (исключение); системный вызов.
Все три причины реализуются через механизм прерываний.
Действия ОС при переключении процессов:
1. Сохранение контекста процессора в управляющем блоке процесса (содержимое регистров общего назначения и управляющих регистров)
2. Обновление управляющего блока выполняющегося процесса: изменить состояние процесса, сохранить информацию по учету использования ресурсов.
3. Помещение управляющего блока данного процесса в соответствующую очередь (например, готовых или заблокированных).
4. Выбор следующего процесса для выполнения.
5. Обновление управляющего блока выбранного процесса: установить состояние выполнения.
6. Обновление структур данных по управлению памятью.
7. Восстановление контекста процессора для выбранного процесса.