Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

3.1.6. Реализация процессов

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

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

3.1. Некоторые поля типовой записи таблицы процессов
Управление процессом Управление памятью Управление файлами
Регистры Указатель на информацию о текстовом сегменте Корневой каталог
Счетчик команд Указатель на информацию о сегменте данных Рабочий каталог
Слово состояния программы Указатель на информацию о сегменте стека Дескрипторы файлов
Указатель стека Идентификатор пользователя
Состояние процесса Идентификатор группы
Приоритет
Параметры планирования
Идентификатор процесса
Родительский процесс
Группа процесса
Сигналы
Время запуска процесса
Использованное время процессора Использованное время процессора
Время процессора, использованное дочерними процессами Время процессора, использованное дочерними процессами
Время следующего аварийного сигнала Время следующего аварийного сигнала

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

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

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

3.2. Процесс обработки прерывания
1 Система переносит в стек счетчик команд и т.п.
2 Система получает новый счетчик команд из вектора прерывания
3 Сохранение регистров процедурой на ассемблере
4 Установка указателя на новый стек процедурой на ассемблере
5 Запуск процедуры, обслуживающей прерывание (которая обычно считывает входные данные для дальнейшего помещения их в буфер)
6 Планировщик решает, какой следующий процесс будет запущен
7 Процедура обработки прерывания возвращает управление процедуре на языке ассемблера
8 Новый текущий процесс запускается процедурой на ассемблере

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

Предыдущий раздел Оглавление Следующий раздел