ЗАНЯТИЕ 16. «Реализация процессов»

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

Для реализации модели процессов операционная система ведет таблицу (состоящую из массива структур), называемую таб¬лицей процессов, в которой каждая запись соответствует какому-нибудь процессу. (Ряд авторов называют эти записи блоками управления процессом.) Эти записи содержат важную информацию о состоянии процесса, включая счетчик команд, указатель стека, распределение памяти, состояние открытых им файлов, его учет¬ную и планировочную информацию и все остальное, касающееся процесса, что должно быть сохранено, когда процесс переключа¬ется из состояния выполнения в состояние готовности или блоки¬ровки, чтобы позже он мог возобновить выполнение, как будто ни¬когда не останавливался.
В табл. 3 показан ряд ключевых полей типовой системы. Поля первого столбца относятся к управлению процессами. Поля остальных двух столбцов относятся к управлению памятью и фай¬лами соответственно. Следует заметить, что наличие тех или иных полей в таблице процессов в большей степени зависит от системы, но в этой таблице изложено основное представление о типе необ¬ходимой информации.
Теперь, после изучения таблицы процессов, появилась воз¬можность чуть лучше объяснить, как создается иллюзия несколь¬ких последовательных процессов, выполняемых на одном (или на каждом) центральном процессоре. Существует область памяти (обычно это фиксированная область в нижних адресах), связанная с каждым классом устройств ввода-вывода, которая называется век¬тором прерывания. В ней содержится адрес процедуры, обслужи¬вающей прерывание. Предположим, что при возникновении диско¬вого прерывания выполнялся пользовательский процесс № 3. Счет¬чик команд этого процесса, слово состояния программы, а иногда и один или несколько регистров помещаются в текущий стек аппаратными средствами прерывания. Затем компьютер переходит на адрес, указанный в векторе прерывания. На этом работа аппаратных средств заканчивается и вступает в действие программное обеспечение, а именно процедура обслуживания прерывания.

Таблица 3. Некоторые из полей типичной записи таблицы процессов

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

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

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

Таблица 4. Схема работы низшего уровня операционной системы при возникновении прерывания

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

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

13.2  Моделирование режима многозадачности

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

Лучше выстраивать модель на основе вероятностного взгляда на использование центрального процессора. Предположим, что процесс проводит часть своего времени p в ожидании заверше­ния операций ввода-вывода. При одновременном присутствии в памяти n процессов вероятность того, что все n процессов ожидают завершения ввода-вывода (в случае чего процессор простаивает), равна pn. Тогда время задействования процессора вычисляется по формуле

Время задействования центрального процессора = 1 − pn.

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

Оставить комментарий

avatar
  Подписаться  
Уведомление о