Где хранится загрузчик - в ПЗУ, ОЗУ или в другом месте?


30

Согласно записи в Википедии, загрузчик - это небольшая программа, хранящаяся в ПЗУ (часть основной памяти (ОЗУ), не так ли?), Которую можно только читать и не стирать. Я немного озадачен здесь. Означает ли это, что в каждой приобретаемой нами оперативной памяти по умолчанию установлен загрузчик? А также, я прочитал из книги, в которой говорится, что обычно на жестком диске есть область, называемая MBR (Master Boot Record), которая включает в себя загрузчик ...

Так где именно находится этот загрузчик? Разные операционные системы хранят свои загрузчики в разных местах?

Ответы:


43

ROM - это отдельный чип от RAM. Он не требует питания для сохранения своего содержимого, и первоначально не мог быть изменен никакими средствами, но был поставлен с завода. Позднее PROM, или Программируемая постоянная память, заменили истинное ПЗУ. Эти чипы были пустыми с завода, и их можно было записать когда-то, используя специальную процедуру, которая, по существу, сжигала биты чипа, вызывая их состояние. Затем он был заменен EPROM или стираемой программируемой памятью. На этих чипах было небольшое окошко, и если вы пролили на них ультрафиолетовый свет, их можно было стереть, что позволило бы их снова запрограммировать. Затем они были заменены EEPROM или электрически стираемой программируемой памятью. Эти чипы имеют специальную программную процедуру для их стирания, чтобы их можно было перепрограммировать.

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

При использовании BIOS BIOS он просто загружает и запускает первый сектор с диска, с которого он решает загрузиться, который обычно является первым обнаруженным жестким диском. По соглашению, первый сектор жесткого диска, называемый 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 Mac и доступное в качестве замены 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) по его словам». Основная память состоит из двух частей, RAM и ROM. Я просто хочу знать, установлен ли так называемый загрузчик в части ПЗУ основной памяти ... @Sergey
xczzhh

@xczzhh - да BIOS хранится в ПЗУ, которое обнаруживает загрузчик, присутствующий в разделах. После установки любой ОС она создает в BIOS тип записи для обнаружения соответствующего ЗАГРУЗЧИКА.
Atenz

1
@xczzhh, нет, загрузчик находится на жестком диске или другом диске. Он устанавливается вместе с ОС. Если вы не загрузите и не установите обновление от производителя вашей материнской платы, ПЗУ никогда не изменится.
psusi

Вместо этого EFI использует приложения EFI. Он загружает приложение EFI в NVRAM
Suici Doga

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

23

ПЗУ нет в основной памяти:

ПЗУ не является частью основной памяти. Это отдельный чип, который в большинстве случаев встроен в большую микросхему. Более того, ваш компьютер может состоять из нескольких ПЗУ. Они встроены в вашу материнскую плату.

Вообще :

  • ПЗУ очень малы по объему памяти. Эта память является энергонезависимой, в том смысле, что программа, хранящаяся в ПЗУ, не стирается при отключении питания.
  • ПЗУ используются для хранения постоянных программ, которые очень важны для правильной работы вашего оборудования.
  • Типичным примером ПЗУ является чип BIOS. Где хранится программа загрузки и инициализации оборудования очень низкого уровня

Вы упомянули, что читали статью, в которой автор сказал: «ПЗУ является частью основной памяти». Это сбивает с толку, потому что обычно основная память относится к памяти разного типа, например оперативной памяти. Но да, если вы используете термин « Основная память» для всего пространства памяти ПК, то ПЗУ является частью этого пространства памяти. Следует заметить, что, как правило, основная память исключает такую ​​память, как ПЗУ .

Где хранится Bootloader:

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

В терминах системы Ubuntu процесс выглядит следующим образом:

  1. После включения ПК BIOS (который хранится в ПЗУ) автоматически запускается и инициализирует различные части аппаратного обеспечения ПК. Затем он проверяет определенный сектор в указанном первом загрузочном устройстве (обычно это жесткий диск). Этот сектор является загрузочным сектором, размер которого составляет 512 байт.

  2. Программа в загрузочном секторе загружается в память (1-й этап). Эта крошечная программа имеет информацию о том, какие программы следует загружать в память далее и где эта программа находится на диске или загрузочном устройстве. Он загружает эту программу. В Ubuntu это так /boot/grub/core.img.

  3. На втором этапе загрузчик ОС GRUB загружает Ubuntu, загружая ядро ​​и начальный RAM-диск в память и передавая управление ядру. Затем ядро ​​запускается и загружает все необходимые программы, такие как менеджер дисплеев, Gui и т. Д.

Таким образом, мы можем четко сказать, что загрузчик не хранится ни в ПЗУ, ни в ОЗУ, он фактически хранится на жестком диске (или другом загрузочном устройстве, таком как загрузочный компакт-диск, 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

@ Анвар, ссылка на Основную Память мертва.
Мэтт

15

X86-совместимый процессор всегда запускается в так называемом «реальном» режиме, то есть в 16-битном режиме с доступной 1 мегабайтом адресуемой памяти. Из этого адресного пространства, 640K доступны для программ, а также адреса выше, которые отображаются на различные устройства.

Например, адреса, начинающиеся с 0xA000: 0x0000, сопоставляются с видеопамятью, поэтому при записи данных в них данные фактически записываются в память видеоадаптера, отображая пиксели на экране.

Аналогично, BIOS ROM начинается с 0xF000: 0000, поэтому при включении CPU просто начинает выполнять инструкции одну за другой, начиная с этого предварительно определенного адреса. ПЗУ BIOS содержит начальную программу, которая запускается при выполнении самопроверки при включении питания или 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), которого достаточно, чтобы заставить его взглянуть на разные устройства и попробовать их по очереди, пока не найдет то, которое загрузочный.

(Именно поэтому многие системы будут загружаться с CD или DVD, если вы вставите установочный диск ОС в жесткий диск и с него, иначе BIOS (код в ПЗУ, включая код, о котором мы говорим, и некоторые другие Утилиты высокого уровня, с которых все начинается] устанавливается сначала на привод CD / DVD, а затем на жесткий диск, если ничего не находит, твикеры часто устанавливают его на игнорирование привода CD / DVD, если не запрашивается вручную, поэтому не тратит время на раскручивание не загружаемого диска, который был оставлен в накопителе).

Этот код в ПЗУ иногда называют загрузчиком .

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

Этот исполняемый код также называется загрузчиком . Когда мы хотим различить это и то, что происходит дальше, это называется основным загрузчиком (потому что, если мы не создаем наш собственный BIOS, мы игнорируем бит ПЗУ как находящийся вне нашего контроля).

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

Этот код также известен как загрузчик . Когда мы хотим различить это и то, что было раньше, это называется вторичным загрузчиком .

Этот код, возможно, мог бы стать последней стадией процесса. Было бы, если бы у вас была только одна ОС, или если все ОС в вашей системе использовали совместимые загрузчики (например, две установки Linux, которые обе использовали GRUB, поэтому, какой бы GRUB не был обновлен последним, он может предложить загрузиться в любую из них), тогда он представляет меню (при желании) загружает ядро ​​и передает управление операционной системе.

В случае, если у вас ОС, несовместимая с этим загрузчиком, она может загружаться по цепочке. Например, если у вас Windows и Linux на одной машине, опция GRUB для загрузки Windows фактически загрузит еще один загрузчик, который знает только об установках Windows, и перейдет на него. Хотя это был третичный этап в этом процессе, он все еще называется вторичным загрузчиком , поскольку он не знает и не заботится о том, чтобы перед ним работал еще один вторичный загрузчик. Это также относится к установке Linux, в которой используется другой тип вторичного загрузчика.

В основном, когда мы говорим о загрузчике в терминах Linux, мы обычно не имеем в виду код ПЗУ (он не является частью Linux или изменен при установке Linux). Когда мы это делаем, update-grubмы меняем дополнительный загрузчик, который обычно находится в / boot конкретной установки. Когда мы это сделаем, install-grubмы изменим его, а также основной загрузчик в MBR, чтобы в нем было достаточно кода, чтобы знать, где находится / boot (возможно, запускает программный RAID-массив по ходу работы), и будет загружать и выполнять его при выполнении ,

Итак, в итоге вы ошиблись, когда сказали, что ROM является частью основной памяти *, потому что она отдельная. (Действительно, RAM воспринимается как анонимный для ROM). Вы были правы, когда говорили, что там и в MBR был загрузчик, потому что это два этапа процесса, и оба иногда называются по этому имени. И ответ: «Разные ОС хранят свои загрузчики в разных местах?» "главным образом", потому что если вы несовместимы с вторичными загрузчиками, то либо скрываете другие загрузчики (если вы устанавливаете Windows после установки Linux), либо загружаете цепочку в другой по запросу (если вы исправляете эту ситуацию, или устанавливаете Linux после Windows), но ОС может совместно использовать дополнительный загрузчик, если они совместимы (если вы устанавливаете Linux после другого Linux, который использует тот же тип дополнительного загрузчика, и он может видеть другой Linux [иногда программный RAID сбивает с толку и делает необходимым загрузку цепей).

* В те дни, когда можно программно использовать как ПЗУ, так и ОЗУ, это было по-другому. Например, на ZX Spectrum ПЗУ будет иметь размер 16 КБ и будет включать интерпретатор BASIC, а также даст вам отправную точку для загрузки чего-либо в его 48 КБ или 128 КБ (с постраничной загрузкой) или ОЗУ (в этом случае это, по сути, загрузка в этот интерпретатор BASIC, а затем использующий его для загрузки того, что было на ленте), в интерпретаторе BASIC можно было использовать целую кучу функций, которые могли бы использовать программы в ОЗУ (зачем писать функцию триггера, если на компьютере она уже есть в известной позиции ? особенно, когда у вас есть только 48 кБ для всего собственного кода для запуска). Этот ROM также был виден так же, как RAM, только по разным адресам. В таком случае ПЗУ было такой же частью основной памяти, как и ОЗУ, но не доступно для записи.


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 или жесткие диски.

На ПЗУ живет код, который запускает для нас загрузчик, называемый прошивкой (или, точнее, BIOS).


0

В былые времена программа загрузки работала на перфорированной бумажной ленте, похожей на те, что использовались телеграфными машинами или перфокартами («больше их не видно). этот процесс назывался IPL, сокращенно «Начальная загрузка программы». Иногда, если бумажной ленты или карт-ридера не было, нужно было вводить двоичный код IPL непосредственно в процессор через консоль на передней панели. гмм!

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


-1

Загрузчик обычно находится в первом секторе жесткого диска, обычно называемом Master Boot Record.

ура

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.