logo search
Shpory gosy

159. Загрузчики. Процедура загрузки. Статистические и динамические загрузки.

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

Загрузчик операционной системы:

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

приводит аппаратуру компьютера в состояние, необходимое для старта ядра операционной системы (например, на не-x86 архитектурах перед запуском ядра загрузчик должен правильно настроить виртуальную память);

загружает ядро операционной системы в ОЗУ. Загрузка ядра операционной системы не обязательно происходит с жесткого диска. Загрузчик может получать ядро по сети. Ядро может храниться в ПЗУ или загружаться через последовательные интерфейсы (это может пригодиться на ранней стадии отладки создаваемой компьютерной системы);

формирует параметры, передаваемые ядру операционной системы (например, ядру Linux передаются параметры, указывающие способ подключения корневой файловой системы);

передаёт управление ядру операционной системы.

При работе с реальной памятью распределять ресурсы возможно двумя путями:

        1. Назначить для каждой задачи объем памяти фиксированного размера;

        2. Деление памяти на переменные фрагменты: размер каждого фрагмента, отведенного памяти под задачу определяется требуемым объемом памяти.

Как результат второй подход экономит память – нет «свободных хвостиков».

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

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

Статистический способ – не самый оптимальный по результатам работы процессора. Часто простаиваем. Поэтому используем динамическую загрузку, какая либо из задач завершена на ее место в память можно загрузить следующую задачу из очереди и запустить на выполнение. При этом другие находятся на счете. Если объем новой задачи превышает освободившийся объем в памяти, возникают трудности. При загрузке в разделы фиксированного объема, как правило, имеющаяся память устраивает любые задачи – в крайнем случае, можно подождать второй освободившийся фрагмент и загружать сразу 2. Когда же работаем с сегментами переменной длины загружать большое задание приходиться в 2 свободного фрагмента.

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

Когда при выполнении текущего задания образуется свободное адресное пространство, появляется шанс загрузить в это свободное пространство новую задачу.

Но задача лежит на диске. Поэтому режим ПДП и «подгрузка» требуемых данных в основную память – slooping – перемещение всего фрагмента – задания с диска в память и обратно. Перемещением с жесткого диска в память занимается программа, называемая загрузчик. Соответственно загрузчики бывают: абсолютные и относительные (перемещающие). Абсолютные – по фиксированным адресам; относительные – по изменяющимся по времени адресам фрагмента памяти, выделенных заданием. Соответственно загрузка может проводиться статическая – до начала работы и в процессе работы – динамическая.