Загрузчик (Операционные Системы)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 09:14, 30 апреля 2019.

Загрузчик операционной системы – это специальная программа, которая расположена в первых секторах жесткого диска (далее просто загрузчик), например в MBR (главная загрузочная запись) жесткого диска. После теста системы, в момент загрузки, BIOS (базовая система ввода-вывода) передает управление MBR, если система настроена для загрузки из неё. Затем программа, расположенная в MBR начинает выполняться. Эта программа называется загрузчиком, её задача - передать управление ядру операционной системы, которое продолжит загрузку.

История

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

Первые примеры

Первые компьютеры в 1940-х и 1950-х годах были единственными в своем роде инженерными усилиями, на программирование которых могли уйти недели, а загрузка программ была одной из многих проблем, которые нужно было решить. В раннем компьютере ENIAC не было «программы», хранящейся в памяти, но он был настроен для каждой проблемы с помощью конфигурации соединительных кабелей. Начальная загрузка не применялась к ENIAC, аппаратная конфигурация которого была готова для решения проблем, как только было подано питание. Система EDSAC , второй компьютер с хранимой программой, использовала шаговые переключатели для переноса фиксированной программы в память при нажатии ее кнопки запуска. Программа, хранящаяся на этом устройстве, которую Дэвид Уилер выполнил в конце 1948 года, загрузил дальнейшие инструкции с перфоленты и затем выполнил их.

Первые коммерческие компьютеры

Первые программируемые компьютеры для коммерческой продажи, такие как UNIVAC I и IBM 701, включали функции, упрощающие их работу. Обычно они включали инструкции, которые выполняли полную операцию ввода или вывода. Та же самая аппаратная логика может использоваться для загрузки содержимого перфокарты (наиболее типичной) или другого носителя ввода, такого как магнитный барабан или магнитная лента , который содержал программу начальной загрузки, нажатием одной кнопки. Эту концепцию загрузки называли различными именами компьютеров IBM 1950-х и начала 1960-х годов, но IBM использовала термин «Начальная загрузка программы» с IBM 7030 Stretch .и позже использовал его для своих линий мэйнфреймов, начиная с System / 360 в 19Начальна IBM 701 компьютер (1952-1956) была кнопка «Загрузить» , который инициировал чтение первого 36-битового слова в основную память от перфокарту в считыватель карт , магнитную ленту в накопитель на магнитной ленте , или магнитный узел барабана в зависимости от положения переключателя нагрузки. Затем левое 18-битовое полуслово выполнялось как инструкция, которая обычно считывала дополнительные слова в память. Затем выполнялась загруженная загрузочная программа, которая, в свою очередь, загружала большую программу из этого носителя в память без дополнительной помощи со стороны оператора-человека. Термин «ботинок» используется в этом смысле, по крайней мере, с 1958 года. Другие компьютеры IBM той эпохи имели схожие характеристики. Например, система IBM 1401 (ок. 1958) использовала кард-ридер для загрузки программы с перфокарты. 80 символов, хранящихся на перфокарте, были считаны в ячейки памяти с 001 по 080, затем компьютер перейдет в ячейку памяти 001, чтобы прочитать свою первую сохраненную инструкцию. Эта инструкция всегда была одна и та же: перемещайте информацию в этих первых 80 ячейках памяти в область сборки, где информация в перфокартах 2, 3, 4 и т. д. Может быть объединена для формирования сохраненной программы. Как только эта информация будет перемещена в область сборки, машина перейдет к инструкции в местоположении 080 (прочитайте карту), и будет прочитана следующая карта и обработана ее информация. Другим примером был IBM 650 (1953), десятичная машина, которая имела группу из десяти 10-позиционных переключателей на своей панели оператора, которые были адресованы как слово памяти (адрес 8000) и могли быть выполнены как инструкция. Таким образом, установка переключателей на 7004000400 и нажатие соответствующей кнопки приведет к считыванию первой карты в устройстве считывания карт в память (код операции 70), начиная с адреса 400, а затем перейдет к 400, чтобы начать выполнение программы на этой карте. Конкуренты IBM также предложили загрузку одной кнопки.

IBM System / 360 и преемники

В IBM System / 360 и его преемниках, включая текущие машины z / Architecture , процесс загрузки известен как Начальная загрузка программы (IPL). IBM придумал этот термин для 7030 (Stretch) , восстановил его для проектирования System / 360 и продолжает использовать его в этих средах и сегодня. В процессорах System / 360 IPL инициируется оператором компьютера путем выбора адреса устройства из трех шестнадцатеричных цифр (CUU; C = адрес канала ввода / вывода, UU = блок управления и адрес устройства [NB 2] ) нажав кнопку загрузки . В высокопроизводительных моделях System / 360 , большинстве систем [NB 3]System / 370 и некоторых более поздних системах функции переключателей и кнопки LOAD моделируются с использованием выбираемых областей на экране графической консоли, часто [NB 4]иIBM 2250- подобное устройство или IBM 3270- подобное устройство. Например, в System / 370 Model 158 последовательность клавиш 0-7-X (ноль, семь и X в этом порядке) приводит к IPL из адреса устройства, который был введен в область ввода. Amdahl 470V / 6 и связанные с ними процессоры поддерживаются четыре шестнадцатеричных цифр на этих процессорах , которые имели дополнительный блок второго канала установлен, в общей сложности 32 каналов. Позже IBM также будет поддерживать более 16 каналов. Функция IPL в System / 360 и ее преемниках и ее совместимых устройствах, таких как Amdahl, считывает 24 байта из указанного оператором устройства в основное хранилище, начиная с реального адреса ноль. Вторая и третья группы из восьми байтов обрабатываются как канальные командные слова (CCW) для продолжения загрузки запускаемой программы (первое CCW всегда моделируется процессором и состоит из команды Read IPL, 02h , с цепочкой команд и подавлением неверной длины указание исполняется). Когда команды канала ввода / вывода завершены, первая группа из восьми байтов затем загружается в Слово состояния программы (PSW) процессора, и запускающая программа начинает выполнение в месте, указанном этим PSW. Устройство IPL обычно является дисководом, поэтому особое значение Команда 02h read-type, но точно такая же процедура также используется для IPL от других устройств ввода типа, таких как ленточные накопители или даже устройства чтения карт, независимым от устройства способом, позволяющим, например, установить работающую операционную систему. система на совершенно новом компьютере с магнитной ленты начального распространения ОС. Для дисковых контроллеровКоманда 02h также заставляет выбранное устройство искать цилиндр0000h , голова0000h , имитируя команду поиска цилиндра и головки,07h , и искать запись01h , имитирующая команду равного идентификатора поиска,31 ч ; поиск и поиск не моделируются контроллерами ленты и карты, так как для этих классов устройствКоманда 02h - это просто последовательная команда чтения, а не команда чтения IPL. Диск, лента или колода карт должны содержать специальную программу для загрузки действительной операционной системы или автономной утилиты в основное хранилище, и для этой конкретной цели «IPL Text» помещается на диск автономным DASDI (устройством хранения с прямым доступом). Программа инициализации) или эквивалентная программа, работающая в операционной системе, например, ICKDSF, но ленты и наборы карт с поддержкой IPL обычно распространяются с уже существующим «текстом IPL». [Источник 1]

Описание

Несмотря на то, что с работой загрузчика операционной системы так или иначе сталкивается любой из её пользователей, далеко не все подозревают даже о его существовании, не говоря уже о более глубоких познаниях в этой области. Причем речь не только о тех, кто использует Windows. Как показывает опыт, некоторый процент не осведомленных о существовании загрузчика ОС пользователей есть и в среде Linux. Загрузчик операционной системы- это очень короткая программа, находящаяся в первом секторе каждой дискеты и жесткого диска (винчестера) с операционной системой MS DOS. Функция этой программы заключается в считывании с загрузочного диска в оперативную память системных файлов DOS. Основная задача загрузчика - подготовить компьютер для загрузки ядра операционной системы (если, конечно, в такой предварительной подготовке есть какая-то необходимость), ну и, собственно, загрузить само ядро. В случае, если есть несколько ядер, доступных для загрузки, загрузчик нередко выполняет ещё и функцию средства диалога с пользователем, позволяя тому выбрать одно из доступных ядер. Наиболее важный момент всей этой процедуры - это, конечно же, непосредственная загрузка в оперативную память ядра операционной системы. После того, как отработал код загрузчика BIOS, управление передается коду из загрузочного сектора (boot sector) активного раздела жесткого диска, хотя в ряде случаев загрузка операционной системы может производиться исключительно средствами кода, записанного в BIOS. Вместе с тем, само ядро загружаемой системы не обязательно берется загрузчиком с жесткого диска - существуют и другие способы, например, получение кода ядра по сети или через внешние порты компьютера (что особенно характерно для стадии отладки разрабатываемого ядра). Часто используется многоуровневая загрузка, когда процесс работы загрузчика плавно перетекает в процесс работы самого ядра операционной системы путем последовательного вызова нескольких загружающих друг друга программ. В наше время, в силу существования множества разных операционных систем, имеется и большое количество их загрузчиков. Самый распространенный - это, пожалуй, NTLDR, загрузчик систем семейства Windows NT до Windows XP включительно. В новых версиях Windows применяется загрузчик Windows Boot Manager, пришедший на смену NTLDR. Наиболее распространенными загрузчиками в мире Linux являются LILO (LInux LOader) и GRUB (Grand Unified Bootloader). Загрузчик Mac OS X называется BootX, загрузчик Linux и Solaris для машин с архитектурой SPARC имеет название SILO (SPARC Improved bootLOader). Существует также ряд достаточно известных в узких кругах загрузчиков для встраиваемых операционных систем - Das U-Boot, uMon, RedBoot, SyMon.[Источник 2]

Функции

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

  1. Обеспечивает необходимые средства для диалога с пользователемкомпьютера (например, загрузчик позволяет выбрать операционную систему для загрузки).
  2. Приводит аппаратуру компьютера в состояние, необходимое для старта ядра операционной системы(например, на не-x86 архитектурах перед запуском ядра загрузчик должен правильно настроить виртуальную память).
  3. Загружает ядро операционной системы (Ntoskrnl.exe в случае MS Windows) в ОЗУ. Загрузка ядра операционной системы не обязательно происходит с жесткого диска. Загрузчик может получать ядро по сети. Ядро может храниться в ПЗУ или загружаться через последовательные интерфейсы (это может пригодиться на ранней стадии отладки создаваемой компьютерной системы).
  4. Формирует параметры, передаваемые ядру операционной системы (например, ядру Linux передаются параметры, указывающие способ подключения корневой файловой системы).
  5. Передаёт управление ядру операционной системы.[Источник 3]

Виды загрузчиков

Загрузчик Syslinux

Обратите внимание, что загрузчик Syslinux сам по себе не может быть установлен в MBR, однако в пакете syslinux имеются два файла, из которых можно установить загрузочный код Syslinux в 440-байтную область загрузочного кода MBR: mbr.bin или gptmbr.bin. Конечно, это имеет смысл только для Linux. Кстати, syslinux может быть использовать с UEFI – для него загрузчик называется syslinux.efi, однако он еще достаточно сырой. Итак, Syslinux состоит из файла загрузчика и файла конфигурации меню syslinux.cfg. Файл меню может вызывать графическое меню через подгрузку файла vesamenu.c32. Установка Syslinux под Windows на другой диск выполняется достаточно просто: используется файл [bios/]«win32/syslinux.exe» для 32-х битных систем и [bios/]«win64/syslinux64.exe» для 64-х битных систем. syslinux.exe --install a: — установка на флоппи-диск syslinux.exe --mbr --active --directory /boot/syslinux/ --install z: — установка на диск z:, например флешку, где — в качестве разделителей должны быть использованы именно /, а не \

— в каталоге
z:\boot\syslinux\ 
будет размещён файл-загрузчик «ldlinux.sys»

— и раздел z: помечен как активный

— для организации меню должен быть создан файл
z:\boot\syslinux\syslinux.cfg 
(см. рисунок 1).
Рисунок 1 – Установка загрузчика Syslinux

Загрузчики Windows

Конечно, основное внимание мы уделим загрузчикам для Windows. Загрузчик NTLDR использовался до появления операционной системы Windows Vista. В процессе начальной загрузки, программный код загрузочного сектора раздела (PBR — Partition Boot Sector) обеспечивал поиск, считывание в память и передачу управления файлу ntldr, который размещался в корневом разделе загрузочного диска. Конфигурирование загрузчика ntldr выполнялось с помощью простого текстового файла boot.ini, содержимое которого задавало список загружаемых операционных систем, их параметры загрузки, размещение системных файлов и т.п. В операционных системах Windows Vista /Server 2008 и более поздних, загрузчик ntldr не используется, и заменен диспетчером загрузки BOOTMGR. Соответственно, изменился и программный код загрузочного сектора раздела, обеспечивающий передачу управления файлу bootmgr. Новый диспетчер загрузки использует собственные данные конфигурации загрузки (Boot Configuration Data — BCD) и может выполнять, при определенных настройках, загрузку любых операционных систем семейства Windows. Загрузчик ntldr не поддерживает возможность загрузки Windows Vista и старше. Также, хочу отметить, что все современные Windows PE любых версий также используют загрузчик bootmgr. Цепочка стадий загрузки MBR — PBR — BOOTMGR — это минимально необходимое условие для того, чтобы загрузка операционной системы могла начаться. Дальнейший же ее ход, определяется диспетчером загрузки BOOTMGR, который считывает данные конфигурации загрузки из файла \BOOT\BCD активного раздела и выполняет загрузку в соответствии с их содержимым.

Для Windows 7 он запускает файл
 \WINDOWS\system32\winload.exe 
(см. рисунок 2).
Рисунок 2 - Загрузка WINDOWS\system32\winload.exe

Диспетчер загрузки bootmgr позволяет выполнить загрузку как с обычного системного диска, так и из загрузочных образов, виртуальных дисков, загрузку с использованием загрузчиков других операционных систем. Это позволяет использовать bootmgr для загрузки Windows PE. В соответствии с конфигурацией загрузки, диспетчер BOOTMGR может выполнить загрузку ядра Windows или, например, Linux, обеспечить выход из режима гибернации, загрузить диагностические программы, выполнить загрузку ядра с измененными параметрами и т.п. Обычно файл bootmgr имеет атрибуты «скрытый» и «системный». По типу структуры, файл \Boot\BCD является кустом реестра и отображается в редакторе реестра Windows как раздел HKEY_LOCAL_MACHINE\BCD00000000. Обычно именно конфигурация BCD становится наибольшим камнем преткновения.[Источник 4]

Загрузчик GRUB

Загрузчик операционных систем GRUB – это очень мощный загрузчик, который может загружать разнообразные операционные системы, такие как Windows, DOS, Linux, GNU Hurd, *BSD и другие. В данное время LILO является самым популярным загрузчиком, используемым почти всеми c мультизагрузочными системами. С GRUB можно “видеть” содержимое файловой системы без загрузки операционной системы. Например, если Вы хотите посмотреть дату и время, записанные в файле, но не имеете времени для загрузки операционной системы, то можете использовать командную строку GRUB (“grub>”) и написать:

grub> cat (partition number)/home/god/filename.txt

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

  • Шаг 1: Компиляция и инсталляция программного пакета загрузчика GRUB

Загрузите исходные тексты

GRUB с
ftp://alpha.gnu.org/pub/gnu/grub
Распакуйте архив командой
“tar -xvzf filename.tar.gz”.

Для начала процесса компиляции, наберите:

[root@heaven ~/grub-0.5.96.1 ]# make

Для инсталляции всех файлов наберите:

[root@heaven ~/grub-0.5.96.1 ]# make install

Вы установили программный пакет GRUB, теперь можно приступать к установке загрузчика GRUB в загрузочный сектор. Хорошей идеей является хранить все файлы загрузчика, относящиеся к загрузке в директории /boot/grub. Для того, чтобы сделать это, следуйте следующему примеру: По умолчанию все файлы загрузчика проинсталлированы в /use/share/i386-pc или в /use/local/share/grub/i386-pc в зависимости от того, как определены переменные среды. Создайте каталог /boot/grub. Затем нужно скопировать следующие файлы в папку: stage1 stage2

  • _stage1_5
  • Шаг 2: Инсталляция загрузчика операционных систем GRUB.

Инсталляцию непосредственно загрузчика можно разделить на три этапа:

  • Инсталляция "stage1" в MBR.
  • Настройка адреса или расположения, "stage2". *Настройка меню загрузки или набора опций для выбора операционной системы для загрузки.

Необходимо начать инсталляцию со следующих команд:

[root@heaven /boot/grub ]# ./grub 

Эта команда опрашивает устройства и выводит сообщения. Следует считать, что Linux установлен на первом дополнительном разделе первого жесткого диска или на /dev/hda5.

  • Шаг 3:Конфигурация загрузчика операционых систем GRUB

В этой секции рассмотрим, как загружать разные операционные системы. Необходимо начать с процедуры загрузки, поддерживаемой GRUB. Загрузка может быть выполнена двумя путями: 1) Передача управления ядру ОC 2) Передача управления другому загрузчику : Указать корневое устройство или корневую файловую систему. Указать GRUB место нахождения ядра системы и параметры. Перезагрузить компьютер. [Источник 5]

BootX (Apple)

BootX-то программный загрузчик, разработанный и разработанный Apple Inc для использования на линейке компьютеров Macintosh. BootX используется для подготовки компьютера к использованию, загрузив все необходимые драйверы устройств и затем запустив Mac OS X, загрузив ядро на всех PowerPC. Макинтоши, работающие под управлением операционной системы Mac OS X 102 или более поздних версий. Используя BootROM, компьютерную микросхему ПЗУ с постоянной памятью, содержащую OpenFirmware,графическая загрузочная заставка кратко показана на всех совместимых компьютерах Macintosh в виде серого логотипа Apple с вращающимся курсором, который появляется во время последовательности запуска. Программа свободно доступна как часть операционной системы Darwin под лицензией открытого источника Apple Public License License5. BootX был заменен еще один почти идентичный загрузчик с именем bootefi и расширяемым ПЗУ интерфейса встроенного ПО при выпуске Mac4 на базе Intel. [Источник 6]

Источники

  1. Booting // Wikipedia. [2019]. Дата обновления: 30.03.2019. URL: https://en.m.wikipedia.org/wiki/Booting (дата обращения 18.04.2019).
  2. Что такое загрузчик операционной системы? // KV.by [1994—2019]. Дата обновления: 05.07.2010.URL:https://www.kv.by/archive/index2010181104.html (дата обращения: 18.04.2019).
  3. Загрузчик операционной системы // Howling Pixel. [2019]. Дата обновления:25.03.2019.URL:https://howlingpixel.com/i-ru/Загрузчик_операционной_системы (дата обращения: 18.04.2019).
  4. Все, что вы хотели знать про загрузку Windows, загрузчики и восстановление загрузки ОС // Alexis Hardware World. [2002—2019]. Дата обновления: 17.07.2017. URL: http://hww.ru/wp/2017/07/vse-chto-vy-xoteli-znat-pro-zagruzku-windows-zagruzchiki-i-vosstanovlenie-zagruzki-os/ (дата обращения: 18.04.2019).
  5. Загрузчик операционных систем GRUB // Lanberry. [2019]. Дата обновления: 15.06.2018. URL: http://www.lanberry.ru/linux/zagruzchik-grub (дата обращения: 18.04.2019).
  6. BootX (Apple) // Turkaramamoto. [2019]. Дата обновления: 19.04.2019. URL: https://www.turkaramamotoru.com/en/bootx-apple-219146.html (дата обращения: 18.04.2019).