Процессы, операции над процессами
Понятие «вычислительный процесс» (или просто – «процесс») является одним из основных при рассмотрении операционных систем.
Последовательный процесс (или задача) – это выполнение отдельной программы с её данными на последовательном процессоре. Также в литературе встречается другое определение процесса. Процесс – минимальный программный объект, обладающий собственными системными ресурсами (запущенная программа).
В качестве примеров можно назвать следующие процессы (задачи): прикладные программы пользователей, утилиты и другие системные обрабатывающие программы. Процессами могут быть редактирование какого-либо текста, трансляция исходной программы, её компоновка, исполнение.
Операционная система контролирует следующую деятельность, связанную с процессами:
Ø создание и удаление процессов;
Ø планирование процессов;
Ø синхронизация процессов;
Ø коммуникация процессов;
Ø разрешение тупиковых ситуаций.
Не следует смешивать понятия процесс и программа. Программа – это план действий, а процесс – это само действие, поэтому понятие процесса включает:
Ø программный код;
Ø данные;
Ø содержимое стека;
Ø содержимое адресного и других регистров процессора.
Таким образом, для одной программы могут быть созданы несколько процессов в том случае, если с помощью одной программы в CPU выполняется несколько несовпадающих последовательностей команд.
С понятием «процесс» связано понятие ресурса.
Термин ресурс обычно применяется по отношению к повторно используемым, относительно стабильным и часто недостающим объектам, которые запрашиваются, используются и освобождаются процессами в период их активности. Т.е. ресурсом называется всякий объект, который может распределяться внутри системы.
Процесс может порождать новые процессы. В этом случае порождающий процесс называют родительским (parent process), а второй, созданный процесс – дочерним (child process). Каждый дочерний имеет один родительский процесс. В результате такого подхода формируется иерархическая структура процессов (hierarchical process structure), изображенная на рис. 3.1, в которой у дочернего процесса есть только один родительский (например, процесс А является родительским по отношению к процессу С; Н – родительским процессом для I), но каждый родительский процесс может иметь произвольное количество дочерних процессов (например, процессы В, С и D являются дочерними по отношению к А; F и G – дочерними по отношению к С).
Рис. 3.1.
В UNIX-подобных системах, таких как Linux, многие процессы порождаются главным процессом init, создаваемым во время загрузки ядра (рис. 3.2). В Linux в роли таких процессов выступают kswapd, xfs и khubd – эти процессы управляют памятью, файловой системой и устройствами, соответственно. Процесс login отвечает за аутентификацию пользователей в операционной системе, требуя от пользователя ввести свое имя и пароль. После прохождения пользователем аутентификации с помощью процесса login, он порождает процесс оболочки, например, bash (Вourne-again shell), дающий возможность пользователю взаимодействовать с операционной системой (рис. 3.2). После этого пользователь может задавать команды в оболочке командной строки, например, запустить программу vi (текстовый редактор) или другие.
Рис. 3.2.
Уничтожение процесса подразумевает его полное удаление из системы. Занимаемая им память и ресурсы возвращаются в распоряжение системы, информация о нем стирается из всех системных списков или таблиц, удаляется блок управления процессом, после чего память, выделенная под хранение блока управления процесса (дескриптора) данного процесса, становится доступной другим процессам системы. Удалить процесс, породивший другие процессы, сложнее. В некоторых операционных системах все созданные процессы уничтожаются автоматически при уничтожении родительского, в других ОС созданные процессы существуют независимо от родительских, и уничтожение родительского процесса не влияет на дочерние.
Динамика состояния процесса
Рассмотрим динамику состояния процесса.
Выполнение |
Готовность к выполнению |
Ожидание (состояние блокирования) |
Бездействие (пассивное состояние) |
Если обобщать и рассматривать не только обычные ОС общего назначения, но и, например, ОС реального времени, то можно сказать, что процесс может находиться в активном и пассивном (не активном) состоянии (рис. 3.3).
Рис. 3.3. Граф состояний процесса
В активном состоянии процесс может участвовать в конкуренции за использование ресурсов вычислительной системы, а в пассивном – он только известен системе, но в конкуренции не участвует (хотя его существование в системе сопряжено с предоставлением ему оперативной и/или внешней памяти). В свою очередь, активный процесс может быть в одном из следующих состояний:
Ø выполнения – все затребованные процессом ресурсы выделены. В этом состоянии в каждый момент времени может находиться только один процесс, если речь идёт об однопроцессорной вычислительной системе;
Ø готовности к выполнению – ресурсы могут быть предоставлены, тогда процесс перейдёт в состояние выполнения;
Ø блокирования или ожидания – затребованные ресурсы не могут быть предоставлены, или не завершена операция ввода/вывода.
В обычных (не реального времени) ОС, как правило, процесс появляется при запуске какой-нибудь программы. ОС организует (порождает или выделяет) для нового процесса соответствующий дескриптор (описатель) процесса, и процесс (задача) начинает развиваться (выполняться). Поэтому пассивного состояния не существует.
В ОС реального времени (ОСРВ) ситуация иная. Обычно при проектировании системы реального времени, как правило, уже заранее известен состав программ (задач), которые должны будут выполняться. Известны и многие их параметры, которые необходимо учитывать при распределении ресурсов (например, объём памяти, приоритет, средняя длительность выполнения, открываемые файлы, используемые устройства и т.п.). Поэтому для них заранее заводят дескрипторы задач с тем, чтобы впоследствии не тратить драгоценное время на организацию дескриптора и поиск для него необходимых ресурсов. Таким образом, в ОСРВ многие процессы (задачи) могут находиться в состоянии бездействия, что мы и отобразили на рис. 3.3, отделив это состояние от остальных состояний пунктиром.
За время своего существования процесс может неоднократно совершать переходы из одного состояния в другое. Это обусловлено:
Ø обращениями к ОС с запросами ресурсов;
Ø выполнением системных функций, которые предоставляет ОС;
Ø взаимодействием с другими процессами;
Ø появлением сигналов прерывания от таймера, каналов и устройств ввода/вывода, а также других устройств.
Возможные переходы процесса из одного состояния в другое отображены на рис. 3.3.
Рассмотрим эти переходы из одного состояния в другое более подробно.
Процесс из состояния бездействия может перейти в состояние готовности в следующих случаях:
Ø по команде оператора (пользователя). Имеет место в тех диалоговых операционных системах, где программа может иметь статус задачи (и при этом являться пассивной), а не просто быть исполняемым файлом и только на время исполнения получать статус задачи (в большинстве современных ОС для ПК);
Ø при выборе из очерёди планировщиком (характерно для ОС, работающих в пакетном режиме);
Ø по вызову из другой задачи (посредством обращения к супервизору один процесс может создать, инициировать, приостановить, остановить, уничтожить другой процесс);
Ø по прерыванию от внешнего инициативного1 устройства (сигнал о свершении некоторого события может запускать соответствующую задачу);
Ø при наступлении запланированного времени запуска программы.
Последние два способа запуска задачи, при которых процесс из состояния бездействия переходит в состояние готовности, характерны для ОСРВ.
Из состояния выполнения процесс может выйти по одной из следующих причин:
Ø процесс завершается, при этом он посредством обращения к супервизору передаёт управление ОС и сообщает о своем завершении. В результате этих действий супервизор либо переводит его в список бездействующих процессов (процесс переходит в пассивное состояние), либо уничтожает.
В состояние бездействия процесс может быть переведен принудительно: по команде оператора (действие этой и других команд оператора реализуется системным процессом, который «транслирует» команду в запрос к супервизору с требованием перевести указанный процесс в состояние бездействия), или путем обращения к супервизору операционной системы из другой задачи с требованием остановить данный процесс;
Ø процесс переводится супервизором операционной системы в состояние готовности к исполнению в связи с появлением более приоритетной задачи или в связи с окончанием выделенного ему кванта времени;
Ø процесс блокируется (переводится в состояние ожидания) либо вследствие запроса операции ввода/вывода (которая должна быть выполнена прежде, чем он сможет продолжить исполнение), либо в силу невозможности предоставить ему ресурс, запрошенный в настоящий момент (причиной перевода в состояние ожидания может быть и отсутствие сегмента или страницы в случае организации механизмов виртуальной памяти), а также по команде оператора на приостановку задачи или по требованию через супервизор от другой задачи.
Процесс деблокируется и переводится в состояние готовности к исполнению при наступлении соответствующего события:
Ø завершение операции ввода/вывода;
Ø освобождение затребованного ресурса;
Ø загрузка в оперативную память страницы виртуальной памяти и т.д.
Таким образом, движущей силой, меняющей состояния процессов, являются события.
Дата добавления: 2016-03-15; просмотров: 1845;