РОЗЧИНУВАННЯ ТРУДНО
Завантаження ... ну ... це справді найважча частина. Кожен раз, коли комп'ютер завантажується, він в основному зустрічається заново. Вона знайомиться з різними її частинами, і для кожної, яка відповідає їй, вона набуває можливостей. Але він повинен щоразу підтягуватися власними завантажувальними системами, так би мовити, з квадратних.
При розробці процесу завантаження хитрість полягає в тому, щоб підняти машину поетапно. Ваш черевик повинен бути швидким і надійним, і це має бути обидві речі у абсолютно невідомому середовищі кожного разу . Я навіть не буду братися за розмову в режимі реального / захищеного режиму (що не означає, що я навіть міг) , але при завантаженні відбувається багато чого. Оскільки комп'ютер засвоює різні компоненти кожного разу, коли це робиться поступово. Напевно, найважливішим із них є перехід від виконання бортового коду до виконання коду на диску, або, іншими словами - ядра exec. Це коли прошивка (нібито) здається в операційну систему.
Багато років тому це було не так вже й так. Раніше BIOS справді був базовим входом / виходом - звичайні програми здійснювали дзвінки до вбудованого програмного забезпечення для таких речей, як малювання екрана та доступ до диска. Їх називали перериваннями - старі капелюхи, можливо, запам’ятовували їх найкраще за відчуття насолоди, які вони часто зустрічаються при призначенні IRQ для їх нової крапки-матриці або USR.
INT13H
Це серія функцій 13H, що забезпечує переривання ( або INT
в монтажі lingo ), що пропонує BIOS як послуги доступу до диска. Вони досі навіть використовуються для систем BIOS в процесі завантаження, щоб зробити перехід від прошивки до диска.
Система BIOS перевіряє перші кілька байтів кожного знайденого диска та шукає шаблон, який він визнає як основний запис завантаження ( абоMBR
) . Це стандарт де-факто десятиліття і включає трохи сирої, виконуваної двійкової документації, яка записується на голову диска. MBR позначає диск BIOS як завантажувальний. Він перестане перевіряти, коли знайде його, і так практично одне - все, що ви отримаєте без хитрої хитрості. Коли він знайде такий, він відображає його в пам'ять і виконує (в реальному режимі, але я все ще не збираюся туди) .
Виконаний MBR майже точно не є вашим системним ядром - 512 байтів (дайте або візьміть) було б марно в цьому відділі. Це, мабуть, завантажувач - програма, спеціально розроблена для подолання одного з багатьох обмежень щодо адресації BIOS - зокрема, що вона взагалі не розуміє файлову систему.
Коли завантажувач зачитує фактичне ядро і виконує його в пам'яті (як ми всі молимося, що це буде кожен раз) , він, ймовірно, зробить це, запитуючи BIOS через INT13H
виклик переривання. А якщо цього не відбувається - багато шалених завантажувачів змонтують файлові системи в загальноприйнятому розумінні та виконають код іншим способом - тоді дуже мало ймовірно, що завантажувач набув такого фантазії без INT13H
двох-двох. Часто завантажувачі завантажують ланцюг самостійно - або на різних етапах - оскільки 512 байтів, що їх було виділено, не відповідає навіть їхнім потребам.
ЦИЦЕН І ЯЙЦЬ
Я все знаю, що це круговий спосіб обговорення диска, але до цього моменту повинно бути чітко зрозуміло, що головна проблема - можна назвати це тип куряче-яєчне - це доступ до диска, що містить інструкції програми про те, як отримати доступ до дисків . Ключовим фактором цієї проблеми є мікропрограмне забезпечення - і надалі воно є дуже різним способом навіть у системах EFI - і, найслабше чи ні, прошивка є найважливішою ланкою завантажувального ланцюга.
Розумієте, як тільки ядро виконує і всі його безлічі процедур доступу та контролю апаратного забезпечення ініціюється, всі ці проблеми начебто зникають (або, принаймні, дещо змінюються) , тому що сучасні ОС беруть повний контроль над системою, але поки вони не роблять, обмеження системи поширюються лише настільки, наскільки це дозволить прошивка. Це дуже багато говорить - BIOS не сильно змінився з INT13H
8086 року. Виклик є оригіналом 8086. Так, були (безліч) розширення, і хаки звичайно, але нововведення ...?
КРАЩЕ І ЛИШЕ
Більшість змін у BIOS в кращому випадку були просто пов'язками. Раніше жорсткий диск довелося фізично складати на карту - про різні та специфічні аспекти його геометрії згадувались, коли дані зберігалися на ньому або були отримані з нього. Врешті-решт звичайний жорсткий диск виріс до розміру, який забороняв це. Навіть лише абстрактна карта була занадто великою кількістю інформації для роботи з BIOS. Оскільки він може працювати лише в реальному режимі, BIOS обмежений 1 Мб на регістр пам'яті. Розгортайте карту циліндрів будь-яку більшу за неї або зробіть будь-яку її властивість більшою, ніж можна вирішити на стільки бітів, і BIOS буквально втрачається - поза межами.
Цей бар'єр був зустрінутий і зламаний багато разів. Кожен раз, коли карта абстрагується та кодується якимось новим, розумним та менш точним способом. І тому в ці дні для BIOS буквально неможливо точно зіставити диск. Адресація логічного блоку зараз є де-факто стандартом, хоча деякі переклади циліндра / голови / сектора (або CHS) все ще потрібні. Що прошивка материнської плати втратила в точності / відповідальності, такі розширення абстрагувались та додавали до відповідальності прошивки диска, щоб заповнити прогалини.
Саме ця гра «коти-мишки» посилається на ваше запитання. Коли BIOS не в змозі зрозуміти диск за певним моментом через його розмір, то будь-які дані, які ви могли б отримати, він буде завантажений для вас під час завантаження - наприклад, завантажувач або ядро - мабуть, краще не знаходитись поза цією точкою. Ось звідки /boot
взявся.
МОЖЕ ТОЧНО ЛИШЕ
В наші дні подібні речі, на щастя, зробили невідповідними наслідки кон'юнктури BIOS. Минуло 30 років, але в останні кілька років його значною мірою замінив стандарт UEFI (або EFI 2.0) . UEFI забезпечує кріплення з хвилини, він ініціалізується в захищеному режимі, він включає в себе власний завантажувач, він забезпечує стійке перезавантаження стійкого флеш-пам’яті змінного сховища, він повинен працювати з декількома незрозумілими zetabytes або будь-яким іншим на диску ... і багато іншого ще. Це далеко не ідеально, але це величезне вдосконалення в порівнянні з попередником.
Навіть аргументи для спеціалізованих завантажувачів, що включають шифрування диска або шаруватих файлових систем, виходять з ладу, коли ви вважаєте, що всі вони повинні обробляти ядро ОС у будь-якому випадку, і якщо вам надається кріплення під час завантаження, ви завжди отримали чіткий- знято для його виконання (особливо враховуючи, що ядро Linux, у його конфігурації за замовчуванням, є власним виконуваним EFI) .
І тому окремий /boot
розділ, мабуть, не повинен вас надто стосуватись, і якщо ви перебуваєте у системі EFI, то ви, мабуть, вже отримали аналог у розділі системи EFI, так як це є вимогою до завантаження режиму EFI.