![Как работают мультизагрузочные операционные системы](https://rvso.com/image/1476419/%D0%9A%D0%B0%D0%BA%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82%20%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BE%D1%87%D0%BD%D1%8B%D0%B5%20%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B.png)
Я читал, что компьютер загружает ОС, просматривая первые 512 КБ каждого подключенного устройства. Если это пространство памяти действует как загрузочный сектор, он начинает загружать пространство памяти после него.
Согласно этой статье:https://www.gnu.org/software/grub/manual/multiboot/multiboot.html
Несколько ОС, существующих на одном жестком диске, выполняют "цепочку". Теперь, если все они находятся на одном жестком диске, как машина узнает, через сколько переходов она найдет другой загрузочный сектор.
И что такое цепочка
решение1
Я читал, что компьютер загружает ОС, просматривая первые 512 КБ каждого подключенного устройства.
BIOS компьютера делает это, и он не обязательно затрагивает все подключенные устройства, а только те, которые он умеет считывать и на чтение которых он настроен.
ПК с новым стандартом UEFI могут загружать файлы напрямую из раздела EFI на жестком диске. Традиционно BIOS не понимает файловые системы, такие как NTFS или FAT, но UEFI немного умнее и может фактически считывать файлы с устройства.
В случае с BIOS никогда не загружается полноценная ОС, а лишь небольшая программа, котораязагрузчик первой стадии. Этот загрузчик первой ступени может загрузить полноценную ОС, но только в случае DOS или другой очень простой ОС.
Обычно происходит следующее: загрузчик первого этапа включается и загружает загрузчик второго этапа, которым может быть старый загрузчик NT/XP NTLDR
, загрузчик Windows Vista+ winload.exe
или GRUB.
Загрузчики (второй этап и выше) могут делать больше, чем BIOS, поэтому они считывают файл конфигурации или данные и могут предоставить вам меню с указанием ОС для загрузки. Загрузчик перезаписывается после загрузки ОС.
Цепочкаэто когда загрузчик вызывает другой загрузчик. Поскольку Windows загружается только со своим собственным загрузчиком, если у вас установлен GRUB, то для загрузки Windows GRUB просто загружает загрузчик первой стадии, который BIOS загрузил бы в любом случае. Он хранится в первом секторе раздела, я полагаю. То же самое происходит и с DOS.
Это не обязательно, если GRUB может загружать ОС напрямую, что он может для любого Linux. Linux не слишком заботится о том, как он сам и его initramdisk попадают в память, в отличие от других ОС.
UEFI может загружать ОС напрямую, но, насколько мне известно, Windows этого не поддерживает, поэтому обычно системы UEFI напрямую загружают winload.exe
и запускают ее.
Другие загрузчики, не предназначенные для ПК, такие как U-Boot (который может работать на вашем домашнем маршрутизаторе), понимают файловые системы FAT и Linux и напрямую загружают Linux из них, а затем напрямую запускают ОС.
решение2
Я читал, что компьютер загружает ОС, просматривая первые 512 КБ каждого подключенного устройства.
Почти верно. Аппаратное обеспечение ПК-типа считывает первый сектор, который составляет 512 байт (не килобайт).
Если это пространство действует как загрузочный сектор, он начинает загружать пространство после него.
Тоже почти верно. Классическая прошивка материнской платы содержала нечто, называемое BIOS. Когда ПК включался, это запускалось. Одной из его задач была передача управления другому устройству (например, дисководу).
Более продвинутые версии не поддерживали только одно устройство, а проверяли несколько устройств и переходили к следующему в случае, если одно из них не давало решения для загрузки. Например, можно было попытаться загрузиться с дискеты, а если это не удавалось, перейти к попытке загрузки с CD, а если это не удавалось, попытаться загрузиться с первого жесткого диска. (гдепервыйтакже интересно, если у вас несколько дисков).
Большую часть времени он считывал первый сектор жесткого диска. А жесткий диск обычно имел схему разбиения на разделы (MBR для IBM-совместимых ПК) и некоторый загрузочный код. Затем он следовал цепочке загрузчиков.
Например, прошивка загрузит один загрузочный сектор и запустит код внутри него.
Код, считанный из этого сектора, будет лучше понимать диск и загрузит большую программу (при необходимости повторите с большим количеством этапов).
Несколько ОС, существующих на одном жестком диске, выполняют «цепочку».
ОС не выполняет цепочку. Но если одна из ваших последних стадий — это расширенная программа загрузчика (например, grub), то она может запросить ввод данных пользователем и в зависимости от этого продолжить работу разными способами. Например, она может загрузить ядро Linux, а также загрузить и запустить NTloader.