Загрузка системы
4.2. Загрузка системы
При включении питания микропроцессор 8086 начинает работу с передачи управления по адресу FFFF:0000 (этот адрес заносится в регистры CS:IP) - это аппаратная особенность микропроцессора. Этот адрес принадлежит ПЗУ BIOS, 5 байт по этому адресу содержат команду перехода на начало программы POST в ПЗУ (Power On Self Test - самопроверка при включении питания). Программа POST проверяет состав оборудования и формирует список оборудования в области памяти BIOS, выполняет тест ОЗУ (как правило, прохождение этого теста трассируется на экране терминала) и прочего оборудования ПЭВМ и инициализирует таблицу векторов прерываний в части прерываний, обслуживаемых BIOS. Также программа ищет в памяти расширения ПЗУ (как это делала наша программа 4.2) и вызывает их программы инициализации.
Затем BIOS начинает процедуру начальной загрузки. Начальный загрузчик опрашивает первое устройство гибких дисков, проверяя на нем наличие диска для начальной загрузки. Если диска там нет, программа обращается к ПЗУ, связанным с другими устройствами, которые могут содержать диски для начальной загрузки. Когда устройство загрузки найдено, BIOS читает с него блок начальной загрузки и передает на него управление. Блок начальной загрузки, размещенный на дорожке 0, секторе 1, стороны 0 первой доступной дискеты (или жесткого диска) обычно считывается в память по адресу 07C0:0000 и содержит загрузчик операционной системы и блок параметров, из которого загрузчик получает информацию о конфигурации системного диска. Загрузчик через таблицу векторов использует сервисные средства BIOS для загрузки в память остальной части системы. Загрузчик прежде всего устанавливает, что первые два файла в каталоге - IO.SYS и MSDOS.SYS (IBMBIO.COM и IBMDOS. COM для операционной системы PC DOS). Если это так, то оба файла считываются в оперативную память.
Файл IO.SYS состоит из модуля резидентных драйверов (BIOS DOS), модуля инициализации BIOS.DOS и модуля системной инициализации. В ходе инициализации BIOS DOS формируется список резидентных драйверов устройств в соответствии со списком оборудования, полученным при работе POST и изменяются некоторые векторы прерываний BIOS (т.е.
BIOS DOS перехватывает обработку этих векторов у BIOS ПЗУ). После отработки модулей инициализации IO.SYS занимаемая ими память освобождается, и управление получает программа инициализации ядра DOS. Эта программа устанавливает векторы прерываний DOS и выполняет инициализацию резидентных драйверов. В ходе этой инициализации определяется максимальный размер сектора, используемого драйверами, и в соответствии с этим размером в памяти организуется буфер секторов. Затем выполняется обработка файла CONFIG.SYS. В соответствии с параметрами, заданными в CONFIG.SYS (или по умолчанию - если CONFIG.SYS отсутствует), формируются системные таблицы и загружаются устанавливаемые драйверы устройств. Наконец, открываются системные файлы (CON, PRN, AUX), загружается в память командный процессор COMMAND.COM, и управление передается его секции инициализации.
Имя командного процессора задается оператором SHELL в CONFIG.SYS, по умолчанию это COMMAND.COM. COMMAND.COM состоит из трех частей:
- резидентная часть, содержащая обработчики прерываний 0 x22 (адрес завершения), 0x23 (реакция на Ctrl-Break), 0x24 (критическая ошибка);
- часть инициализации располагается в памяти вслед за резидентной частью COMMAND.COM, она обеспечивает выполнение файла AUTOEXEC.BAT и уничтожается (освобождает память) после выполнения своих функций;
- нерезидентная часть, содержащая интерпретатор внутренних команд DOS и загрузчик внешних команд. Эта часть располагается в старших адресах памяти и может частично или полностью перекрываться загружаемыми программами. При обращении к нерезидентной части командного процессора ее сохранность в ОЗУ проверяется по контрольной сумме и при необходимости она повторно загружается в память.
Таким образом, после окончания процесса загрузки область памяти, названная на Рисунок 4.1 "DOS и транзитные программы" распределяется так, как показано на Рисунок 4.2.