Загрузка трудна
Загрузка ... ну ... это действительно самая сложная часть. Каждый раз, когда компьютер загружается, он в основном встречает себя заново. Он знакомится со своими различными частями, и для каждой, с которой он встречается, он приобретает способность. Но он должен подтягиваться своими собственными бутстрапами, так сказать, каждый раз с нуля.
При разработке процесса загрузки задача состоит в том, чтобы поэтапно запустить машину. Ваша загрузка должна быть быстрой и надежной, и каждый раз это должны быть обе вещи в совершенно неизвестной среде . Я даже не рискну разговаривать в режиме реального / защищенного режима (что не означает, что я даже мог) , но при загрузке происходит многое. Поскольку компьютер ассимилирует свои различные компоненты каждый раз, он делает это поэтапно. Вероятно, наиболее важным из них является переход от выполнения встроенного кода к выполнению кода на диске, или, другими словами, - exec ядра. Это когда прошивка (якобы) сдается операционной системе.
Много лет назад это было не так. Раньше BIOS был Basic In / Out - обычные программы вызывали прошивку для таких вещей, как рисование экрана и доступ к диску. Их называли прерываниями - старые шляпы могли помнить их лучше всего для острых ощущений восторга, которые они часто находили при назначении IRQ для своей новой точечной матрицы или USR.
INT13H
Это серия функций 13H прерывания ( или INT
в ассемблере ), которую BIOS предлагает в качестве сервисов для доступа к диску. Они все еще даже используются сегодня для систем BIOS в процессе загрузки, чтобы перейти с прошивки на диск.
Система BIOS проверяет первые несколько байтов каждого найденного диска и ищет шаблон, который она распознает как главную загрузочную запись ( илиMBR
) . Это стандарт де-факто, который существует уже несколько десятилетий и включает в себя немного необработанного исполняемого двоичного файла, который записывается в заголовок диска. MBR помечает диск BIOS как загрузочный. Он перестанет проверять, когда найдет его, и практически один - это все, что вы получите без какой-нибудь хитрой хитрости. Когда он находит его, он отображает его в память и выполняет его (в режиме реального времени, но я все еще не собираюсь туда) .
Выполненная MBR почти наверняка не является ядром вашей системы - 512 байт (дать или взять) было бы довольно бесполезно в этом отделе. Вероятно, это загрузчик - программа, разработанная специально для преодоления одного из многих ограничений адресации BIOS, особенно в том, что она вообще не понимает файловую систему любого типа.
Когда загрузчик читает текущее ядро и выполняет его в памяти (как мы все молимся об этом каждый раз) , он, вероятно, сделает это, запросив BIOS через INT13H
вызов прерывания. И если этого не произойдет - многие более интересные загрузчики будут монтировать файловые системы в общепринятом смысле и выполнять код другим способом - тогда очень маловероятно, что загрузчик стал настолько причудливым без INT13H
или двух. Часто загрузчики должны загружать себя - или различные этапы - потому что 512 байтов, выделенных им вначале, не удовлетворяют даже их потребностям.
ЦЫПЛЕНОК И ЯЙЦО
Я знаю, что все это окольный способ обсуждения диска, но к этому моменту должно быть совершенно ясно, что основная проблема - можно назвать это типом курицы и яйца - это доступ к диску, содержащему инструкции программы. о том, как получить доступ к дискам . Ключом к этой проблеме является прошивка - и она продолжает сильно отличаться даже в системах EFI - и, самое слабое или нет, прошивка является самым важным звеном в цепочке загрузки.
Видите ли, после того, как ядро выполнится и все его многочисленные подпрограммы для доступа и управления оборудованием будут запущены, все эти проблемы как бы исчезнут (или, по крайней мере, несколько изменятся) , потому что современные ОС получают полный контроль над системой, но до тех пор, пока они не сделают это, ограничения системы будут расширяться только настолько, насколько позволит встроенное ПО. Это говорит о многом - BIOS не сильно изменился с INT13H
8086 года. Звонок является оригиналом 8086. Да, были (бесчисленные) расширения и хаки, конечно, но инновации ...?
ЛУЧШЕ И ЛУЧШЕ
Большинство изменений в BIOS в лучшем случае были просто повязками. Раньше это был жесткий диск, который должен был быть физически отображен - различные и специфические аспекты его геометрии использовались при сохранении или извлечении данных. Со временем обычный жесткий диск вырос до размера, который запрещал это. Даже просто абстрактная карта была слишком большой информацией для BIOS. Поскольку он может работать только в реальном режиме, BIOS ограничен 1 МБ на каждый регистр памяти. Увеличьте карту цилиндров на большее, чем это, или сделайте любое из ее свойств больше, чем можно было бы рассмотреть в стольких битах, и BIOS буквально потерян - за пределами.
Этот барьер встречался и преодолевался много раз. Каждый раз карта абстрагируется и кодируется новым, умным и менее точным способом. И поэтому в настоящее время для BIOS практически невозможно точно сопоставить диск. Адресация логических блоков в настоящее время является стандартом де-факто, хотя некоторые переводы Cylinder / Head / Sector (или CHS) все еще необходимы. То, что микропрограмма материнской платы потеряла в точности / ответственности, такие расширения абстрагировали и добавили к ответственности микропрограммы диска, чтобы заполнить пробелы.
Это игра в кошки-мышки, которая упоминается в вашем вопросе. Когда BIOS не может понять диск за определенной точкой из-за его огромного размера, тогда любые данные, которые вы, возможно, захотите получить для себя при загрузке, например, загрузчик или ядро, лучше не располагать за этой точкой. Это откуда /boot
взялось.
МОЖЕТ БЫТЬ АКТУАЛЬНО ЛУЧШЕ
В наши дни такие вещи, к счастью, не имеют отношения к гибели BIOS. Прошло 30 лет, но в последние несколько лет он был в значительной степени заменен стандартом UEFI (или EFI 2.0) . UEFI обеспечивает монтирование с первой минуты, он инициализируется в защищенном режиме, включает собственный загрузчик, обеспечивает постоянную перезагрузку для хранения переменных на флэш-памяти, он может обрабатывать не более десятка зетабайт или что угодно на диск ... и многое другое остальное. Это далеко от совершенства, но это значительное улучшение по сравнению с предшественником.
Даже аргументы в пользу специализированных загрузчиков, связанных с шифрованием диска или многоуровневыми файловыми системами, не оправдываются, если учесть, что все это должно быть обработано ядром ОС в любом случае, и если вам предоставляется монтирование при загрузке, у вас всегда есть четкое его выполнение (особенно если учесть, что ядро Linux в конфигурации по умолчанию является EFI-выполнимым самостоятельно) .
И поэтому отдельный /boot
раздел, вероятно, не должен беспокоить вас слишком сильно , и если вы находитесь в системе EFI, то, возможно, у вас уже есть аналог в разделе системы EFI, так как это является требованием для загрузки режима EFI.