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

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:31, 5 июня 2019.

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

История

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

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

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

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

Первые программируемые компьютеры для коммерческой продажи, такие как UNIVAC I и IBM 701, включали функции, упрощающие их работу. Они включали, в основном инструкции, которые выполняли полную операцию ввода или вывода. Та же самая аппаратная логика может использоваться для загрузки содержимого перфокарты (наиболее типичной) или другого носителя ввода, такого как магнитный барабан или магнитная лента , который содержал программу начальной загрузки, нажатием одной кнопки. Эту концепцию загрузки называли различными именами компьютеров IBM 1950-х и начала 1960-х годов, но IBM использовала термин «Начальная загрузка программы» с IBM 7030 Stretch. Другие компьютеры IBM той эпохи имели схожие характеристики. Конкуренты IBM также предложили загрузку одной кнопки.

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

В IBM System / 360 и его преемниках, включая текущие машины / Architecture , процесс загрузки известен как Начальная загрузка программы (IPL). IBM придумал этот термин для 7030 (Stretch) , восстановил его для проектирования System / 360 и продолжает использовать его в этих средах и сегодня. Функция IPL в System / 360, в преемниках и ее совместимых устройствах, таких как Amdahl, считывает 24 байта из указанного оператором устройства в основное хранилище, начиная с реального адреса ноль. Вторая и третья группы из восьми байтов обрабатываются как канальные командные слова (CCW) для продолжения загрузки запускаемой программы (первое CCW всегда моделируется процессором и состоит из команды Read IPL, 02h , с цепочкой команд и подавлением неверной длины указание исполняется). [Источник 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.

Функции

Загрузчик операционной системы выполняет следующие функции:

  1. Выделение места для программ в памяти (распределение).Для размещения программы в оперативной памяти должно быть найдено и выделено свободное место в памяти. Для выполнения этой функции Загрузчик обычно обращается к операционной системы, которая выполняет его запрос на выделение памяти в рамках общего механизма управления памятью.
  2. Фактическое размещение команд и данных в памяти (загрузка).Функция загрузки сводится к считыванию образа программы с диска (или другого внешнего носителя) в оперативную память.
  3. Разрешение символических ссылок между объектами (связывание). Функция связывания состоит в компоновки программы из многих объектных модулей. Поскольку каждый из объектных модулей в составе программы был получен в результате отдельного процесса трансляции, который работает только с одним конкретным модулем, обращения к процедурам и данным, расположенным в других модулях, в объектных модулях не содержат актуальных адресов. Загрузчик же "видит" все объектные модули, входящие в состав программы, и он может вставить в обращения к внешним точкам правильные адреса. Загрузчики, которые выполняют функцию связывания вместе с другими функциями, называются Связывающими Загрузчиками. Выполнение функции связывания может быть переложено на отдельную программу, называемую Редактором связей или Компоновщиком. Редактор связей выполняет только функцию связывания - сборки программы из многих объектных модулей и формирование адресов в обращениях к внешним точкам..
  4. Настройка всех величин в модуле, зависящих от физических адресов в соответствии с выделенной памятью (перемещение).Функция перемещения необходима потому, что программа на любом языке разрабатывается в некотором виртуальном адресном пространстве, в котором адресация ведется относительно начала программной секции. При написании программы и при ее трансляции, как правило, неизвестно, по какому адресу памяти будет размещена программа (где система найдет свободный участок памяти для ее размещения). Поэтому в большинстве случаев в командах используется именно адреса меток и данных. Однако, в некоторых случаях в программе возникает необходимость использовать реальные адреса, которые определяться только после загрузки. Все величины в программе, которые должны быть привязаны к реальным адресам, должны быть настроены с учетом адреса, по которому программа загружена.
  5. Передача управления на входную точку программы (инициализация).[Источник 2]

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

Загрузчик 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 становится наибольшим камнем преткновения.[Источник 3]

Загрузчик 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 место нахождения ядра системы и параметры. Перезагрузить компьютер. [Источник 4]

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. [Источник 5]

Источники

  1. Booting // Wikipedia. [2019]. Дата обновления: 30.03.2019. URL: https://en.m.wikipedia.org/wiki/Booting (дата обращения 18.04.2019).
  2. Загрузчик ОС // Xstud. [2010-2019]. Дата обновления:25.03.2018. URL:https://m.xstud.ru/123178/operatsionnye_sistemy/zagruzchik (дата обращения: 05.06.2019).
  3. Все, что вы хотели знать про загрузку 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).
  4. Загрузчик операционных систем GRUB // Lanberry. [2019]. Дата обновления: 15.06.2018. URL: http://www.lanberry.ru/linux/zagruzchik-grub (дата обращения: 18.04.2019).
  5. BootX (Apple) // Turkaramamoto. [2019]. Дата обновления: 19.04.2019. URL: https://www.turkaramamotoru.com/en/bootx-apple-219146.html (дата обращения: 18.04.2019).