Управление процессами. Взаимодействие прикладных задач с ядром происходит посредством стандартного интерфейса системных вызовов. Интерфейс системных вызовов представляет собой набор услуг ядра и определяет формат запросов на услуги. Процесс запрашивает ус

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

В операционной системе UNIX процессы создаются с помощью вызова сис­темной функции ядра под названием fork (). При вызове этой функции процес­сом операционная система выполняет следующие действия [ВАСН86].

1. Выделяет в таблице процессов место для нового процесса.

2. Назначает этому процессу уникальный идентификатор.

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

4. Увеличивает показания счетчиков всех файлов, принадлежащих родительскому процессу, что отражает тот факт, что новый процесс также владеет этими файлами.

5. Назначает процессу состояние готовности к выполнению.

Возвращает родительскому процессу идентификатор дочернего процесса, а дочернему процессу - значение 0.

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

РЕЗЮМЕ, КЛЮЧЕВЫЕ И КОНТРОЛЬНЫЕ ВОПРОСЫ

Фундаментальным строительным блоком современных операционных систем является процесс. Основная функция операционной системы состоит в соз­дании, управлении и завершении процессов. Операционная система должна сле­дить за тем, чтобы каждому активному процессу выделялось время для выпол­нения на процессоре, координировать деятельность процессов, разрешать конфликтные ситуации и выделять процессам системные ресурсы.

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

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

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

Ключевые термины

Вытеснение Прерывание Слово состояния программы

Дочерний процесс Привилегированный Состояние блокирования

Завершение процесса режим Состояние выполнения

Задание Процесс Состояние готовности

Ловушка Режим ядра Состояние нового процесса

Образ процесса Родительский процесс Состояние

Переключение процессов Свопинг приостановленности

Переключение режимов Системный режим Управляющий блок

Пользовательский режим След процесса

Контрольные вопросы

3.1. Что такое след процесса?

3.2. В результате каких событий создаются процессы?

3.3. Дайте краткое описание каждого состояния, фигурирующего в модели обработки процессов, представленной на рис. 3.3.

3.4. Что такое вытеснение процесса?

3.5. Что такое свопинг и когда он применяется?

3.6. Зачем на рис. 3.6,6 представлены два блокированных состояния?

3.7. Перечислите четыре характерных признака приостановленных процессов.

3.8. Для каких объектов операционная система поддерживает таблицы с управляющей информацией?

3.9. Перечислите три общие категории информации в управляющем блоке процесса.

3.10. Зачем нужны два режима работы процессора (пользовательский режим и режим ядра)?

3.11. Какие действия выполняет операционная система при создании нового процесса?

3.12. Чем отличаются обычное прерывание и ловушка?

3.13. Приведите три примера прерываний.

Чем отличаются переключение режима работы процессора и переключение процессов?

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

GOOD94 Goodheart В., Сох J. The Magic Garden Explained: The Internals of UNIX System V Release 4. - Englewood Cliffs, NJ: Prentice Hall, 1994.

GRAY97 Gray J. Interprocess Communication in UNIX: The Nooks and Crannies. - Upper Saddle River, NJ: Prentice Hall, 1997.

NEHM75 Nehmer J. Dispatcher Primitives for the Construction of Operating System Kernels. - Acta Informatica, vol. 5, 1975.

ЗАДАЧИ

Назовите пять основных функций операционной системы при управлении процессами; обоснуйте в общих чертах их необходимость.

3.1. В определены такие состояния процессов: выполняющийся, готовый к выполнению, блокированный и приостановленный. Процесс находится в блокированном состоянии, если он ожидает разрешения использовать какой-то ресурс; процесс является приостановленным, если он ждет, пока освободится ресурс, запрос на использование которого он уже отправил. Во многих операционных системах эти два состояния объединяются в одно, и называются блокированным состоянием. В этом случае определение приостановленного состояния совпадает с тем, которое использовалось в данной главе. Сравните преимущества использования этих двух наборов состояний.

3.2. Нарисуйте диаграмму с использованием очередей для модели с семью состояниями, изображенной на рис. 3.6,6. В качестве основы возьмите диаграмму, представленную на рис. 3.5,6.

3.3. Рассмотрим диаграмму переходов состояний, изображенную на рис. 3.6,6. Предположим, что для операционной системы пришло время переключать процесс. Пусть у нас имеются процессы как в состоянии готовности, так и готовые к выполнению приостановленные. Кроме того, по крайней мере один из готовых к выполнению приостановленных процессов имеет более высокий приоритет по сравнению с приоритетом любого процесса в состоянии готовности. Можно действовать в соответствии с одной из двух следующих стратегий.

1. Всегда выбирать процесс в состоянии готовности, чтобы свести свопинг к минимуму.

2. Всегда отдавать предпочтение процессу с более высоким приоритетом, даже если для этого приходится выполнять свопинг, который не является необходимым.

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

3.5. В табл. 3.13 приведены состояния процессов, использующиеся в операционной системе VAX/VMS.

а. Сможете ли вы найти оправдание наличию такого большого количества различных состояний ожидания?

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

в. Изобразите диаграмму переходов состояний и укажите на ней действие или событие, которое приводит к каждому из изображенных переходов.

Таблица 3.13. Состояния процессов в операционной системе VAX/VMS

Выполняющееся Выполняющийся процесс

Выполнимое (резидентное) Готовый к выполнению процесс, находящийся в основной памяти

Выполнимое (выгруженное) Готовый к выполнению процесс, выгруженный из основной памяти

Состояние ожидания

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

Состояние ожидания

разре­шения конфликта

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

Состояние ожидания

общего события Ожидание переключения совместно используемого флага событий (флаги событий - это однобитовые механизмы передачи сигналов от одного процесса другому)

Состояние ожидания

свобод­ной страницы Процесс ожидает, пока ко множеству выделенных ему и находящихся в основной памяти страниц (рабочему мно­жеству процесса) будет добавлена свободная страница ос­новной памяти

Состояние сна Процесс переводит сам себя в состояние ожидания

(резидентное)

Состояние сна

(выгруженное) Процесс в состоянии сна выгружается из основной памяти

Ожидание локального

собы­тия (резидентное) Процесс находится в основной памяти и ожидает наступ­ления локального события (обычно этим событием явля­ется завершение ввода-вывода)

Ожидание локального

собы­тия (выгруженное) Процесс в ожидании локального события выгружен из основной памяти

Приостановленное

(резидентное) Процесс, переведенный другим процессом в состояние ожидания

Приостановленное

(выгруженное) Приостановленный процесс выгружается из основной памяти

Ожидание ресурса Процесс, ожидающий, пока ему будет предоставлен какой-то системный ресурс

Необходимо различать системные управляющие процессы, представляющие ра­боту супервизора операционной системы и занимающиеся распределением и управ­лением ресурсов, от всех других процессов: системных обрабатывающих процес­сов, которые не входят в ядро операционной системы, и процессов пользователя. Для системных управляющих процессов в большинстве операционных систем ресурсы распределяются изначально и однозначно. Эти процессы управляют ре­сурсами системы, за использование которых существует конкуренция между всеми остальными процессами. Поэтому исполнение системных управляющих программ не принято называть процессами. Термин задача можно употреблять только по отношению к процессам пользователей и к системным обрабатывающим процес­сам. Однако это справедливо не для всех ОС. Например, в так называемых «мик­роядерных» ОС (в качестве примера можно привести ОС реального времени QNX фирмы Quantum Software systems) большинство управ­ляющих программных модулей самой ОС и даже драйверы имеют статус высо­коприоритетных процессов, для выполнения которых необходимо выделить со­ответствующие ресурсы. Аналогично и в UNIX-системах выполнение системных программных модулей тоже имеет статус системных процессов, которые получа­ют ресурсы для своего исполнения.

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

  • выполнения - все затребованные процессом ресурсы выделены. В этом состоя­нии в каждый момент времени может находиться только один процесс, если речь идет об однопроцессорной вычислительной системе;
  • готовности к выполнению - ресурсы могут быть предоставлены, тогда про­цесс перейдет в состояние выполнения;
  • блокирования или ожидания - затребованные ресурсы не могут быть предо­ставлены, или не завершена операция ввода/вывода.

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



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

За время своего существования процесс может неоднократно совершать перехо­ды из одного состояния в другое. Это обусловлено обращениями к операцион­ной системе с запросами ресурсов и выполнения системных функций, которые предоставляет операционная система, взаимодействием с другими процессами, появлением сигналов прерывания от таймера, каналов и устройств ввода/выво­да, а также других устройств. Возможные переходы процесса из одного состоя­ния в другое отображены в виде грае])а состояний на рис. 1.3. Рассмотрим эти пе­реходы из одного состояния в другое более подробно.

Процесс из состояния бездействия может перейти в состояние готовности в сле­дующих случаях:

  • по команде оператора (пользователя). Имеет место в тех диалоговых опера­ционных системах, где программа может иметь статус задачи (и при этом яв­ляться пассивной), а не просто быть исполняемым файлом и только на время исполнения получать статус задачи (как это происходит в большинстве со­временных ОС для ПК);
  • при выборе из очереди планировщиком (характерно для операционных сис­тем, работающих в пакетном режиме);
  • по вызову из другой задачи (посредством обращения к супервизору один процесс может создать, инициировать, приостановить, остановить, уничто­жить другой процесс);
  • по прерыванию от внешнего инициативного 1 устройства (сигнал о свершении некоторого события может запускать соответствующую задачу);

1 Устройство называется «инициативным», если по сигналу запроса на прерывание от него должна запускаться некоторая задача.

  • при наступлении запланированного времени запуска программы.

Рис. 1.3. Граф состояний процесса

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

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

Из состояния выполнения процесс может выйти по одной из следующих при­чин:

  • процесс завершается, при этом он посредством обращения к супервизору пе­редает управление операционной системе и сообщает о своем завершении. В результате этих действий супервизор либо переводит его в список бездей­ствующих процессов (процесс переходит в пассивное состояние), либо уничто­жает (уничтожается, естественно, не сама программа, а именно задача, которая соответствовала исполнению некоторой программы). В состояние бездействия процесс может быть переведен принудительно: по команде оператора (действие этой и других команд оператора реализуется системным процессом, кото­рый «транслирует» команду в запрос к супервизору с требованием перевести указанный процесс в состояние бездействия), или путем обращения к супер­визору операционной системы из другой задачи с требованием остановить данный процесс;
  • процесс переводится супервизором операционной системы в состояние готовности к исполнению в связи с появлением более приоритетной задачи или в связи с окончанием выделенного ему кванта времени;
  • процесс блокируется (переводится в состояние ожидания) либо вследствие запроса операции ввода/вывода (которая должна быть выполнена прежде, чем он сможет продолжить исполнение), либо в силу невозможности предо­ставить ему ресурс, запрошенный в настоящий момент (причиной перевода в состояние ожидания может быть и отсутствие сегмента или страницы в слу­чае организации механизмов виртуальной памяти, см. раздел «Сегментная, страничная и сегментно-страничная организация памяти» в главе 2), а также по команде оператора на приостановку задачи или по требованию через су­первизор от другой задачи.
  • при наступлении соответствующего события (завершилась операция ввода/вы­вода, освободился затребованный ресурс, в оперативную память загружена необ­ходимая страница виртуальной памяти и т. д.) процесс деблокируется и перево­дится в состояние готовности к исполнению.

Таким образом, движущей силой, меняющей состояния процессов, являются со­бытия. Один из основных видов событий - это прерывания.

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

хорошую работу на сайт">

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

1 . Процессы

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

Состояния процесса

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

Процесс находится в состоянии выполнения, если в данный момент ему выделен центральный процессор (ЦП).

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

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

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

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

Рассмотрим диаграмму переходов процесса X из состояния в состояние - смену состояний процесса.

Запуск, или выбор процесса для выполнения - это предоставление ЦП первому процессу из списка готовых процессов. Запуск осуществляется с помощью программы - диспетчер. Обозначим такую смену состояний следующим образом: операционная система linux

Для предотвращения монопольного захвата ресурсов ЦП одним процессом, ОС устанавливает в специальном таймере прерываний определенный временной интервал, который отводится для данного процесса, по истечении кванта времени, таймер вырабатывает сигнал прерывания, по которому управление передается ОС и процесс переводится из состояния выполнения в состояние готовности, а первый процесс из списка готовых - в состояние выполнения.

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

Пробуждение процесса осуществляется тогда, когда происходит какое-либо событие, ожидаемое процессом, и он переходит из состояния блокировки в состояние готовности. Так в выше описанном случае, после завершения операции ввода-вывода.

Итак, мы определили четыре возможные смены состояния процесса.

Отметим, что единственная смена состояния, инициируемая самим процессом - это блокирование, остальные инициируются объектами, внешними по отношению к данному процессу.

Операции над процессами

Системы, управляющие процессами, должны иметь возможность выполнять над ними ряд операций.

Создание процесса. операционная система linux

Создание процесса включает присвоение имени процессу; включение его имени в список имен процессов; определение начального приоритета процесса; формирование блока управления процессом РСВ; выделение процессу начальных ресурсов.

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

ОС UNIX, являясь в своей основе средством управления процессами, сама по себе может рассматриваться как система параллельных взаимодействий процессов с древовидной структурой. Общий прародитель всех процессов в ОС UNIX - процесс init, находится в вершине генеалогического дерева, этот процесс постоянно присутствует в системе, все другие процессы порождаются по унифицированной схеме с помощью системного вызова fork().

Каждому созданному процессу UNIX назначает уникальный идентификатор процесса - PID , который идентифицирует процесс для ОС. Кроме того, каждый процесс имеет еще PPID (parent process), который представляет собой не что иное как PID его родителя.

Используя в UNIX команду ps можно видеть идентификаторы текущих процессов в системе.

Уничтожение процесса.

При уничтожении процесса, ресурсы ему выделенные передаются системе, имя из любых списков и таблиц удаляется, а блок управления процессом освобождается.

Приостановка процесса.

Приостановленный процесс может продолжить свое выполнение тогда, когда его активизирует какой-либо другой процесс.

Возобновление процесса.

Операция подготовки процесса к повторному запуску с той точки, в которой он был приостановлен, называется - возобновлением.

Изменение приоритета процесса.

Эта операция означает модификацию значения приоритета процесса в РСВ.

Кроме того, используются операции блокирования, пробуждения и запуска процесса.

С учетом введенных понятий приостановки и возобновления процесса картина смены состояний процесса, приведенная на рис.1 может быть несколько дополнена.

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

Блок управление процессом

Блок управления процессом (РСВ - process control block) - это объект, который определяет процесс для операционной системы и является структурой данных, сосредотачивающей всю ключевую информацию о процессе:

текущее состояние процесса;

уникальный идентификатор процесса;

приоритет процесса;

указатели памяти процесса;

указатели выделенных процессу ресурсов;

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

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

Дескриптор и контекст процесса. Системные данные, используемые для идентификации процесса, которые существуют в течение всего времени его жизни, образуют дескриптор (описатель) процесса. Множество дескрипторов образуют таблицу процессов - в современных версиях UNIX это несколько сотен процессов.

Дескриптор процесса содержит следующие параметры процесса:

расположение (адрес в памяти);

размер выгружаемой части образа процесса;

идентификатор процесса и пользователя.

Другая важная информация о процессе хранится в таблице пользователя (называемой также - контекст процесса), здесь записаны:

идентификационные номера пользователей, для определения привилегий доступа к файлам;

ссылки на системную таблицу файлов для всех открытых процессом файлов;

указатель на индексный дескриптор текущего каталога в таблице индексных дескрипторов;

список реакций на различные сигналы.

Обработка прерываний

Прерывание( interrupt) - это событие, при котором меняется нормальная последовательность команд, выполняемых процессором. Если произошло прерывание, то

управление передается ОС;

ОС запоминает состояние прерванного процесса;

ОС анализирует тип прерывания и передает управление соответствующей программе обработки прерывания.

Рассмотрим основные типы прерываний.

SVС(supervisor call instruction)-прерывания.

Инициатором этих прерываний является работающий процесс, который выполняет команду SVС, т.е. генерируемый программой пользователя запрос на предоставление конкретной системной услуги (например, на выполнение операции ввода-вывода, на увеличение размера выделенной памяти и т.п.). Механизм SVC позволяет защитить ОС от пользователей.

Прерывания ввода-вывода.

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

Внешние прерывания.

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

Прерывания по рестарту.

Эти прерывания происходят по команде рестарта ОС.

Прерывания по контролю программы.

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

Прерывания по контролю машины.

Эти прерывания вызываются аппаратными ошибками.

Переключение контекста

Процедуру обработки прерываний, в зависимости от их типа, выполняют входящие в состав ОС соответствующие программы - обработчики прерываний ( IH - interrupt handler).

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

При реализации этого способа используются слова состояния программы PSW(program status word), которые управляют порядком выполнения команд и сожержат ряд сведений о состоянии процесса.

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

Когда происходит прерывание, то в первую очередь проверяется не является ли оно запрещенным (тогда оно либо задерживается либо игнорируется). Если прерывание является разрешенным, то аппаратурно производится следующее переключение PSW:

текущее PSW становится старым PSW для прерывания этого типа;

новое PSW для прерывания этого типа становится текущим PSW.

После такого замещения слов состояния, текущее PSW содержит адрес соответствующего обработчика прерываний, который начинает обрабатывать данное прерывание. Когда обработка прерывания завершается, ЦП начинает обслуживать либо тот процесс, который выполнялся в момент прерывания, либо готовый процесс с наивысшим приоритетом.

Описанная схема обработки прерываний не является единственно возможной.

Ядро операционной системы

Все операции, связанные с процессами, выполняются под управлением той части ОС, которая называется ядро.

Ядро обычно размещается в оперативной памяти, в то время как другие части ОС перемещаются во внешнюю память и обратно по мере необходимости.

Функции ядра

Ядро ОС, как правило, должно содержать программы для реализации следующих функций:

обработка прерываний;

операции над процессами;

синхронизация процессов;

организация взаимодействия между процессами;

манипулирование блоками управления процессами;

поддержка операций ввода-вывода;

поддержка работы файловой системы;

поддержка механизма вызова-возврата при обращении к процедурам;

ряд учетных функций.

Иерархический подход к процессу проектирования ОС заключается в следующем.

В основе иерархии находится аппаратура компьютера, так называемая “чистая машина”.

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

Эти дополнительные функции, реализуемые при помощи ядра, часто называют примитивами(primitives).

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

На вершине иерархии располагаются сами процессы пользователей.

Опыт создания ОС показывает, что такие иерархические системы легче отлаживать, модифицировать и тестировать, чем такие, когда функции ядра

распределяются на нескольких уровнях иерархии.

Архитектура ОС Linux

Достаточно широкое растространение в настоящее время получила система Linux (автор базовой версии Линус Торвальдс). Усиление влияния Linux подтвердилось в очередной раз на выставке LinuxWorldExpo в начале февраля 2000 года в Нью-Йорке. В IBM активно разрабатываются приложения для Linux, что подтверждает высокую оценку этой ОС. “Сегодня Linux развивается такими же быстрыми темпами, как Internet в начале 90-х годов, а популярность ее даже выше, чем популярность электронного бизнеса”,- заметил Ирвинг Владавски-Бергер, вице-президент подразделения IBM Enterprise System Group . Аппаратные требования Linux минимальны, пожалуй только MS DOS является менее требовательной к аппаратуре компьютера, чем Linux. Запустить Linux можно даже на 386SX/16, 1Mб ОП, но это тот минимум, который только даст возможность убедиться в работоспособности системы. Базовый набор команд, утилит администрирования и командный интерпретатор займут 10 Мб.

Linux может “сожительствовать” на компьютере с другими системами, например, с MS DOS, MS Windows или OS/2, в этом случае каждая из систем должна располагаться в отдельном разделе диска, а при запуске компьютера будет предложена альтернатива запуска той или иной ОС.

Linux является UNIX- подобной системой, и, поэтому принципы ее архитектуры мало чем отличаются от стандартой UNIX. Самый общий взгляд позволяет увидеть двухуровневую модель системы, как она представлена на рис. А.

В центре находится ядро системы. Ядро непосредственно взаимодействует в аппаратной частью компьютера, изолируя прикладные программы от особенностей ее архитектуры. Ядро имеет набор услуг, предоставляемых прикладным программам. К услугам ядра относятся:

операции ввода/вывода (открытия, чтения, записи и управления файлами),

создание и управление процессами, их синхронизация и межпроцессные взаимодействия.

Все приложения запрашивают услуги ядра посредством системных вызовов.

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

Ядро системы

Ядро обеспечивает базовую функциональность ОС: создает процессы и управляет ими, распределяет память и обеспечивает доступ к файлам и периферийным устройствам.

Взаимодействие прикладных задач с ядром происходит посредством стандартного интерфейса системных вызовов. Интерфейс системных вызовов представляет собой набор услуг ядра и определяет формат запросов на услуги. Процесс запрашивает услугу посредством системного вызова определенной процедуры ядра, внешне похожего на вызов обычной библиотечной функции.

Ядро состоит из трех основных подсистем:

файловая подсистема;

подсистема управления процессами и памятью;

подсистема ввода/вывода.

Файловая подсистема

Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Одни и те же функции open(2), read(2), write(2) могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или терминал.

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

Файловая подсистема обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.

Подсистема управления процессами

Запущенная на выполнение программа порождает в системе один или более процессов, в задачи подсистемы управления процессами входит:

создание и удаление процессов;

распределение системных ресурсов (памяти, вычислительных ресурсов) между процессами;

синхронизация процессов;

межпроцессное взаимодействие.

Планировщик процессов(scheduler) - специальный модуль ядра, который разрешает конфликты между процессами и конкуренцию за системные ресурсы. Планировщик запускает процесс на выполнение, следя за тем, чтобы процесс монопольно не захватил разделяемые ресурсы. Процесс освобождает процессор, ожидая длительной операции ввода/вывода, или по прошествии кванта времени. В этом случае планировщик выбирает следующий процесс с наивысшим приоритетом.

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

Модуль межпроцесcного взаимодействия отвечает за уведомление процессов о событиях с помощью сигналов и обеспечивает возможность обмена данными между различными процессами.

Подсистема ввода/вывода

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

2. Вопросы

Дайте определения следующих терминов: программа, процедура, процесс, процессор.

Почему обычно нецелесообразно устанавливать приоритетный порядок для списка заблокированных процессов?

Опишите четыре основные смены состояний процесса.

Опишите смены состояний процесса с учетом операций приостановки и возобновления.

Какую информацию о процессе содержит PCB?

Перечислите основные типы прерываний и приведите пример каждого типа прерывания.

Опишите суть способа переключения контекста.

Дайте определение ядра ОС и назовите его основные функции.

Определите структуру ядра Linux.

В чем состоит назначение файловой подсистемы?

В чем состоит назначение подсистемы управления процессами?

Каковы основные функции подсистемы ввода/вывода?

Определите понятие - примитивы.

В чем особенность иерархического подхода к проектированию ОС?

Размещено на Allbest.ru

Подобные документы

    История создания, архитектура операционной системы и перечень возможностей, реализуемых в Linux. Инструментальные средства и цикл разработки новой версии ядра. Жизненный цикл патча. Структура принятия решений при добавлении новых функций (патчей) в ядро.

    лекция , добавлен 29.07.2012

    Анализ серверных операционных систем на базе ядра Linux. Подходы к построению маршрутизации и оценка полученных результатов. Установка операционной системы CentOS 6.6 и закономерности ее настройки. Принципы и основные этапы тестирования созданного шлюза.

    курсовая работа , добавлен 19.11.2015

    Общая организация файловой системы. Виртуальные страницы. Команды для работы с ФС. Способы организации файлов. Системные вызовы управления процессами. Алгоритм работы планировщика процессов. Мультипрограммный режим работы ОС. Структура ядра системы.

    курсовая работа , добавлен 23.03.2015

    Изучение механизма работы программных инструментов как трудная часть отладочного процесса. Отладчики пользовательского режима, их основные типы. Автоматический запуск приложений в отладчике. Быстрые клавиши прерываний. Отладка ядра операционной системы.

    реферат , добавлен 25.11.2016

    Структурная организация операционной системы на основе различных программных модулей. Функции, выполняемые модулями ядра. Модули операционной системы, оформленные в виде утилит. Ядро в привилегированном режиме. Многослойная структура ядра системы.

    презентация , добавлен 16.01.2012

    Создание программного продукта, предназначенного для небольшой сети с оптимизацией ее работы на платформе операционной системы Linux; администрирование. Разработка модуля протоколов управления; методика тестирования подсистемы; системотехнический анализ.

    дипломная работа , добавлен 27.06.2012

    Изучение операционной системы Linux: элементов файлов, структуры каталогов и прав доступа к ним. Получение практических навыков по работе с некоторыми командами данной ОС. Теоретические сведения и практические навыки по работе с процессами Linux.

    лабораторная работа , добавлен 16.06.2011

    Основные моменты истории операционных систем, связывающих аппаратное обеспечение и прикладные программы. Характеристика операционной системы Microsoft Windows Seven, анализ операционной системы Linux. Преимущества и недостатки каждой операционной системы.

    курсовая работа , добавлен 07.05.2011

    История развития и версии Linux. Ключевые черты, преимущества и сравнительные характеристики операционной системы. Программные характеристики, основные причины успеха и бурного развития Linux. Главные проблемы распространения операционной системы.

    курсовая работа , добавлен 13.12.2011

    Особенности архитектуры MIPS компании MIPS Technology. Иерархия памяти. Обработка команд перехода. Адресная очередь. Переименование регистров. Обоснование выбора операционной системы. Perl-эмулятор и сборка ядра. Электрическая и пожарная безопасность.

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

операционная система прекращает его деятельность;

он не может продолжать свою работу, пока не произойдет некоторое событие, и операционная система переводит его в состояние ожидание;

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

Из состояния ожидание процесс попадает в состояние готовность после того, как ожидаемое событие произошло, и он снова может быть выбран для исполнения.

Наша новая модель хорошо описывает поведение процессов во время их существования, но она не акцентирует внимания на появлении процесса в системе и его исчезновении. Для полноты картины нам необходимо ввести еще два состояния процессов: рождение и закончил исполнение (см. рис. 2.3 ).

Рис. 2.3. Диаграмма состояний процесса, принятая в курсе

Теперь для появления в вычислительной системе процесс должен пройти через состояние рождение. При рождении процесс получает в свое распоряжение адресное пространство, в которое загружается программный код процесса; ему выделяются стек и системные ресурсы; устанавливается начальное значение программного счетчика этого процесса и т. д. Родившийся процесс переводится в состояние готовность. При завершении своей деятельности процесс из состояния исполнение попадает в состояние закончил исполнение.

В конкретных операционных системах состояния процесса могут быть еще более детализированы, могут появиться некоторые новые варианты переходов из одного состояния в другое. Так, например, модель состояний процессов для операционной системы Windows NT содержит 7 различных состояний, а для операционной системы Unix – 9. Тем не менее так или иначе, все операционные системы подчиняются изложенной выше модели.

Операции над процессами и связанные с ними понятия

Набор операций

Процесс не может перейти из одного состояния в другое самостоятельно. Изменением состояния процессов занимается операционная система, совершая операции над ними. Количество таких операций в нашей модели пока совпадает с количеством стрелок на диаграмме состояний. Удобно объединить их в три пары:

создание процесса – завершение процесса;

Основы операционных систем

приостановка процесса (перевод из состояния исполнение в состояние готовность) – запуск процесса (перевод из состояния готовность в состояние исполнение);

блокирование процесса (перевод из состояния исполнение в состояние ожидание) – разблокирование процесса (перевод из состояния ожидание в состояние готовность).

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

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

Process Control Block и контекст процесса

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

состояние, в котором находится процесс;

программный счетчик процесса или, другими словами, адрес команды, которая должна быть выполнена для него следующей;

содержимое регистров процессора;

данные, необходимые для планирования использования процессора и управления памятью (приоритет процесса, размер и расположение адресного пространства и т. д.);

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

сведения об устройствах ввода-вывода, связанных с процессом (например, какие устройства закреплены за процессом, таблицу открытых файлов).

Ее состав и строение зависят, конечно, от конкретной операционной системы. Во многих операционных системах информация, характеризующая процесс, хранится не в одной, а в нескольких связанных структурах данных. Эти структуры могут иметь различные наименования, содержать дополнительную информацию или, наоборот, лишь часть описанной информации. Для нас это не имеет значения. Для нас важно лишь то, что для любого процесса, находящегося в вычислительной системе, вся информация, необходимая для совершения операций над ним, доступна операционной системе. Для простоты изложения будем считать, что она хранится в одной структуре данных. Мы будем называть ее PCB (Process Control Block) или блоком управления процессом. Блок управления процессом является моделью процесса для операционной системы. Любая операция, производимая операционной системой над процессом, вызывает определенные изменения в PCB. В рамках принятой модели состояний процессов содержимое PCB между операциями остается постоянным.

Информацию, для хранения которой предназначен блок управления процессом, удобно для дальнейшего изложения разделить на две части. Содержимое всех регистров процессора (включая значение программного счетчика) будем называть регистровым контекстом процесса, а все остальное – системным контекстом процесса. Знания регистрового и системного контекстов процесса достаточно для того, чтобы управлять его работой в операционной системе, совершая над ним операции. Однако этого недостаточно для того, чтобы полностью охарактеризовать процесс. Операционную систему не интересует, какими именно вычислениями занимается процесс, т. е. какой код и какие данные находятся в его адресном пространстве. С точки зрения пользователя, наоборот, наибольший интерес представляет содержимое адресного пространства процесса, возможно, наряду с регистровым контекстом определяющее последовательность преобразования данных и полученные результаты. Код и данные, находящиеся в адресном пространстве процесса, будем называть его пользовательским контекстом. Совокупность регистрового, системного и пользовательского контекстов процесса для краткости принято называть просто контекстом процесса. В любой момент времени процесс полностью характеризуется своим контекстом.


Основы операционных систем

Одноразовые операции

Сложный жизненный путь процесса в компьютере начинается с его рождения. Любая операционная система, поддерживающая концепцию процессов, должна обладать средствами для их создания. В очень простых системах (например, в системах, спроектированных для работы только одного конкретного приложения) все процессы могут быть порождены на этапе старта системы. Более сложные операционные системы создают процессы динамически, по мере необходимости. Инициатором рождения нового процесса после старта операционной системы может выступить либо процесс пользователя, совершивший специальный системный вызов, либо сама операционная система, то есть, в конечном итоге, тоже некоторый процесс. Процесс, инициировавший создание нового процесса, принято называть процессомродителем (parent process), а вновь созданный процесс – процессом-ребенком (child process). Процессыдети могут в свою очередь порождать новых детей и т. д., образуя, в общем случае, внутри системы набор генеалогических деревьев процессов – генеалогический лес. Пример генеалогического леса изображен нарисунке 2.4 . Следует отметить, что все пользовательские процессы вместе с некоторыми процессами операционной системы принадлежат одному и тому же дереву леса. В ряде вычислительных систем лес вообще вырождается в одно такое дерево.

Рис. 2.4. Упрощенный генеалогический лес процессов. Стрелочка означает отношение родитель–ребенок

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

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

После наделения процесса-ребенка ресурсами необходимо занести в его адресное пространство программный код, значения данных, установить программный счетчик. Здесь также возможны два решения. В первом случае процесс-ребенок становится дубликатом процесса-родителя по регистровому и пользовательскому контекстам, при этом должен существовать способ определения, кто для кого из процессовдвойников является родителем. Во втором случае процесс-ребенок загружается новой программой из ка- кого-либо файла. Операционная система Unix разрешает порождение процесса только первым способом; для запуска новой программы необходимо сначала создать копию процесса-родителя, а затем процессребенок должен заменить свой пользовательский контекст с помощью специального системного вызова. Операционная система VAX/VMS допускает только второе решение. В Windows NT возможны оба варианта (в различных API).

Порождение нового процесса как дубликата процесса-родителя приводит к возможности существования программ (т. е. исполняемых файлов), для работы которых организуется более одного процесса. Возможность замены пользовательского контекста процесса по ходу его работы (т. е. загрузки для исполнения

Основы операционных систем

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

После того как процесс наделен содержанием, в PCB дописывается оставшаяся информация, и состояние нового процесса изменяется на готовность. Осталось сказать несколько слов о том, как ведут себя про- цессы-родители после рождения процессов-детей. Процесс-родитель может продолжать свое выполнение одновременно с выполнением процесса-ребенка, а может ожидать завершения работы некоторых или всех своих "детей".

Мы не будем подробно останавливаться на причинах, которые могут привести к завершению жизненного цикла процесса. После того как процесс завершил свою работу, операционная система переводит его в состояние закончил исполнение и освобождает все ассоциированные с ним ресурсы, делая соответствующие записи в блоке управления процессом. При этом сам PCB не уничтожается, а остается в системе еще некоторое время. Это связано с тем, что процесс-родитель после завершения процесса-ребенка может запросить операционную систему о причине "смерти" порожденного им процесса и/или статистическую информацию о его работе. Подобная информация сохраняется в PCB отработавшего процесса до запроса процесса-родителя или до конца его деятельности, после чего все следы завершившегося процесса окончательно исчезают из системы. В операционной системе Unix процессы, находящиеся в состоянии закончил исполнение, принято называть процессами-зомби.

Следует заметить, что в ряде операционных систем (например, в VAX/VMS) гибель процесса-родителя приводит к завершению работы всех его "детей". В других операционных системах (например, в Unix) процессы-дети продолжают свое существование и после окончания работы процесса-родителя. При этом возникает необходимость изменения информации в PCB процессов-детей о породившем их процессе для того, чтобы генеалогический лес процессов оставался целостным. Рассмотрим следующий пример. Пусть процесс с номером 2515 был порожден процессом с номером 2001 и после завершения его работы остается в вычислительной системе неограниченно долго. Тогда не исключено, что номер 2001 будет использован операционной системой повторно для совсем другого процесса. Если не изменить информацию о процессе-родителе для процесса 2515, то генеалогический лес процессов окажется некорректным – процесс 2515 будет считать своим родителем новый процесс 2001, а процесс 2001 будет открещиваться от нежданного потомка. Как правило, "осиротевшие" процессы "усыновляются" одним из системных процессов, который порождается при старте операционной системы и функционирует все время, пока она работает.

Многоразовые операции

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

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

Запуск процесса. Из числа процессов, находящихся в состоянии готовность, операционная система выбирает один процесс для последующего исполнения. Критерии и алгоритмы такого выбора будут подробно рассмотрены в лекции 3 – "Планирование процессов". Для избранного процесса операционная система обеспечивает наличие в оперативной памяти информации, необходимой для его дальнейшего выполнения. То, как она это делает, будет в деталях описано в лекциях 8-10. Далее состояние процесса изменяется на исполнение, восстанавливаются значения регистров для данного процесса и управление передается команде, на которую указывает счетчик команд процесса. Все данные, необходимые для восстановления контекста, извлекаются из PCB процесса, над которым совершается операция.

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

Основы операционных систем

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

Блокирование процесса. Процесс блокируется, когда он не может продолжать работу, не дождавшись возникновения какого-либо события в вычислительной системе. Для этого он обращается к операционной системе с помощью определенного системного вызова. Операционная система обрабатывает системный вызов (инициализирует операцию ввода-вывода, добавляет процесс в очередь процессов, дожидающихся освобождения устройства или возникновения события, и т. д.) и, при необходимости сохранив нужную часть контекста процесса в его PCB, переводит процесс из состояния исполнение в состояние ожидание. Подробнее эта операция будет рассматриваться в лекции 13.

Разблокирование процесса. После возникновения в системе какого-либо события операционной системе нужно точно определить, какое именно событие произошло. Затем операционная система проверяет, находился ли некоторый процесс в состоянии ожидание для данного события, и если находился, переводит его в состояние готовность, выполняя необходимые действия, связанные с наступлением события (инициализация операции ввода-вывода для очередного ожидающего процесса и т. п.). Эта операция, как и операция блокирования, будет подробно описана в лекции 13.

Переключение контекста

До сих пор мы рассматривали операции над процессами изолированно, независимо друг от друга. В действительности же деятельность мультипрограммной операционной системы состоит из цепочек операций, выполняемых над различными процессами, и сопровождается переключением процессора с одного процесса на другой.

Давайте для примера упрощенно рассмотрим, как в реальности может протекать операция разблокирования процесса, ожидающего ввода-вывода (см.рис. 2.5 ). При исполнении процессором некоторого процесса (на рисунке – процесс 1) возникает прерывание от устройства ввода-вывода, сигнализирующее об окончании операций на устройстве. Над выполняющимся процессом производится операция приостановки. Далее операционная система разблокирует процесс, инициировавший запрос на ввод-вывод (на рисунке – процесс 2) и осуществляет запуск приостановленного или нового процесса, выбранного при выполнении планирования (на рисунке был выбран разблокированный процесс). Как мы видим, в результате обработки информации об окончании операции ввода-вывода возможна смена процесса, находящегося в состоянии исполнение.

Рис. 2.5. Выполнение операции разблокирования процесса. Использование термина "код пользователя" не ограничивает общности рисунка только пользовательскими процессами


Основы операционных систем

Для корректного переключения процессора с одного процесса на другой необходимо сохранить контекст исполнявшегося процесса и восстановить контекст процесса, на который будет переключен процессор. Такая процедура сохранения/восстановления работоспособности процессов называется переключением контекста. Время, затраченное на переключение контекста, не используется вычислительной системой для совершения полезной работы и представляет собой накладные расходы, снижающие производительность системы. Оно меняется от машины к машине и обычно колеблется в диапазоне от 1 до 1000 микросекунд. Существенно сократить накладные расходы в современных операционных системах позволяет расширенная модель процессов, включающая в себя понятие threads of execution (нити исполнения или просто нити). Подробнее о нитях исполнения мы будем говорить в лекции 4 – "Кооперация процессов и основные аспекты ее логической организации".

Заключение

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

Процессы могут находиться в пяти основных состояниях: рождение, готовность, исполнение, ожидание, закончил исполнение. Из состояния в состояние процесс переводится операционной системой в результате выполнения над ним операций. Операционная система может выполнять над процессами следующие операции: создание процесса, завершение процесса, приостановка процесса, запуск процесса, блокирование процесса, разблокирование процесса, изменение приоритета процесса. Между операциями содержимое PCB не изменяется. Деятельность мультипрограммной операционной системы состоит из цепочек перечисленных операций, выполняемых над различными процессами, и сопровождается процедурами сохранения/восстановления работоспособности процессов, т. е. переключением контекста. Переключение контекста не имеет отношения к полезной работе, выполняемой процессами, и время, затраченное на него, сокращает полезное время работы процессора.

3. Лекция: Планирование процессов

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

Я планов наших люблю громадьё...

В. В. Маяковский Чем тщательнее мы планируем свою деятельность, тем меньше времени остается на ее осуществление.

Из анналов Госплана

Всякий раз, когда нам приходится иметь дело с ограниченным количеством ресурсов и несколькими их потребителями, будь то фонд заработной платы в трудовом коллективе или студенческая вечеринка с несколькими ящиками пива, мы вынуждены заниматься распределением наличных ресурсов между потребителями или, другими словами, планированием использования ресурсов. Такое планирование должно иметь четко поставленные цели (чего мы хотим добиться за счет распределения ресурсов) и алгоритмы, соответствующие целям и опирающиеся на параметры потребителей. Только при правильном выборе критериев и алгоритмов можно избежать таких вопросов, как: "Почему я получаю в десять раз меньше, чем мой шеф?" или "А где мое пиво?". Настоящая лекция посвящена планированию исполнения процессов в мультипрограммных вычислительных системах или, иначе говоря, планированию процессов.

Уровни планирования

В первой лекции, рассматривая эволюцию компьютерных систем, мы говорили о двух видах планирования в вычислительных системах: планировании заданий и планировании использования процессора. Планирование заданий появилось в пакетных системах после того, как для хранения сформированных пакетов заданий начали использоваться магнитные диски. Магнитные диски, являясь устройствами пря-

Основы операционных систем

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

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

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

В некоторых вычислительных системах бывает выгодно для повышения производительности временно удалить какой-либо частично выполнившийся процесс из оперативной памяти на диск, а позже вернуть его обратно для дальнейшего выполнения. Такая процедура в англоязычной литературе получила название swapping, что можно перевести на русский язык как "перекачка", хотя в специальной литературе оно употребляется без перевода – свопинг. Когда и какой из процессов нужно перекачать на диск и вернуть обратно, решается дополнительным промежуточным уровнем планирования процессов – среднесрочным.

Критерии планирования и требования к алгоритмам

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

Справедливость – гарантировать каждому заданию или процессу определенную часть времени использования процессора в компьютерной системе, стараясь не допустить возникновения ситуации, когда процесс одного пользователя постоянно занимает процессор, в то время как процесс другого пользователя фактически не начинал выполняться.

Эффективность – постараться занять процессор на все 100% рабочего времени, не позволяя ему простаивать в ожидании процессов, готовых к исполнению. В реальных вычислительных системах загрузка процессора колеблется от 40 до 90%.

Сокращение полного времени выполнения (turnaround time) – обеспечить минимальное время между стартом процесса или постановкой задания в очередь для загрузки и его завершением.

Основы операционных систем

Сокращение времени ожидания (waiting time) – сократить время, которое проводят процессы в состоянии готовность и задания в очереди для загрузки.

Сокращение времени отклика (response time) – минимизировать время, которое требуется процессу в интерактивных системах для ответа на запрос пользователя.

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

Были предсказуемыми. Одно и то же задание должно выполняться приблизительно за одно и то же время. Применение алгоритма планирования не должно приводить, к примеру, к извлечению квадратного корня из 4 за сотые доли секунды при одном запуске и за несколько суток – при втором запуске.

Были связаны с минимальными накладными расходами. Если на каждые 100 миллисекунд, выделенные процессу для использования процессора, будет приходиться 200 миллисекунд на определение того, какой именно процесс получит процессор в свое распоряжение, и на переключение контекста, то такой алгоритм, очевидно, применять не стоит.

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

Обладали масштабируемостью, т. е. не сразу теряли работоспособность при увеличении нагрузки. Например, рост количества процессов в системе в два раза не должен приводить к увеличению полного времени выполнения процессов на порядок.

Многие из приведенных выше целей и свойств являются противоречивыми. Улучшая работу алгоритма с точки зрения одного критерия, мы ухудшаем ее с точки зрения другого. Приспосабливая алгоритм под один класс задач, мы тем самым дискриминируем задачи другого класса. "В одну телегу впрячь не можно коня и трепетную лань". Ничего не поделаешь. Такова жизнь.

Параметры планирования

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

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

К статическим параметрам вычислительной системы можно отнести предельные значения ее ресурсов (размер оперативной памяти, максимальное количество памяти на диске для осуществления свопинга, количество подключенных устройств ввода-вывода и т. п.). Динамические параметры системы описывают количество свободных ресурсов на данный момент.

К статическим параметрам процессов относятся характеристики, как правило присущие заданиям уже на этапе загрузки.

Каким пользователем запущен процесс или сформировано задание.

Насколько важной является поставленная задача, т. е. каков приоритет ее выполнения.

Сколько процессорного времени запрошено пользователем для решения задачи.

Каково соотношение процессорного времени и времени, необходимого для осуществления операций ввода-вывода.

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

Алгоритмы долгосрочного планирования используют в своей работе статические и динамические параметры вычислительной системы и статические параметры процессов (динамические параметры процессов на этапе загрузки заданий еще не известны). Алгоритмы краткосрочного и среднесрочного планиро-


Основы операционных систем

вания дополнительно учитывают и динамические характеристики процессов. Для среднесрочного планирования в качестве таких характеристик может использоваться следующая информация:

сколько времени прошло с момента выгрузки процесса на диск или его загрузки в оперативную память;

сколько оперативной памяти занимает процесс;

сколько процессорного времени уже предоставлено процессу.

Рис. 3.1. Фрагмент деятельности процесса с выделением промежутков непрерывного использования процессора и ожидания ввода-вывода

Для краткосрочного планирования нам понадобится ввести еще два динамических параметра. Деятельность любого процесса можно представить как последовательность циклов использования процессора и ожидания завершения операций ввода-вывода. Промежуток времени непрерывного использования процессора носит название CPU burst, а промежуток времени непрерывного ожидания ввода-вывода – I/O burst. Нарисунке 3.1. показан фрагмент деятельности некоторого процесса на псевдоязыке программирования с выделением указанных промежутков. Для краткости мы будем использовать термины CPU burst и I/O burst без перевода. Значения продолжительности последних и очередных CPU burst и I/O burst являются важными динамическими параметрами процесса.

Вытесняющее и невытесняющее планирование

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

1. Когда процесс переводится из состояния исполнение в состояние закончил исполнение.

2. Когда процесс переводится из состояния исполнение в состояние ожидание.

3. Когда процесс переводится из состояния исполнение в состояние готовность (например, после прерывания от таймера).

4. Когда процесс переводится из состояния ожидание в состояние готовность (завершилась операция ввода-вывода или произошло другое событие). Подробно процедура такого перевода рассматривалась в лекции 2 (раздел "Переключение контекста"), где мы показали, почему при этом возникает возможность смены процесса, находящегося в состоянии исполнение.

В случаях 1 и 2 процесс, находившийся в состоянии исполнение, не может дальше исполняться, и операционная система вынуждена осуществлять планирование выбирая новый процесс для выполнения. В случаях 3 и 4 планирование может как проводиться, так и не проводиться, планировщик не вынужден обязательно принимать решение о выборе процесса для выполнения, процесс, находившийся в состоянии исполнение может просто продолжить свою работу. Если в операционной системе планирование осуществляется только в вынужденных ситуациях, говорят, что имеет место невытесняющее (nonpreemptive) планирование. Если планировщик принимает и вынужденные, и невынужденные решения, говорят о вытесняющем (preemptive) планировании. Термин "вытесняющее планирование" возник потому, что исполняющийся процесс помимо своей воли может быть вытеснен из состояния исполнение другим процессом.

Основы операционных систем

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

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

Алгоритмы планирования

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

First-Come, First-Served (FCFS)

Простейшим алгоритмом планирования является алгоритм, который принято обозначать аббревиатурой FCFS по первым буквам его английского названия – First-Come, First-Served (первым пришел, первым обслужен). Представим себе, что процессы, находящиеся в состоянии готовность, выстроены в очередь. Когда процесс переходит в состояние готовность, он, а точнее, ссылка на его PCB помещается в конец этой очереди. Выбор нового процесса для исполнения осуществляется из начала очереди с удалением оттуда ссылки на его PCB. Очередь подобного типа имеет в программировании специальное наименование

– FIFO1) , сокращение от First In, First Out (первым вошел, первым вышел).

Такой алгоритм выбора процесса осуществляет невытесняющее планирование. Процесс, получивший в свое распоряжение процессор, занимает его до истечения текущего CPU burst. После этого для выполнения выбирается новый процесс из начала очереди.

Таблица 3.1.

Преимуществом алгоритма FCFS является легкость его реализации, но в то же время он имеет и много недостатков. Рассмотрим следующий пример. Пусть в состоянии готовность находятся три процесса p0 , p1 и p2 , для которых известны времена их очередных CPU burst. Эти времена приведены втаблице 3.1. в некоторых условных единицах. Для простоты будем полагать, что вся деятельность процессов ограничивается использованием только одного промежутка CPU burst, что процессы не совершают операций вво- да-вывода и что время переключения контекста так мало, что им можно пренебречь.

Если процессы расположены в очереди процессов, готовых к исполнению, в порядке p0 , p1 , p2 , то картина их выполнения выглядит так, как показано нарисунке 3.2 . Первым для выполнения выбирается процесс p0 , который получает процессор на все время своего CPU burst, т. е. на 13 единиц времени. После его окончания в состояние исполнение переводится процесс p1 , он занимает процессор на 4 единицы времени. И, наконец, возможность работать получает процесс p2 . Время ожидания для процесса p0 составляет 0