Начальная скорость пули
- 1 year ago
- 0
- 0
|
Возможно, эта статья содержит
оригинальное исследование
.
|
Начальная загрузка — многоступенчатый процесс, часть процесса загрузки компьютера, с момента включения питания и до момента запуска операционной системы. Загрузочная последовательность — это последовательность действий, которые должен выполнить компьютер для запуска операционной системы (точнее, загрузчика ), независимо от типа установленной ОС.
Большинство компьютерных систем могут исполнять только команды, находящиеся в оперативной памяти компьютера, в то время как современные операционные системы в большинстве случаев хранятся на жёстких дисках , загрузочных CD-ROM , USB дисках или в локальной сети .
После включения компьютера в его оперативной памяти нет операционной системы. Само по себе, без операционной системы, аппаратное обеспечение компьютера не может выполнять сложные действия, такие как, например, загрузку программы в память. Таким образом мы сталкиваемся с парадоксом, который кажется неразрешимым: для того, чтобы загрузить операционную систему в память, мы уже должны иметь операционную систему в памяти.
Решением данного парадокса является использование специальной компьютерной программы , называемой начальным загрузчиком (в IBM PC-совместимых компьютерах входящим в состав BIOS — Basic Input/Output System). Эта программа не обладает всей функциональностью операционной системы, но её достаточно для того, чтобы загрузить другую программу, которая будет загружать операционную систему. Часто используется многоуровневая загрузка, в которой несколько небольших программ вызывают друг друга до тех пор, пока одна из них не загрузит операционную систему.
В современных компьютерах процесс начальной загрузки начинается с выполнения процессором команд, расположенных в постоянной памяти (например на IBM PC — команд BIOS ), начиная с предопределённого адреса (процессор делает это после перезагрузки без какой бы то ни было помощи). Данное программное обеспечение может обнаруживать устройства, подходящие для загрузки, и загружать со специального раздела выбранного устройства (чаще всего загрузочного сектора данного устройства) загрузчик ОС .
Начальные загрузчики должны соответствовать специфическим ограничениям, особенно это касается объёма. Например, на IBM PC загрузчик первого уровня должен помещаться в первых 446 байтах главной загрузочной записи , оставив место для 64 байт таблицы разделов и 2 байта для сигнатуры 55AAh, необходимой для того, чтобы BIOS выявил сам начальный загрузчик.
Первые компьютеры имели набор переключателей, которые позволяли оператору размещать начальный загрузчик в памяти до запуска процессора . Затем данный загрузчик считывал операционную систему с внешнего устройства, например с перфоленты или с жесткого диска .
Псевдо-ассемблерный код начального загрузчика может быть столь же простым, как и следующая последовательность инструкций:
0: записать в регистр P число 8 1: проверить что устройство считывания с перфолент может начинать считывание 2: если не может, перейти к п. 1 3: прочитать байт с устройства считывания с перфолент и записать его в аккумулятор 4: если перфолента закончилась, перейти к п. 8 5: записать значение, хранимое в аккумуляторе, в оперативную память по адресу, хранящемуся в регистре P 6: увеличить значение регистра P на единицу 7: перейти к п. 1
Данный пример основан на начальном загрузчике одного из мини-компьютеров , выпущенного в 1970-х годах фирмой Nicolet Instrument Corporation.
0: записать в регистр P число 106 1: проверить что устройство считывания с перфолент может начинать считывание 2: если не может, перейти к п. 1 3: прочитать байт с устройства считывания с перфолент и записать его в аккумулятор 4: если перфолента закончилась, перейти к п. 8 5: записать значение, хранимое в аккумуляторе, в оперативную память по адресу, хранящемуся в регистре P 6: уменьшить значение регистра P на единицу 7: перейти к п. 1
Длина загрузчика второго уровня была такой, что последний байт загрузчика изменял команду, расположенную по адресу 6. Таким образом, после выполнения пункта 5 стартовал загрузчик второго уровня. Загрузчик второго уровня ожидал заправки в устройство считывания перфолент длинной перфоленты, содержащей операционную систему. Различием между загрузчиком первого уровня и загрузчиком второго уровня были проверки на ошибки считывания с перфоленты, которые часто встречались в то время, и, в частности, на используемых в данном случае телетайпах ASR-33.
Некоторые операционные системы, наиболее характерными из которых являются старые (до 1995 года) операционные системы компьютеров Macintosh производимых Apple Computer , настолько тесно связаны с аппаратным обеспечением компьютеров (вплоть до перехода на процессоры PowerPC и , то есть примерно до System 8, в ПЗУ находились как ядро, так и большая часть библиотек ОС), что на данных компьютерах невозможно загрузить какую-либо другую операционную систему. В данных случаях обычно разрабатывается начальный загрузчик, который работает как загрузчик стандартной ОС , а затем передает управление альтернативной операционной системе. Apple использовала данный способ для запуска A/UX версию Unix , а затем он использовался различными бесплатными операционными системами.
— устройство, которое должно быть проинициализировано до загрузки операционной системы. К ним относятся устройства ввода ( клавиатура , мышь), базовое устройство вывода ( видеокарта и дисплей ), и устройство, с которого будет произведена загрузка ОС — дисковод , жесткий диск , CD-ROM , флэш-диск , SCSI -устройство, сетевая карта (при загрузке по сети; например, при помощи PXE ).
После включения персонального компьютера (ПК) на базе процессора семейства Intel 80x86 , его процессор начинает работу в реальном режиме адресации с сегментной организацией и выполнение инструкций процессора с адреса FFFF:0, инициализированного в паре регистров CS:IP (Code Segment : Instruction Pointer) после снятия сигнала RESET. В конце доступного процессору адресного пространства оперативной памяти из ПЗУ материнской платы загружается загрузчик базовой системы ввода-вывода ( BIOS ), на который передается выполнение по инструкции безусловного перехода, отображенной по адресу FFFF:0.
Программа инициализации BIOS с помощью программы POST проверяет, что устройства компьютера работают корректно и инициализирует их.
Затем BIOS опрашивает по порядку устройства из заранее сформированного (в консольной утилите CMOS SETUP) списка загрузочных устройств, пока не найдет загрузочное устройство. Если такое устройство не будет найдено, BIOS выведет на экран сообщение об ошибке и процесс загрузки будет остановлен. При обнаружении BIOS’ом загрузочного устройства, с последнего будет произведена попытка чтения данных его нулевого сектора (512 байт, в которых должна находиться загрузочная запись ). После успешного завершения чтения данных нулевого сектора загрузочного устройства в оперативную память по начальному адресу 0000:7С00, BIOS передает на этот адрес дальнейшее исполнение инструкций процессора.
Нулевой сектор загрузочного жесткого диска содержит так называемую «Главную загрузочную запись» (MBR — Master Boot Record) , содержащую как данные первых четырёх записей таблицы разделов , так и инструкции процессора Intel 80x86, обеспечивающие поиск по этим записям активного раздела, с которого, посредством одной из функций базовой системы ввода-вывода — ( англ. ) , реализованной в виде обработчика прерывания процессора, будет считана загрузочная запись операционной системы . Этот загрузочный сектор, как правило, зависит от операционной системы и должен произвести загрузку в оперативную память ядра операционной системы с последующей передачей на него исполнения инструкций процессора. Если активного раздела не существует, или загрузочный сектор активного раздела некорректен, MBR может загрузить резервный начальный загрузчик и передать управление ему. Резервный начальный загрузчик должен выбрать раздел (зачастую с помощью пользователя), загрузить его загрузочный сектор и передать ему управление, который, в свою очередь, передаёт управление непосредственно загрузчику ОС (дальнейшие этапы загрузки зависят от типа/версии установленной ОС ).
Некоторые процессоры имеют другие режимы загрузки. Например, большинство цифровых сигнальных процессоров могут загрузиться в следующих режимах: