Планирование процессов, выделение ресурсов, процессу, состояния процесса.
В этой статье мы поговорим на такие темы, как: планирование процессов операционной системой, выделение ресурсов процессу, состояния процесса в ОС.
Понятие «вычислительный процесс» (или просто «процесс») является одним из основных при рассмотрении свойств ОС. Последовательный процесс (задача) – это выполнение отдельной программы с ее данными на последовательном процессоре (программа, находящаяся в решении).
Например:
- Выполнение прикладных программ пользователей.
- Выполнение утилит и других системных обрабатывающих программ.
- Трансляция исходной программы, ее исполнение.
Планирование процессов
В первых вычислительных системах любая программа могла выполняться только после полного выполнения предыдущей задачи. Такой режим работы получил название однозадачного(однопрограммного).
Поскольку первые вычислительные системы были построены в соответствии с принципами Джона Фон Неймана, все подсистемы и устройства компьютера управлялись исключительно центральным процессором. ЦП осуществлял и выполнение вычислений, и управление операциями ввода/вывода данных. Соответственно, пока осуществлялся обмен данными между оперативной памятью и внешними устройствами, процессор не мог выполнять вычисления.
Введение в состав вычислительной машины специальных контроллеров позволило совместить во времени (распараллелить) операции вывода полученных данных и последующие вычисления на ЦП. Однако все равно процессор продолжал часто и долго простаивать, дожидаясь очередной операции ввода/вывода. Поэтому было предложено организовать, так называемый, мультипрограммный (мультизадачный, многозадачный) режим работы вычислительной системы. Суть его заключается в том, что пока одна программа (один процесс или задача) ожидает завершения очередной операции ввода/вывода, другая программа (другая задача) может быть поставлена на решение.
Многозадачный режим можно охарактеризовать следующим образом:
- благодаря совмещению во времени двух задач общее время их выполнения становится меньше, чем, если бы мы выполняли их по очереди (запуск одной из них после завершения другой).
- время выполнения каждой задачи в общем случае становится больше, чем, если бы мы выполняли каждую из них как единственную: всякое разделение ресурсов замедляет работу одного из участников за счет дополнительных затрат времени на ожидание выполнения ресурса.
Выделение ресурсов
ОС поддерживает мультипрограммирование и старается эффективно использовать ресурсы путем организации к ним очередей запросов, составляемых тем или иным способом. Это требование достигается поддерживанием в памяти более одного процесса, ожидающего процессор, и более одного процесса готового использовать ресурсы, как только последние станут доступными.
При необходимости использовать какой–нибудь ресурс (оперативную память, устройства ввода/вывода, массив данных и др.) задача обращается к супервизору ОС (ее центральному управляющему модулю), посредством специальных вызовов (команд, директив) и сообщает о своем требовании. При этом указывается вид ресурса и, если надо, его объем (например, количество адресуемых ячеек ОП, количество дорожек или секторов на системном диске, устройство печати и объем выводимых данных).
Супервизор ОС может состоять из нескольких модулей: супервизора ввода/вывода, супервизора прерываний, супервизора программ, диспетчер задач и т.д.
Директива обращения к ОС передает ей управление, переводя процесс в привилегированный режим работы, если такой существует. Ресурс может быть выделен, задачей, обратившейся к супервизору с соответствующим запросом, если:
- он свободен и в системе нет запросов от задач более высокого приоритета к этому же ресурсу.
- текущий запрос и ранее выданные запросы допускают совместное использование ресурса.
- ресурс используется задачей низшего приоритета и может быть временно отобран (разделяемый ресурс).
Получив запрос, ОС либо удовлетворяет его и возвращает управление задаче, выдавшей данный запрос, либо, если ресурс занят, ставит задачу в очередь к ресурсу, переводя ее в состояние ожидания. Очередь к ресурсу может быть организована несколькими способами, но чаще всего это осуществляется с помощью списковой структуры.
После окончания работы с ресурсом задача опять с помощью специального вызова супервизора (посредством соответствующей директивы) сообщает ОС об отказе от ресурса, или ОС забирает ресурс сама, если управление возвращается супервизору после выполнения какой-либо системной функции. Супервизор ОС, получив управление по этому обращению, освобождает ресурс и проверяет, имеется ли очередь к освободившемуся ресурсу. Если очередь есть – в зависимости от принятой дисциплины обслуживания (правила обслуживания) и приоритетов заявок он выводит из состояния ожидания задачу, ждущую ресурс, и переводит ее в состояние готовности к выполнению. После этого управление либо передается данной задаче, либо возвращается той, которая только что освободила ресурс.
При выдаче запроса на ресурс задача может указать, хочет ли она владеть ресурсом монопольно или допускает совместное использование с другими задачами.
Если в системе имеется некоторая совокупность ресурсов, то управлять их использованием можно на основе монопольной стратегии. Стратегия подразумевает четкую формулировку целей, следуя которым можно добиться эффективного распределения ресурсов.
В однопрограммной ОС присутствует только один пользовательский процесс. В мультипрограммной системе на ресурсы могут претендовать много независимых процессов.
Планирование процессов – это управление распределением ресурсов процессора между различными конкурирующими процессами путем передачи им управления согласно некоторой стратегии планирования.
Состояние процесса
Процесс создается, когда выполнение задания пользователя начинается, и уничтожается, когда задание завершается.
Если обобщать и рассматривать не только обычные ОС общего назначения, но и, например ОС реального времени, то можно сказать, что процесс может находиться в активном и пассивномсостоянии.
В активном состоянии (то есть во время своего существования) процесс может участвовать в конкуренции за использование ресурсов в ОС, а в – пассивном – он только известен системе, но в конкуренции не участвует (хотя его существование в системе сопряжено с предоставлением ему оперативной и/или внешней памяти).
В свою очередь активный процесс может быть в одном из следующих состояний:
- Выполнения (running) – все затребованные процессом ресурсы выделены. В этом состоянии в каждый момент времени может находиться только один процесс, если речь идет об однопроцессорной вычислительной системе (процесс использует процессор для выполнения своих команд). В многопроцессорных системах при наличии соответствующей ОС количество активных процессов может достигать числа процессоров.
- Готовности к выполнению (ready) – ресурсы могут быть предоставлены, тогда процесс перейдет в состояние выполнения (процессы не блокированы и не активны).
- Блокирования или ожидания (blocked) – затребованные ресурсы не могут быть предоставлены, или операция ввода/вывода не завершена (выполнение процесса может быть продолжено только после наступления некоторого ожидаемого им события).
Таким образом, возможные переходы из одного состояния процесса в другое в общем случае можно представить следующей схемой:
Выбор процесса и передачу на него управления называют диспетчеризацией. Часть операционной системы, выполняющая эту функцию, называется диспетчером (dispetcher).
В обычных ОС (на рассматривая ОС реального времени) процесс появляется при запуске какой-нибудь программы. ОС организует (выделяет) для нового процесса соответствующий дескрипторпроцесса и процесс начинает выполняться. Поэтому пассивного состояния не существует.
В ОС реального времени ситуация иная. Обычно при проектировании системы реального времени уже заранее бывает известен состав программ (задач), которые должны будут выполняться. Известны и многие их параметры, которые необходимо учитывать при распределении ресурсов (объем памяти, приоритет, средняя длительность выполнения, открываемые файлы, используемые устройства и т.п.). Поэтому для них заранее заводят дескрипторы задач, с тем, чтобы в последствии не тратить драгоценное время на организацию дескриптора и поиск для него необходимых ресурсов. Таким образом, в ОС реального времени многие процессы (задачи) могут находиться в состоянии бездействия – пассивном состоянии.
Переходы между состояниями процесса
За время своего существования процесс может неоднократно совершать переходы из одного состояния в другое. Это обусловлено следующими факторами:
- обращениями к ОС с запросами ресурсов.
- обращениями к ОС с запросами на выполнение системных функций.
- взаимодействием с другими процессами.
- появлением сигналов прерывания таймера.
- появлением сигналов прерывания устройств ввода/вывода и др.
Возможные переходы процесса из одного состояния в другое отображены в виде схем состояний. Процесс из состояния бездействия может перейти в состояние готовности в следующих случаях:
- По команде оператора (пользователя). Имеет место в тех диалоговых ОС, где программа может иметь статус задачи (и при этом являться пассивной), а не просто быть исполняемым файлом и только на время исполнения получать статус задачи (как это происходит в большинстве современных ОС).
- При выборе из очереди планировщика (характерно для ОС, работающих в пакетном режиме).
- По вызову из другой задачи (посредством обращения к супервизору один процесс может создать, инициировать, приостановить, остановить, уничтожить другой процесс).
- По прерыванию от внешнего инициативного устройства (сигнал о свершении некоторого события может запускать соответствующую задачу).
Устройство называется инициативным, если по сигналу запроса на прерывание от него должна запускаться некоторая задача.
- При наступлении запланированного времени запуска программы.
Из состояния выполнения процесс может выйти по одной из следующих причин:
- Процесс завершается, при этом он посредством обращения к супервизору передает управление ОС и сообщает о своем завершении. В результате этих действий супервизор либо переводит его в список бездействующих процессов (процесс переходит в пассивное состояние), либо уничтожает (уничтожается не сама программа, а именно задача, которая соответствовала выполнению некоторой программы). В состояние бездействия процесс может быть переведен принудительно: по команде оператора или путем обращения к супервизору ОС из другой задачи с требованием остановить данный процесс.
- Процесс переводится супервизором ОС в состояние готовности к исполнению в связи с появлением более приоритетной задачи или в связи с окончанием выделенного ему кванта времени.
- Процесс блокируется (переводится в состояние ожидания) либо вследствие запроса операции ввода/вывода либо в силу невозможности предоставить ему ресурс, запрошенный в настоящий момент, а также по команде оператора на приостановку задачи, или по требованию через супервизор другой задачи.
Таким образом, движущей силой, меняющей состояние процессов, являются различные события. Один из основных видов событий — это прерывание.