Формирование процессов 0 и 1
Рассмотрим подробнее, что происходит в момент начальной загрузки OC UNIX. Начальная загрузка – это загрузка ядра системы в основную память и ее запуск. Нулевой блок каждой файловой системы предназначен для записи короткой программы, выполняющей начальную загрузку. Начальная загрузка выполняется в несколько этапов.
1.Аппаратный загрузчик читает нулевой блок системного устройства.
2.После чтения этой программы она выполняется, т.е. ищется и считывается в память файл /unix, расположенный в корневом каталоге и который содержит код ядра системы.
3.Запускается на исполнение этот файл.
В самом начале ядром выполняются определенные действия по инициализации системы, а именно, устанавливаются системные часы (для генерации прерываний), формируется диспетчер памяти, формируются значения некоторых структур данных (наборы буферов блоков, буфера индексных дескрипторов) и ряд других. По окончании этих действий происходит инициализация процесса с номером "0". По понятным причинам для этого невозможно использовать методы порождения процессов, изложенные выше, т.е. с использованием функций fork() и exec(). При инициализации этого процесса резервируется память под его контекст и формируется нулевая запись в таблице процессов. Основными отличиями нулевого процесса являются следующие моменты
1.Данный процесс не имеет кодового сегмента, это просто структура данных, используемая ядром, и процессом его называют потому, что он каталогизирован в таблице процессов.
2. Он существует в течении всего времени работы системы (чисто системный процесс) и считается, что он активен, когда работает ядро ОС.
Далее ядро копирует "0" процесс и создает "1" процесс. Алгоритм создания этого процесса напоминает стандартную процедуру, хотя и носит упрощенный характер. Сначала процесс "1"представляет собой полную копию процесса "0" , т.е. у него нет области кода. Далее происходит увеличение его размера и во вновь созданную кодовую область копируется программа, реализующая системный вызов exec(), необходимый для выполнения программы /etc/init. На этом завершается подготовка первых двух процессов. Первый из них представляет собой структуру данных, при помощи которой ядро организует мультипрограммный режим и управление процессами. Второй – это уже подобие реального процесса. Далее ОС переходит к выполнению программ диспетчера. Диспетчер наделен обычными функциями и на первом этапе у него нет выбора – он запускает exec() ,который заменит команды процесса "1"кодом, содержащимся в файле /etc/init.Получившийся процесс, называемый init, призван настраивать структуры процессов системы. Далее он подключает интерпретатор команд к системной консоли. Так возникает однопользовательский режим, так как консоль регистрируется с корневыми привилегиями и доступ по каким-либо другим линиям связи невозможен. При выходе из однопользовательского режима initсоздает многопользовательскую среду. С этой целью initорганизует процесс gettyдля каждого активного канала связи, т.е. каждого терминала Это программа ожидает входа кого-либо по каналу связи. Далее, используя системный вызов exec(), gettyпередает управление программе login,проверяющей пароль. Во время работы ОС процесс initожидает завершения одного из порожденных им процессов, после чего он активизируется и создает новую программу gettyдля соответствующего терминала. Таким образом процесс initподдерживает многопользовательскую структуру во время функционирования системы.Схема описанного “круговорота” представлена на Ошибка! Источник ссылки не найден.
БИЛЕТ 25
Основные задачи планирования
- Планирование очереди процессов на начало обработки
- Планирование распределения времени ЦП между процессами
- Планирование свопинга
- Планирование обработки прерываний
- Планирование очереди запросов на обмен
Планирование распределения времени ЦП между процессами
Квант времени – непрерывный период процессорного времени.
Приоритет процесса – числовое значение, показывающее степень привилегированности процесса при использовании ресурсов ВС (в частности, времени ЦП).
Для грамотного планирования надо решить две задачи:
– определить величину кванта
– определить стратегию обслуживания очереди готовых к выполнению процессов
Если величина кванта не ограничена – невытесняющая стратегия планирования времени ЦП (применяется в пакетных системах). Никто принудительно не скидывает процесс с ЦП. Разработчики берут на себя функции диспетчера. Например, программа что-то долго считает => сама периодически снимает себя с ЦП, что могли выполнится задачи требующие меньшее количество времени для выполнения и не могущие долго ждать.
Вытесняющая стратегия - величина кванта ограничена.
Может существовать несколько очередей на обработку на ЦП. Первыми берутся процессы из первой очереди. Вторая очередь подпитывает первую, третья – вторую, и т.д.. Если первая очередь пуста берется из второй, вторая пуста – из третей и т. д. Планировщик определяет в какую очередь скинуть процесс.
Рассмотрим, как решается проблема с определения кванта времени.
Кванты постоянной длины.
•Время ожидания кванта процессом ~ q(n-1)
•Параметры: длина очереди и величина кванта.
•Дисциплина обслуживания очереди, например, FIFO.
•Переключение процессов – операция, требующая времени.
Проблема: как определить длину кванта. Слишком маленький – не хватит времени на переключение, большой - некоторые успеют выполниться полностью.
Кванты переменной длины
Величина кванта может меняться со временем
• Вначале «большой» квант q=A,на следующем шаге q=A-t, q=A-2t,…, до q=B (B<A). Преимущество для коротких задач.
• Вначале q=B, далее q=B+t,…, до q=A. Уменьшение накладных расходов на переключение задач, когда несколько задач выполняют длительные вычисления.
Если процесс интенсивно пользуется операциями ввода/вывода, то он может использовать выделенный квант не до конца. В качестве компенсации ему могут предоставляться привилегии при дальнейшем обслуживании.
БИЛЕТ 26 Стратегии планирования времени ЦП. Алгоритмы, основанные на приоритетах.