Операционная система — концепции процессов: 03

3.1 Введение

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

3.2 Процессы

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

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

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

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

– новый: процесс создается.

– running: Инструкции выполняются.

– ожидание: процесс ожидает наступления некоторого события.

– готово: процесс ожидает назначения процессору. — завершено: процесс завершил выполнение.

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

Рис. 4.1 Диаграмма перехода состояний процесса (Источник: [2])

3.4 Блок управления технологическим процессом (PCB)

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

- Состояние процесса — Текущее состояние процесса.

- Program counter — Адрес следующей инструкции для выполнения

- Регистры ЦП o Аккумуляторы, индексные регистры, указатель стека, регистры общего назначения

- Информация о планировании ЦП o Приоритет процесса, параметры планирования

- Информация об управлении памятью o Значение базовых и предельных регистров

- Учетная информация o Объем используемого ЦП, ограничения по времени, номера процессов

- Информация о состоянии ввода/вывода o Список устройств ввода/вывода, выделенных для процесса, список открытых файлов и т.д.

Рис. 4.3 Переключение ЦП с процесса на процесс (Источник: [2])

3.5 Планирование процесса

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

3.5.1 Очереди планирования процессов

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

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

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

Рис. 4.4 Очередь готовности и различные очереди устройств ввода-вывода (Источник: [2])

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

Рис. 4.5 Представление схемы очередей для планирования процессов (Источник: [1])

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

• Процесс может запросить ввод-вывод и может быть помещен в очередь ввода-вывода. После завершения ввода-вывода процесс возвращается в очередь готовности.

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

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

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

3.5.2 Планировщики

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

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

Рис. 4.6 Среднесрочное планирование (Источник: [2])

Некоторые операционные системы, такие как системы с разделением времени, вводят дополнительный промежуточный уровень планирования, называемый среднесрочным планированием. Любой процесс, который находится в состоянии выполнения, должен храниться в основной памяти. Такой процесс может не находиться в запущенном состоянии в течение всего времени своего существования до его завершения. Он может перейти в состояние ожидания или в очередь готовности, а затем вернуться в рабочее состояние и так далее. Более того, когда один процесс переходит в состояние ожидания или в очередь готовности, другой процесс переходит в состояние выполнения. Процесс, который в данный момент находится в состоянии выполнения, должен храниться в основной памяти. Если много процессов находятся в состоянии ожидания или в очереди готовности и если все процессы все еще хранятся в основной памяти, основной памяти может не хватить для размещения текущего запущенного процесса. Когда в основной памяти недостаточно места, среднесрочный планировщик удаляет эти частично выполненные процессы из основной памяти и перемещает их в область подкачки на вторичном запоминающем устройстве. Позже, когда в основной памяти есть место, процессы могут быть перенесены в память и будут продолжаться с того места, где они остановились. Этот процесс также известен как обмен. На рис. 4.6 показано, как работает среднесрочный планировщик.

3.5.3 Контекст процесса

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

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

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

Операционная система должна поддерживать создание и завершение процессов.

3.6.1 Создание процесса

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

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

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

3.6.2. Создание процесса в UNIX

Системный вызов fork используется для создания нового процесса в UNIX. Адресное пространство дочернего процесса является копией адресного пространства родительского процесса. Если дочерний процесс должен выполнить какую-либо программу, отличную от программы, которую выполняет родитель, используется системный вызов exec. Системный вызов exec, используемый после ветвления, заменяет пространство памяти дочернего процесса новой программой. На рис. 4.7 показан поток родительского и дочернего процессов после вызова ветвления родительским процессом. Родитель после создания дочернего элемента может даже дождаться его выхода с помощью системного вызова wait. В UNIX родитель может даже выбрать выход, не дожидаясь выхода потомка.

3.7 Резюме

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

использованная литература

[1] http://www.wiley.com/college/silberschatz6e/0471417432/slides/slides.html

[2] Абрахам Зильбершатц, Питер Б. Гэлвин, Грег Гане, «Концепции операционной системы», шестое издание, John Wiley & Sons Inc., 2003.