СОСТОЯНИЯ ПРОЦЕССОВ
Описание процессов и управление ими
Архитектура операционной системы должна удовлетворять определенным требованиям. Все многозадачные операционные системы используют концепцию процесса — начиная с однопользовательских операционных систем, таких, как Windows 98, и заканчивая операционными системами для мейнфреймов, таких, как OS/390, которые способны поддерживать работу тысяч пользователей. Таким образом, основные требования, которым должны удовлетворять операционные системы, могут быть сформулированы с использованием понятия процесса.
• Операционная система должна чередовать выполнение нескольких процессов, чтобы повысить степень использования процессора при обеспечении разумного времени отклика.
• Операционная система должна распределять ресурсы между процессами в соответствии с заданной стратегией (т.е. предоставляя определенным функциям или приложениям более высокий приоритет), избегая в то же время взаимоблокировок.
• От операционной системы может потребоваться поддержка обмена информацией между процессами, а также обеспечение возможности создания процессов пользователями. Обе эти возможности могут помочь в структурировании приложений.
Подробное изучение операционных систем мы начнем со знакомства с представлением процессов и управлением ими. Для начала рассмотрим возможные состояния процессов, характеризующие их поведение; затем перейдем к структурам данных, которые нужны операционной системе для представления состояния и других характеристик процессов. И, наконец, будет рассмотрено управление процессами в операционной системе UNIX SVR4.
Примечание. При описании процессов в большинстве случаев в этой главе концепцию виртуальной памяти можно игнорировать, но при рассмотрении некоторых специализированных вопросов уместно обратить на нее особое внимание. Хотя подробно виртуальная память обсуждается только в главе 8, "Виртуальная память", краткий обзор приведен в главе 2, "Обзор операционных систем".
СОСТОЯНИЯ ПРОЦЕССОВ
Основной задачей процессора является выполнение машинных команд, которые находятся в основной памяти и составляют программу. В предыдущей главе объяснялось, что с целью повышения эффективности и облегчения процесса программирования процессор может одновременно выполнять несколько программ, чередуя их во времени.
В главе 2, "Обзор операционных систем" упоминалось, что для каждой программы, которая должна быть выполнена, создается свой процесс, или задание. С точки зрения процесса его работа состоит в выполнении определенного набора команд; последовательность выполнения этих команд задается адресами, которые заносятся в счетчик команд. Через некоторое время счетчик команд может адресовать код других программ, которые являются частями других процессов, но с точки зрения данной программы ее выполнение состоит из последовательного выполнения ее команд.
Поведение процесса можно охарактеризовать, последовательно перечислив выполненные в ходе его работы команды. Такой перечень выполненных команд процесса называется его следом (trace)2. Поведение процессора можно охарактеризовать, показав, как чередуются следы различных процессов.
1 Взаимоблокировки рассматриваются в главе в, "Взаимоблокировка и голодание". По сути, взаимоблокировка происходит тогда, когда каждый из двух процессов захватывает ресурсы, которые нужны другому процессу. Каждый из этих двух процессов может ждать освобождения нужных ему ресурсов до бесконечности.
2 Иногда в русскоязычной литературе используются термины траектория и трасса, — Прим, перев.
Рассмотрим очень простой пример. На рис. 3.1 показано расположение в памяти трех процессов. Чтобы упростить обсуждение, предположим, что виртуальная память не используется; таким образом, все три процесса представлены программами, которые полностью загружены в основную память. Кроме этих программ в памяти находится небольшая программа-диспетчер, выполняющая переключение с одного процесса на другой. В листинге 3.1 показаны следы трех рассматриваемых процессов на ранних стадиях их выполнения. Представлены первые 12 выполненных команд в процессах А и С; в процессе В выполнено четыре команды, и мы считаем, что эти команды включают в себя операцию ввода-вывода, завершения которой должен ожидать процесс.
Листинг 3.1. Следы процессов, изображенных на рис. 3.1
а) След | б) След | в) След |
процесса А | процесса В | процесса С |
5000 - начальный адрес процесса А
8000 - начальный адрес процесса В
12000 - начальный адрес процесса С
Теперь рассмотрим эти следы с точки зрения процессора. В листинге 3.2 показаны чередующиеся следы, получившиеся в результате выполнения первых 52 командных циклов (для удобства они пронумерованы). Предположим, что операционная система позволяет непрерывно выполнять не более шести командных циклов одного и того же процесса, после чего процесс прерывается — это предотвращает монопольное использование всего процессорного времени одним из процессов. Из листинга 3.2 видно, что после первых шести команд процесса А следует перерыв, в течение которого выполняется некоторый код диспетчера, состоящий из шести команд, после чего управление передается процессу В.3 Выполнив четыре команды, процесс В запрашивает операцию ввода-вывода и должен ожидать ее завершения. Поэтому процессор прекращает выполнять процесс Вис помощью диспетчера переходит к выполнению процесса С. После очередного перерыва процессор возобновляет выполнение процесса А. По истечении отведенного этому процессу времени процесс В все еще ожидает завершения операции ввода-вывода, поэтому диспетчер снова передает управление процессу С.
Листинг. 3.2. Составной след процессов, изображенных на рис. 3.1
---тайм-аут | |||
D0 | |||
D1 | |||
D2 | |||
--- тайм-аут | D3 | ||
D4 | |||
D5 | |||
100 - начальный адрес программы-диспетчера Заштрихованные области - выполнение команд диспетчера В первом столбце указаны номера командных циклов, во втором - адреса выполняемых команд
3 Указанное количество команд, выполняемых при работе процессов и диспетчера, намного меньше, чем в действительности; в этом учебном примере такое неправдоподобно маленькое число используется для упрощения рассмотрения.
Модель процесса с двумя состояниями
Основной задачей операционной системы является управление выполнением процессов; в эту задачу входит определение схемы чередования процессов и выделения им ресурсов. Первый шаг, который следует предпринять при составлении программы, предназначенной для управления процессами, состоит в описании ожидаемого поведения процессов.
Самую простую модель можно построить, исходя из того, что в любой момент времени процесс либо выполняется, либо не выполняется. Таким образом, процесс может быть в одном из двух состояний: выполняющийся или не выполняющийся (рис. 3.2,а). Создав новый процесс, операционная система вводит его в систему в состоянии не выполняющегося. Созданный процесс, о существовании которого известно операционной системе, ждет, пока он сможет быть запущен. Время от времени выполняющиеся процессы будут прерываться, и та часть операционной системы, которая выполняет функции диспетчера, будет выбирать для выполнения другой процесс. Выполняющийся перед этим процесс перейдет из состояния выполняющегося в состояние не выполняющийся, а в состояние выполняющегося перейдет один из ожидающих процессов.
Анализируя эту простую модель, можно сделать некоторые выводы относительно архитектуры операционной системы. Необходим способ, с помощью которого будет представлен каждый процесс, чтобы операционная система могла следить за ним. С каждым процессом нужно связать определенную информацию, в которую будет входить его текущее состояние и размещение в памяти. Не выполняющиеся процессы следует организовать в какую-то очередь, где они ожидали бы своего выполнения. Один из возможных вариантов предложен на рис. 3.2,6. Здесь имеется одна очередь, ее элементами являются указатели на процессы. Можно предложить и другую схему, в которой очередь состоит из связанного списка блоков данных, где каждый блок представляет отдельный процесс; позже мы вернемся к исследованию этой реализации.
Поведение диспетчера можно описать следующим образом. Процесс, работа которого прервана, переходит в очередь процессов, ожидающих выполнения. Если же процесс завершен, он выводится из системы. В любом случае для выполнения диспетчер выбирает из очереди следующий процесс.
Дата добавления: 2016-06-05; просмотров: 1632;