Основными отличиями нулевого процесса являются следующие моменты

Инициализация системы

Начальная загрузка выполняется в несколько этапов.

Начальная загрузка

Формирование процессов 0 и 1

Выше упоминалось о нестандартном формировании некоторых процессов в Unix. Речь шла о процессе начальной загрузки системы и нестандартном формировании двух специфических процессов с PID 0 и 1.

Рассмотрим подробнее, что происходит в момент начальной загрузки OC UNIX.

Начальная загрузка – это загрузка ядра системы в основную память и ее запуск.

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

1.Аппаратный загрузчик читает нулевой блок системного устройства и передает точку входа.

2.После чтения этой программы она выполняется, т.е. ищется и считывается в память файл /unix, расположенный в корневом каталоге и который содержит код ядра системы. Осуществляется запуск яжра операционной системы.

3.Запускается на исполнение этот файл.

В самом начале ядром выполняются определенные действия по инициализации системы, а именно:

1)устанавливаются системные часы (для генерации прерываний),

2)формируется диспетчер памяти,

3)формируются значения некоторых структур данных (наборы буферов блоков, буфера индексных дескрипторов) и ряд других.

4)По окончании этих действий происходит инициализация процесса с номером "0".

По понятным причинам для этого невозможно использовать методы порождения процессов, изложенные выше, т.е. с использованием функций fork() и exec().

При инициализации этого процесса резервируется память под его контекст и формируется нулевая запись в таблице процессов.

1.Данный процесс не имеет кодового сегмента – это просто структура данных, используемая ядром и процессом его называют потому, что он каталогизирован в таблице процессов.

2. Он существует в течении всего времени работы системы (чисто системный процесс) и считается, что он активен, когда работает ядро ОС.

Далее ядро копирует "0" процесс и создает "1" процесс.

Сначала процесс "1" представляет собой полную копию процесса "0", т.е. у него нет области кода. Полее происходит увеличение его размера. Во вновь созданную кодовую область копируется программа, реализующая системный вызов exec(), необходимый для выполнения программы /etc/init.

На этом завершается подготовка первых двух процессов.

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

Второй – это уже подобие реального процесса.

Далее ОС переходит к выполнению программ диспетчера.

Диспетчер наделен обычными функциями и на первом этапе он запускает exec(), который заменит команды процесса "1" кодом, содержащимся в файле /etc/init. Получившийся процесс, называемый init, призван настраивать структуры процессов системы.

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

На этом завершается подготовка первых двух процессов.

При выходе из однопользовательского режима init создает многопользовательскую среду.

С этой целью init организует процесс getty для каждого активного канала связи, т.е. каждого терминала. Это программа ожидает входа кого-либо по каналу связи.

init организует процесс getty для каждого активного канала связи, т.е. каждого терминала. Это программа ожидает входа кого-либо по каналу связи.

Далее, используя системный вызов exec(), getty передает управление программе login, проверяющей пароль.

Во время работы ОС процесс init ожидает завершения одного из порожденных им процессов, после чего он активизируется и создает новую программу getty для соответствующего терминала.

Таким образом процесс init поддерживает многопользовательскую структуру во время функционирования системы.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: