- •Часть2.
- •Путеводитель по части 2
- •Глава3. Описание процессов и управление ими
- •Глава 4. Потоки, симметричная мультипроцессорная обработка и микроядра
- •Глава 5. Параллельные вычисления: взаимоисключения и многозадачность
- •Глава 6. Взаимоблокировка и голодание
- •Глава3.
- •3.1. Состояния процессов
- •Биты режима работы
- •Коды условий
- •3.3. Управление процессами
- •3.4. Управление процессами
- •Зависят от используемого аппаратного обеспечения
- •3.5. Резюме, ключевые и контрольные вопросы
- •3.6. Рекомендуемая литература
- •3.7. Задачи
Зависят от используемого аппаратного обеспечения
Контекст системного уровня
Запись таблицы процессов Определяет состояние процесса; эта информация всегда доступна операционной системе
Пользовательская область Информация по управлению процессом, необходимая только в контексте данного процесса
Таблица областей процесса Задает отображение виртуальных адресов в физические; содержит также поле полномочий, в котором указывается тип доступа, на который процесс имеет право: только для чтения, для чтения и записи или для записи и выполнения
Стек ядра Содержит кадр стека процедур ядра при работе процесса в режиме ядра
В контекст пользовательского уровня (user-level context) входят основные элементы пользовательских программ; он может генерироваться непосредственно из скомпилированных объектных файлов. Каждая пользовательская программа разделена на две части, одна из которых размещается в текстовой области, а другая — в области данных. Текстовая область предназначена только для чтения; в ней хранятся команды пользовательских программ. Во время выполнения процессор использует пользовательский стек для вызовов и возвратов из процедур, а также для передачи параметров. Совместно используемая область памяти — это область данных, доступ к которой одновременно предоставляется различным процессам. Хотя в системе имеется только одна физическая копия совместно используемой области памяти, при использовании виртуальной памяти эта область находится в адресном пространстве каждого процесса, который ее использует.
Когда процесс не выполняется, соответствующая информация по состоянию процессора хранится в области контекста регистров (register context).
В контексте системного уровня (system-level context) находится остальная информация, которая нужна операционной системе для управления процессом. Эта информация состоит из статической части фиксированного размера, который остается неизменным на протяжении всего времени жизни процесса, и динамической части, размер которой меняется. Одним из компонентов статической части является запись таблицы процессов, которая фактически является частью таблицы процессов, поддерживаемой операционной системой, в которой каждому процессу соответствует одна запись. Запись таблицы процессов содержит информацию по управлению процессом, доступную ядру в любой момент времени. Таким образом, в системе виртуальной памяти все записи таблицы процессов постоянно остаются в основной памяти. В табл. 3.11 перечислены компоненты записи таблицы процессов. Пользовательская область содержит дополнительную управляющую информацию, которая нужна ядру при работе в контексте этого процесса; эта информация используется также при загрузке и выгрузке страниц процесса из основной памяти. В табл. 3.12 приведено содержимое этой таблицы
Таблица 3.11. Элемент таблицы процессов в системе UNIX
Состояние процесса |
Текущее состояние процесса |
Указатели |
Пользовательская область и область памяти процесса (текст, данные, стек)
|
Размер процесса |
Дает возможность операционной системе определить, сколько памяти потребуется процессу
|
Идентификаторы пользователя |
Реальный идентификатор пользователя (real user ID) указывает, кто из пользователей несет ответственность за выполняющийся процесс. Фактический идентификатор пользователя (effective user ID) может использоваться процессом для предоставления временных привилегий, связанных с определенной программой; на время выполнения этой программы в составе процесса последний использует фактический идентификатор пользователя
|
Идентификаторы процесса |
Идентификатор данного и родительского процессов. Эти идентификаторы присваиваются процессу в состоянии создания |
Дескриптор событий |
Используется, когда процесс находится в спящем состоянии; с наступлением события процесс переходит в состояние готовности |
Приоритет |
Используется при планировании процессов
|
Сигнал |
Перечисляет отправленные, но еще не обработанные сигналы |
Таймеры |
Включают время выполнения процесса, использование ресурсов ядром, а также пользовательские таймеры для отправки сигналов в определенное время |
Р-связь |
Указатель на следующий элемент в очереди готовых к выполнению процессов (используется, когда процесс находится в состоянии готовности) |
Статус памяти |
Указывает, находится ли образ процесса в основной памяти или выгружен из нее. Если процесс загружен в память, в этом поле также указывается, можно ли его выгрузить или он временно блокирован в основной памяти |
Таблица 3.12. Пользовательская область UNIX
Указатель таблицы процессов
|
Указывает запись, соответствующую области пользователя |
Идентификаторы пользователя |
Реальный и фактический идентификаторы пользователя. Используются для определения пользовательских привилегий |
Таймеры
|
Записывают время, затраченное на выполнение данного и дочерних процессов в пользовательском режиме и в режиме ядра
|
Массив обработчиков сигналов
|
Указывает, как будет реагировать процесс на каждый из пяти типов сигналов, заданных в системе (выходить из системы, игнорировать сигнал, выполнять заданную пользователем функцию) |
Управляющий терминал |
Указывает, с какого терминала был запущен процесс (если этот терминал существует) |
Поле ошибок
|
Содержит записи об ошибках, произошедших во время системного вызова |
Возвращаемое значение
|
Содержит результат выполнения системных вызовов |
Параметры ввода-вывода |
Задает объем передаваемых данных, адрес массива данных в пользовательском пространстве, а также смещения в файлах при вводе-выводе
|
Файловые параметры |
Текущий и корневой каталоги описывают файловую систему процесса |
Таблица дескрипторов файлов пользователя
|
Содержит записи об открытых файлах |
Граничные поля |
Ограничивают размер процесса и размер файла, который он может записать
|
Поля режимов доступа
|
Установки режима доступа к создаваемым процессом файлам |
Различия между записью таблицы процессов и пользовательской областью отражают тот факт, что ядро системы UNIX всегда выполняется в контексте какого-нибудь процесса. Большую часть времени ядро работает с контекстом текущего процесса, однако иногда ядру нужен доступ к информации и о других процессах, например при работе планировщика.
Третьей статической частью, входящей в контекст системного уровня, является таблица областей процесса, которая используется системой управления памятью. И, наконец, стек ядра — это динамическая часть контекста системного уровня. Этот стек используется при выполнении процесса в режиме ядра и содержит информацию, которую нужно сохранять и восстанавливать во время вызовов процедур и прерываний.
Управление процессами
В операционной системе UNIX процессы создаются с помощью вызова системной функции ядра под названием fork (). При вызове этой функции процессом операционная система выполняет следующие действия [ВАСН86].
Выделяет в таблице процессов место для нового процесса.
Назначает этому процессу уникальный идентификатор.
Создает копию образа родительского процесса, за исключением совместно используемых областей памяти.
Увеличивает показания счетчиков всех файлов, принадлежащих родительскому процессу, что отражает тот факт, что новый процесс также владеет этими файлами.
Назначает процессу состояние готовности к выполнению.
Возвращает родительскому процессу идентификатор дочернего процесса, а дочернему процессу — значение 0.
Возможно, такой метод создания процессов трудно изобразить наглядно, потому что и родительский и дочерний процессы в момент создания выполняют один и тот же проход по коду. Различаются они возвращаемым функцией fork () значением: если оно равно нулю, то это дочерний процесс. Таким образом, можно выполнить команду ветвления, которая приведет к выполнению дочерней программы или продолжению выполнения основной ветви.