Де зберігається завантажувач - в ПЗУ, ОЗУ чи деінде?


30

Відповідно до статті wikipedia, завантажувач - це невелика програма, що зберігається в ROM (частина основної пам'яті (RAM), чи не так?), Яку можна читати і не стирати. Я тут трохи спантеличений. Чи означає це, що кожна оперативна пам’ять, яку ми купуємо, за замовчуванням встановлена ​​завантажувач? А також, я читав із книги, в якій сказано, що на жорсткому диску зазвичай є область, що називається MBR (Master Boot Record), яка включає завантажувач ...

То де саме знаходиться цей завантажувач? Чи зберігають різні операційні системи свій завантажувач у різних місцях?

Відповіді:


43

ROM - це окрема мікросхема оперативної пам'яті. Він не потребує енергії для збереження свого вмісту і спочатку не міг бути модифікований будь-якими способами, але надходив із заводу жорстким проводом. Пізніше PROM або програмована пам'ять лише для читання замінила справжній ПЗУ. Ці чіпи вийшли з заводських заводів, і їх можна було записати один раз за допомогою спеціальної процедури, яка по суті спалила біти мікросхеми, що призвело до зміни їх стану. Потім це було замінено на EPROM або стирається програмовану пам'ять. Ці мікросхеми мали на них невелике вікно, і якщо ви просвічуєте ультрафіолетове світло, їх можна було б стерти, що дозволило знову програмувати їх. Потім вони були замінені EEPROM або Електрично стирається програмованою пам'яттю. Ці чіпи мають спеціальну програмну процедуру для їх видалення, щоб їх можна було перепрограмувати.

На материнській платі є певний тип мікросхем ПЗУ, який містить прошивку, яку на мові ПК зазвичай називають BIOS або Basic Input Output System, хоча її сьогодні замінюють прошивкою EFI. Це програмне забезпечення, яке ЦП спочатку починає виконувати при включенні живлення. Вся прошивка виконує ініціалізацію апаратного забезпечення, як правило, забезпечує деякий діагностичний вихід і надає користувачеві можливість налаштувати апаратне забезпечення, потім здійснює пошук та завантаження завантажувача, який, у свою чергу, локалізує та завантажує ОС.

За допомогою BIOS PC він просто завантажує та виконує перший диск з диска, з якого він вирішує завантажитися, а це, як правило, перший виявлений жорсткий диск. Згідно з умовами, перший сектор жорсткого диска, який називається Master Boot Record, містить таблицю розділів DOS, в якій перераховані розташування розділів на диску, і залишає місце для завантажувача. Ubuntu використовує завантажувач GRUB, який розміщує достатньо коду в MBR для завантаження та виконання /boot/grub/core.img. Зазвичай копія цього файлу розміщується в секторах, що слідують за MBR, але перед першим розділом, і саме це завантажує MBR, оскільки знайти місце /boot/grub/core.imgнадто складно зробити належним чином у дуже обмеженому просторі, наявному в MBR .

Зображення ядра grub містить базовий код grub, плюс будь-які модулі, необхідні для доступу, /boot/grubщоб він міг завантажувати туди додаткові модулі, і конфігураційний файл grub, який описує, які операційні системи можуть бути завантажені та де їх можна знайти.

Прошивка EFI, що використовується на Intel Macs та стає доступною як заміна BIOS на останніх материнських платах ПК, вимагає спеціального розділу, який містить файли завантажувача, і вбудована програма досить розумна, щоб знайти ці файли та завантажити один, а не просто завантажувати та виконувати що завгодно знаходиться в першому секторі диска.


Ось абзац, витягнутий з комп'ютерної науки Глена Бруксшира , оглядA small portion of a computer's main memory where the CPU expects to find its initial program is constructed from special nonvolatile memory cells. Such memory is known as read-only memory(ROM) за ним. Основна пам'ять складається з двох частин, оперативної пам’яті та ПЗУ. Мені просто хочеться дізнатися, чи встановлений так званий завантажувач на ROM в основній пам'яті ... @Sergey
xczzhh

@xczzhh - так, BIOS зберігається в ПЗУ, який виявляє завантажувач, присутній у розділах. Після установки будь-якої ОС він створює прапор типу BIOS для виявлення відповідного BOOTLOADER.
atenz

1
@xczzhh, ні, завантажувач завантажений на жорсткий диск чи інший диск. Він встановлюється разом з ОС. Якщо ви не завантажите та не встановите оновлення від виробника материнської плати, ПЗУ ніколи не змінюється.
psusi

EFI використовує додатки EFI замість цього. Завантажує програму EFI у NVRAM
Suici Doga

@SuiciDoga, ні, програми EFI (які в основному обмежені кількома утилітами оновлення прошивки та завантажувачами) зберігаються в системному розділі жорсткого диска EFI. NVRAM - це місце, де EFI зберігає деякі змінні конфігурації, такі як порядок завантаження.
psusi

23

ПЗУ не в головній пам'яті:

ПЗУ не є частиною основної пам'яті. Це окремий чіп, який більшу частину часу вбудований у більші ІС. Більше прикладу, Ваш ПК може складатися з декількох ПЗУ. Вони вбудовані у вашу материнську дошку.

Як правило:

  • ПЗУ дуже мало за розміром пам'яті. Ці пам'яті є енергонезалежними, в тому сенсі програма, що зберігається в ПЗУ, не стирається при відключенні живлення.
  • ПЗУ використовуються для зберігання постійних програм, які дуже важливі для роботи обладнання.
  • Типовим прикладом ПЗУ є мікросхема BIOS. Там, де зберігаються програми завантаження та ініціалізації апаратного забезпечення дуже низького рівня

Ви це згадали, Ви читали статтю, де автор сказав: "ПЗУ - це частина головної пам'яті". Це заплутано, тому що, як правило, основна пам'ять відноситься до пам'яті видів, які є непостійними, наприклад, оперативної пам'яті. Але так, якщо ви використовуєте термін " Основна пам'ять" для всього простору пам'яті ПК, то ROM є частиною цього простору пам'яті. Слід зазначити, що, як правило, основна пам'ять виключає пам'ять таких типів, як ROM .

Де зберігається завантажувач:

Сучасна система використовує двоступеневе завантаження завантаження. На першому кроці крихітна програма завантажується із сектору (частіше називається завантажувальним сектором) жорсткого диска. Ця крихітна програма в свою чергу завантажує програму з десь на диску, що називається завантажувачем. І нарешті завантажувач завантажує ОС.

Що стосується системи Ubuntu, процес такий:

  1. Після включення комп'ютера BIOS (який зберігається в ПЗУ) автоматично запускається та ініціалізує різні частини апаратного забезпечення ПК. Потім він перевіряє певний сектор у визначеному першому завантажувальному пристрої (як правило, на жорсткому диску). Цей сектор є завантажувальним сектором, який має розмір 512 байт.

  2. Програма в завантажувальному секторі завантажується в пам'ять (1-й етап). Ця крихітна програма містить інформацію, які програми слід завантажувати в пам'ять далі, а де ця програма знаходиться на пристрої Disk або Boot. Він завантажує цю програму. В Ubuntu це так /boot/grub/core.img.

  3. На другому етапі OS-Loader, GRUB, завантажує Ubuntu, завантажуючи ядро ​​та початковий диск ram в пам'ять і передаючи ядро ​​управління. Потім ядро ​​запускає і завантажує всі необхідні програми, такі як менеджер дисплеїв, Gui та ін.

Отже, ми можемо чітко сказати, що завантажувач не зберігається ні в ROM, ні в оперативній пам'яті; він фактично зберігається на жорсткому диску (або іншому завантажувальному пристрої, такому як завантажувальний CDROM, USB-накопичувачі тощо), саме кажучи про перший сектор жорсткий диск, розміром 512 байт і його часто називають завантажувальним сектором . І цей завантажувач завантажує завантажувач ОС (в Ubuntu, це grub), який також знаходиться на жорсткому диску (тобто /boot/grub/папці), і його завдання - завантажити ОС (скажімо, Ubuntu).

Як тест, вийміть жорсткий диск (і всі інші пристрої для завантаження) і спробуйте завантажити. Ви можете перейти до кроку BIOS, але після цього кроку ви нічого не можете завантажувати. Найімовірніше, BIOS скаже: " Не знайдено завантажувального пристрою " або " Не знайдено операційної системи " або щось подібне.

Сподіваюся, що ця відповідь допоможе.


Для отримання додаткової інформації ви можете відвідати ці посилання:

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory

2
ПЗУ не було швидше оперативної пам'яті вже близько десяти років. Насправді одне з перших, що робить сучасний BIOS - це копіювати себе в оперативну пам’ять, оскільки оперативна пам’ять набагато швидша.
Девід Шварц

1
@DavidSchwartz, Вже минуло десятиліття. Кожен комп'ютерний BIOS, який я використовував у середині 90-х, мав можливість тініти біос в оперативній пам'яті на швидкість.
psusi

@Anwar, посилання на головну пам'ять мертве.
Метт

15

Процесор, сумісний з x86, завжди запускається в так званому "реальному" режимі, що представляє собою 16-бітний режим з наявністю 1 мегабайт адресної пам'яті. З цього адресного простору 640K доступні для програм та адрес вище, які відображаються на різних пристроях.

Наприклад, адреси, починаючи з 0xA000: 0x0000, відображаються у відео оперативній пам’яті, тому, записуючи дані, вони фактично записують дані в пам'ять відеоадаптера, що відображає пікселі на екрані.

Аналогічно, BIOS ROM починається з 0xF000: 0000, тому процесор при включенні просто починає виконувати інструкції по черзі, починаючи з цієї попередньо визначеної адреси. БІОМ-ПЗУ містить початкову програму, яка запускається, виконуючи "самотест при включенні" або POST. З Вікіпедії:

Програмне забезпечення BIOS вбудоване в ПК і є першим кодом, який управляється ПК при включенні ("прошивка завантаження"). Коли ПК запускається, першим завданням для BIOS є самовипробування при включенні, яке ініціалізує та ідентифікує системні пристрої, такі як процесор, оперативна пам’ять, карта відображення відео, клавіатура та миша, жорсткий диск, привід оптичного диска та інше обладнання. Потім BIOS знаходить програмне забезпечення завантажувача, яке знаходиться на периферійному пристрої (позначеному як "завантажувальний пристрій"), наприклад, на жорсткому диску або CD / DVD, і завантажує та виконує це програмне забезпечення, даючи йому управління ПК. 2 Цей процес відомий як завантаження або завантаження, що є коротким для завантаження.

Прошивка BIOS відповідає за зчитування першого сектора з диска в пам'ять і передачу управління невеликій програмі, яка, знову ж таки, знаходиться за певною адресою там. Потім завантажувач MBR може почати завантажувати операційну систему безпосередньо (як це було у випадку з MS-DOS) або завантажувати "другу ступінь", яка не обмежується обмеженнями одного дискового сектора.

Завантажувачі, які використовують багатоступеневий підхід, можуть бути досить складними з текстовим або графічним інтерфейсом, що дозволяє користувачеві вибрати, з якого диска чи розділу завантажити операційну систему.

Отже, якщо, як пропонує Урі, вас цікавить, чи можуть спільно існувати завантажувач Windows і GRUB, відповідь: власне MBR може містити лише один завантажувач першого ступеня (давай, весь сектор складає всього 512 байт) , але другий етап завантажувача може мати змогу "ланцюгово завантажувати" операційні системи з різних розділів. Завантажувач Windows здатний розпізнавати та завантажувати Windows, тоді як GRUB може завантажувати Linux або передавати управління іншому завантажувачу даних, що зберігається у записі завантаження томів одного з розділів, що дозволяє завантажувати Windows чи іншу ОС. Останній процес називається ланцюговим завантаженням.

При встановленні Ubuntu на комп'ютері, на якому встановлено Windows, GRUB буде встановлений у MBR, і ви зможете завантажувати і Ubuntu, і Windows.

Однак якщо Windows буде встановлено після Ubuntu, GRUB буде замінено завантажувачем Windows, і вам потрібно буде знову встановити GRUB, щоб мати можливість знову завантажити Ubuntu.


Я думаю, він хоче знати, чи може завантажувач Windows та GRUB співіснувати разом чи ні. Диски UEFI, GPT не використовують MBR, як це впливає на них?
Урі Еррера

ПЗУ BIOS знаходиться в сегменті F000: трохи нижче 1 Мб. 640k - це сегменти нижче A000:, які доступні для використання в реальному режимі ОС та програм.
psusi

@psusi: ти маєш рацію, я переформулював цю частину
Сергій

Дякую за відповідь. Ви маєте на увазі, що для завантаження операційної системи задіяні кілька завантажувачів (один в BIOS, а інший в MBR?)? Це для мене нове ... :)
xczzhh

@xczzhh Добре, код у BIOS не називається "завантажувачем", той, що зберігається на диску. Я оновив свою відповідь, щоб зробити це зрозумілим.
Сергій

4

Конфлікт між тим, що ви говорите про те, що завантажувач завантажений у ПЗУ, і той, що знаходиться в MBR, можливо, пов’язаний з тим, що завантажувач використовується для будь-якого коду, який розробив, як зробити мінімум для завантаження коду, щоб змусити комп'ютер зробити щось корисне, включаючи кожне стан у багатоступеневому завантаженні.

Отже, початковий стан - це мати комп'ютер, який є програмованим пристроєм, але не знає, як завантажити програмне забезпечення для запуску, оскільки на ньому не завантажено жодного програмного забезпечення. (А значить, завантаження з підтягування себе з завантажувальних пристроїв ).

Історично було кілька різних рішень цієї проблеми, але в наші дні ми починаємо з деякого коду в ПЗУ (здебільшого, мабуть, строго EEPROM), якого достатньо, щоб він міг переглянути різні пристрої та спробувати їх по черзі, поки не знайде той, який є завантажувальний.

(Ось чому багато систем завантажуються з компакт-диска чи DVD-диска, якщо ви вставите диск інсталятора ОС на жорсткий диск і з нього, інакше - BIOS [код на ROM, включаючи код, про який ми говоримо, і деякі інші низькі -урожай, який починає робити], налаштовується спочатку на диск CD / DVD, потім на жорсткий диск, якщо він нічого не знаходить, налаштування часто встановлюють його ігнорувати пристрій CD / DVD, якщо вручну не вимагають цього. не витрачає час на спінінг незавантажуваного диска, який залишився на диску).

Цей код в ПЗУ іноді називають завантажувачем .

Коли він знає, на якому дискові дивитись, то він перегляне MBR, який містить інформацію про первинні розділи - як ви могли пізніше подивитися / / / boot або C: / (у системі Windows), якщо ви навіть не зробили знаєте, якою частиною диска був який розділ, незважаючи на те, як був змонтований кожен розділ? - і деякий код з подальшими інструкціями щодо виконання. (До речі, це пояснює, чому деякі ОС, як-от Windows, можна встановлювати лише на первинному розділі. Деталі цих розділів знаходяться в MBR, і це єдина інформація про розділи, яку читав їх завантажувач, і він не завантажує EBR на дізнайтеся про логічні розділи, наскільки це стосується цих розділів ще не існує).

Цей виконуваний код також називається завантажувачем . Коли ми хочемо розрізнити це і наступне, це називається первинним завантажувачем (тому що, якщо ми не робимо власну BIOS, ми ігноруємо біт ROM як поза нашим контролем).

Цей код буде дуже малим, оскільки для його вміщення всього близько 400 байт, тому, щоб зробити щось реальне, він завантажить ще якийсь код, який може бути більшим, оскільки йому не доведеться мати справу з цим обмеженням.

Цей код також відомий як завантажувач . Коли ми хочемо розрізнити це і те, що було раніше, це називається вторинним завантажувачем .

Цей код, можливо, може бути завершальним етапом у процесі. Якщо у вас є лише одна ОС або якщо всі ОС вашої системи використовують сумісні завантажувачі (наприклад, дві встановлення Linux, які обидва використовують GRUB, тому те, що GRUB було оновлено останнім, може запропонувати завантажитися в будь-яку з них), то це представляє меню (за бажанням) завантаження в ядро ​​та передає контроль над операційною системою.

У випадку, якщо у вас ОС, яка не сумісна з цим завантажувачем, вона може завантажувати ланцюг. Наприклад, якщо у вас на одній машині є Windows та Linux, опція GRUB для завантаження Windows насправді завантажить ще один завантажувач, який знає лише про інсталяції Windows, і перейде до нього. Хоча це був третій етап у процесі, він все ще називається вторинним завантажувачем , тому що він не знає і не піклується про те, щоб перед ним працював ще один вторинний завантажувач. Так би було і з установкою Linux, яка використовувала інший тип вторинного завантажувача.

Здебільшого, коли ми говоримо про завантажувач з точки зору Linux, ми зазвичай не маємо на увазі код ROM (він не є частиною Linux або змінений установкою Linux). Коли ми це робимо, update-grubми змінюємо вторинний завантажувач, який, як правило, знаходиться в / завантажуванні певної установки. Коли ми це робимо, install-grubми змінюємо його, а також основний завантажувач у MBR, щоб він мав достатньо коду, щоб знати, де / boot (можливо, запускаючи програмний RAID, як він йде), і буде завантажувати та виконувати це, коли він сам виконується .

Отже, підсумовуючи, ви помилилися, сказавши, що ROM є частиною головної пам’яті *, оскільки це окремо. (Дійсно, оперативна пам'ять сприймається як антонімічна для ROM). Ви були праві, сказавши, що там і в MBR був завантажувач, тому що це два етапи процесу, і обидва іноді називаються цим ім'ям. І відповідь "Чи зберігають різні ОС свої завантажувачі в різних місцях?" є "здебільшого", тому що якщо ви несумісні вторинні завантажувачі, то приховуватимуть інші завантажувачі (якщо ви встановите Windows після встановлення Linux) або ланцюгові завантаження в інший, якщо це вимагається (якщо ви виправите цю ситуацію або встановите Linux після Windows), але ОС може поділитися вторинним завантажувачем, якщо вони сумісні (якщо ви встановите Linux після іншого Linux, який використовує той же тип вторинного завантажувача, і він може бачити інший Linux [іноді програмне забезпечення RAID плутає речі та робить необхідну завантаження ланцюга).

* У дні, коли програмно можна було б використовувати як ROM, так і оперативну пам’ять, це було інакше. Наприклад, у спектрі ZX, ПЗУ склав би 16кіБ і включав інтерпретатор BASIC, а також дасть вам вихідну точку для завантаження чогось у свої 48кіБ або 128 Кбіт (на сторінці) або оперативної пам’яті (у такому випадку це, по суті, завантаження в що інтерпретатор BASIC, а потім використовуючи його для завантаження того, що було на стрічці), у інтерпретатора BASIC з'явився цілий ряд функцій, які могли використовувати програми в оперативній пам'яті (навіщо писати триггерну функцію, коли на комп'ютері вже є відома позиція ? особливо, якщо у вас є лише 48 Кб на весь свій власний код. Цей ROM також був видимий так само, як і ОЗУ, лише за різними адресами. У такому випадку ПЗУ був стільки ж частиною основної пам'яті, скільки оперативної пам'яті, але не для запису.


0

Складіть мінімальний робочий приклад та запустіть його на емуляторі, щоб зрозуміти ці поняття:

printf '\364%509s\125\252' > main.img
qemu-system-x86_64 -hda main.img

Це надзвичайно простий "завантажувач", який виконує одну hltінструкцію. Більше інформації за адресою: https://stackoverflow.com/a/32483545/895245

Потім ви можете запустити його на справжньому обладнання за допомогою:

sudo dd if=main.img of=/dev/sdX

та підключення USB до комп'ютера та завантаження з нього.

Коли ви це зробите, стає зрозуміло, що завантажувач - це те, що живе на постійному диску, наприклад, USB або жорстких дисках.

Що живе на ROM - це код, який запускає завантажувач для нас, який називається прошивкою (або менш точно BIOS).


0

За старих днів програма завантаження розміщувалася на перфорованій паперовій стрічці, подібній до тих, що використовуються телеграфними апаратами або носіями перфокарт («більше не бачимо обох навколо). процес, який раніше називався IPL, скорочується для початкової завантаження програми. Іноді, якщо паперової стрічки чи зчитувача карт не було, потрібно було б ввести двійковий код IPL безпосередньо в процесор через консоль на передній панелі. коли!

В даний час код IPL знаходиться в pROM, які при виконанні по черзі завантажують і виконують будь-які вторинні завантажувачі, призначені для завантаження (завантаження) бажаної операційної системи. вторинний завантажувач може знаходитися на будь-якому носії в будь-якій частині установки, відомої або адресованій IPL-кодом.


-1

Завантажувач зазвичай знаходиться в першому секторі жорсткого диска, зазвичай його називають Master Boot Record.

Ура

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.