Начальная загрузка и выход на интерактивный режим в ОС UNIX. (25-2)

Функционирование ОС UNIX. (7-2, 19-2)

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

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

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

Стандартный ввод – в файл с дескриптором 0;

Стандартный вывод – в файл с дескриптором 1.

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

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

Диалог в ОС UNIX обеспечивается специальной программой-интерпретатором shell, которая составляет неотъемлемую часть среды выполнения каждого пользователя. Интерпретатор shell воспринимает команды, посылаемые с терминала, контролирует их и затем, если не обнаруживает ошибок, выполняет. Выполнение отдельной команды может рассматриваться как инициация определенной программы или группы взаимосвязанных программ, обеспечивающих ее реализацию.

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

· инициализация ядра

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

Инициализация ядра начинается с установки таймера и формирования начальных значений структуры данных ядра. На следующем шаге ОС считывает файлы конфигурации, в которых сообщается какие типы устройств, могут присутствовать, и проверяет, какие из устройств действительно присутствуют. Далее ищутся драйверы устройств, действительно присутствующих, и подгружаются. Затем ядро специальным образом без использования fork запускает процесс 0 (swapper). Для него создается контекст, и информация заносится в таблицу процессов.

Процесс 0 является системным процессом т.к. он постоянно находится в основной памяти и активен только тогда, когда процессор находится в состоянии «система». Процесс 0 продолжает инициализацию, осуществляя монтирование основной файловой системы. После образования процесса 0 ядро создает процесс с идентификатором 1(init) и идентификатором 2(page demon). Процесс 1 создается по упрощенной схеме, т.е. использованием fork, и служит для загрузки в основную память программы из файла /etc/init. Ядро по системному вызову exec считывает в процедурный сегмент процесса 1 программу, которая в будущем обеспечит активизацию из файла /etc/init. На этом инициализация ядра завершается.

Инициализация системы начинается с передачи управления диспетчеру процессов, который выбирает единственный активный процесс с идентификатором 1 и передает управление программе, размещенной в его процедурном сегменте. Процесс 1 по системному вызову exec на место своего процедурного сегмента считывает программу /etc/init. Она может создавать два типа режимов организации процессов:

· однопользовательский

· многопользовательский

Процесс init прежде всего инициирует начало работы интерпретатора shell для привилегированного пользователя. При выходе из однопользовательского режима создается многопользовательская среда. Активизация shell делает его доступным для всех пользователей системы. Для каждого активного канала связи порождается процесс getty. При вводе в систему по какому-либо каналу он выдает сообщение:

Имя (login) и пароль (password)