
1.3. Системная таблица процессов.
В ОС вся информация о каждом процессе, дополнительная к содержимому его собственного адресного пространства, хранится в системной таблице процессов, которая находится в ядре; для каждого процесса создается свой блок управления, который помещается в таблицу процессов, представляющую собой массив структур блоков управления процессами, памятью, файлами: в каждом блоке содержатся данные, отслеживаемые ядром для правильного функционирования системы.
Блок управления процессом содержит следующие данные:
слово состояния процесса;
приоритет;
величину кванта времени, выделенного системным планировщиком;
степень использования системным процессором;
признак диспетчеризации;
идентификатор пользователя, которому принадлежит процесс;
эффективный идентификатор пользователя;
реальный и эффективный идентификаторы группы;
группу процесса;
идентификатор процесса и идентификатор родительского процесса;
размер образа, размещаемого в области подкачки;
размер сегментов кода и данных;
массив сигналов, ожидающих обработки.
Чтобы система функционировала должным образом, ядру необходимо отслеживать все эти данные.
Блок управления памятью содержит следующие данные:
указатель на текстовый сегмент (адрес);
указатель на сегмент данных (адрес);
указатель на сегмент стека (адрес).
Блок управления файлами содержит следующие данные:
корневой каталог;
рабочий каталог;
дескрипторы файла, в которых находится специальная информация о файле;
идентификатор пользователя;
идентификатор группы.
1.4. Абстрактная модель процесса.
В абстрактной модели все функционирующее на компьютере ПО, включая ОС, организовано в виде набора логически упорядоченных процессов, у каждого из которых есть собственный виртуальный центральный процессор.
На самом деле, реальный процессор переключается с процесса на процесс: если рассмотреть несколько работающих программ (процессов), то в каждый момент времени активен только один процесс, и существует только один физический счетчик команд, в который загружается логический счетчик команд текущего процесса; когда время, отведенное текущему процессу, заканчивается, физический счетчик команд сохраняется в памяти – в логическом счетчике команд процесса.
Такое переключение процессора от программы к программе называется многозадачностью, основанной на мультипрограммировании.
Абстрактная модель дает более легкое представление – представление набора процессов, выполняемых параллельно (псевдопараллельно); для параллельно работающих процессов имеется счетчик команд для каждого из процессов.
1.5. Создание и основные состояния процесса.
Процесс порождается с помощью системного вызова fork или CreateProcess, при котором происходит проверка на наличие свободной памяти, доступной для размещения нового процесса: если требуемая память доступна, то создается дочерний процесс (потомок), представляющий собой точную копию вызывающего процесса; при этом в таблице процессов для нового процесса строится соответствующая структура; новая структура создается также в таблице пользователя, и все ее переменные инициализируются нулями; создаваемому процессу присваивается новый уникальный идентификатор, а идентификатор родительского процесса запоминается в блоке управления процессом.
В UNIX-системах каждому процессу присваивается идентификатор процесса PID - Process Identifier.
Основные события, приводящие к созданию процесса (вызов fork или CreateProcess):
загрузка системы;
работающий процесс подает системный вызов на создание процесса;
запрос пользователя на создание процесса.
Во всех случаях, активный текущий процесс посылает системный вызов на создание нового процесса.
Основные состояния процесса.
Выполнение – состояние, когда процесс занимает процессор, т. е. состояние активности процесса.
Готовность – состояние, когда процесс временно приостановлен, чтобы позволить выполняться другому процессу; приостановленный процесс состоит из собственного адресного пространства, называемого образом памяти (core image), и компонентов таблицы процессов – в числе компонентов и его регистры.
Ожидание – состояние, когда процесс заблокирован и не может быть запущен прежде, чем произойдет какое-то внешнее событие (например, операция ввода/вывода).
Первые два состояния идентичны, поскольку процесс может быть запущен, но во втором состоянии процессор недоступен. В третьем состоянии запустить процесс невозможно.
Возможные переходы между состояниями можно показать следующим образом:
1 – процесс блокируется, ожидая входных данных
2 – планировщик процессов ОС выбирает другой процесс
3 – планировщик процессов выбрал определенный процесс для выполнения
4 – поступили входные данные.
Переходы 2 и 3 вызываются планировщиком процессов операционной системы, поэтому процессы не могут знать об этих переходах, таким образом, с точки зрения самих процессов есть два состояния: выполнение и ожидание.