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

Микроядро

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

Достоинства: устойчивость к сбоям оборудования, ошибкам в компонентах системы.

Недостатки: передача данных между процессами требует накладных расходов.

Примеры: Symbian OS; Mach, используемый в GNU/Hurd и Mac OS X; Windows CE; QNX; AIX; Minix; ChorusOS; AmigaOS; MorphOS.

Интерфейс прикладного программирования (англ. Application Programming Interface, API [эй-пи-ай]; по-русски чаще произносят [апи́]) — набор готовых констант, структур и функций, используемых при программировании пользовательских приложений и обеспечивающих правильное взаимодействие между пользовательским приложением и операционной системой.

API определяет функциональность, которую предоставляет программа (модуль, библиотека), при этом API позволяет абстрагироваться от того, как именно эта функциональность реализована. Если программу (модуль, библиотеку) рассматривать как черный ящик, то API — это множество «ручек», которые доступны пользователю данного ящика, которые он может вертеть и дергать.

Программные компоненты взаимодействуют друг с другом посредством API. При этом обычно компоненты образуют иерархию — высокоуровневые компоненты используют API низкоуровневых компонентов, а те, в свою очередь, используют API ещё более низкоуровневых компонентов. По такому принципу построены протоколы передачи данных по Internet. Стандартный протокол Internet (сетевая модель OSI) содержит 7 уровней (от физического уровня передачи пакетов бит до уровня протоколов приложений, подобных протоколам HTTP и IMAP). Каждый уровень пользуется функциональностью предыдущего уровня передачи данных и, в свою очередь, предоставляет нужную функциональность следующему уровню.

 

Понятие процессаиграет ключевую роль и вводится применительно к каждой программе отдельного пользователя. Управление процессами (как целым, так и каждым в отдельности) - важнейшая функция ОС.

Процессом называют програм­му в момент ее выполнения. С каждым процессом связывается его адресное пространство — список адресов в памяти от некоторого ми­нимума до некоторого максимума. По этим адресам процесс может занести информацию и прочесть ее. Адресное пространство содер­жит саму программу, данные к ней и ее стек. Со всяким процессом связывается некий набор регистров, включая счетчик команд, ука­затель стека и другие аппаратные ресурсы, а также вся информация, необходимая для запуска программы.

Чтобы лучше разобраться в понятии процесса, проведем аналогию с системой, работающей в режиме разделения времени. Предположим, ОС решает остановить работу одного процесса и запустить другой, потому что первый из­расходовал отведенную для него часть рабочего времени центрального процессора. Позже остановленный процесс должен быть запущен снова из того же со­стояния, в каком его остановили. Следовательно, всю информацию о процессе нужно где-либо сохранить. Так, процесс может иметь не­сколько одновременно открытых для чтения файлов. Связанный с каждым файлом указатель дает текущую позицию, т.е. номер байта или записи, которые будут прочитаны после повторного запуска про­цесса. При временном прекращении действия процесса все указате­ли нужно сохранить так, чтобы команда чтения, выполненная после возобновления процесса, прочла правильные данные. Во многих ОС вся информация о каждом процессе хранится в таблице операцион­ной системы. Эта таблица называется таблицей процессови представ­ляет собой связанный список структур, по одной на каждый суще­ствующий в данный момент процесс.

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

Рассмотрим содержание и применение этой модели.

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

Операционной системе нужен способ создания и прерывания процессов по мере необходимости. Обычно при загрузке ОС созда­ются несколько процессов. Некоторые из них обеспечивают взаимо­действие с пользователем и выполняют заданную работу. Остальные процессы являются фоновыми. Они не связаны с конкретными пользователями, но выполняют особые функции. Например, один фоновый процесс может обеспечивать вывод на печать, другой мо­жет обрабатывать запросы к web-страницам.

Процессы могут создаваться не только в момент загрузки систе­мы. Так текущий процесс может создать один или несколько новых процессов, при этом текущий процесс выполняет системный запрос на создание нового процесса. Создание новых процессов особенно полезно в тех случаях, когда выполняемую задачу проще всего сфор­мировать как набор связанных, но независимо взаимодействующих процессов. Если необходимо организовать выборку большого коли­чества данных из сети для дальнейшей обработки, удобно создать один процесс для выборки данных и размещения их в буфере, дру­гой - для считывания и обработки данных из буфера. Такая схема даже ускорит обработку данных, если каждый процесс запустить на отдельном процессоре в случае многопроцессорной системы.

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

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

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

Рассмотренный подход описывается моделью, представленной на рис. 7.2. Нижний уровень ОС — это планировщик — небольшая про­грамма. На верхних уровнях расположены процессы. Обработка пре­рываний и процедуры, связанные с остановкой и запуском про­цессов, выполняются планировщиком. Вся остальная часть ОС структурирована в виде набора процессов.

Процессы

Рис. 7.2. Нижний уровень ОС, отвечающий за прерывание и планирование

 

Процесс — выполнение пассивных инструкций компьютерной программы на процессоре ЭВМ. Стандарт ISO 9000:2000 Definitions определяет процесс как совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие. Компьютерная программа сама по себе это только пассивная совокупность инструкций, в то время как процесс — это непосредственное выполнение этих инструкций.

Часто процессом называют выполняющуюся программу и все её элементы: адресное пространство, глобальные переменные, регистры, стек, открытые файлы и т.д.

Жизнь процессаможно теоретически разбить на несколько состояний, описывающих процесс. Полный набор состояний процесса содержится в следующем перечне (рис. 7.3.):

1) Процесс выполняется в режиме задачи.

2) Процесс выполняется в режиме ядра.

3) Процесс не выполняется, но готов к запуску под управлением ядра.

4) Процесс приостановлен и находится в оперативной памяти.

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

6) Процесс приостановлен и программа подкачки выгрузила его во внешнюю память, чтобы в оперативной памяти освободить место для других процессов.

7) Процесс возвращен из привилегированного режима (режима ядра) в непривилегированный (режим задачи), ядро резервирует его и переключает контекст на другой процесс.

8) Процесс вновь создан и находится в переходном состоянии; процесс существует, но не готов к выполнению, хотя и не приостановлен. Это состояние является начальным состоянием всех процессов, кроме нулевого.

9) Процесс вызывает системную функцию exit и прекращает существование. Однако, после него осталась запись, содержащая код выхода, и некоторая хронометрическая статистика, собираемая родительским процессом. Это состояние является последним состоянием процесса.

Для описания состояний процессов используется несколько моделей. Самая простая модель - это модель трех состояний. Модель состоит из:

1. состояния выполнения

2. состояния ожидания

3. состояния готовности

 

Рисунок 7.3. Диаграмма переходов процесса из состояния в состояние

 

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