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

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

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

30
задан 10 August 2012 в 09:48

7 ответов

Сделайте минимальный рабочий пример и запустите его на эмуляторе, чтобы понять эти понятия:

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

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

0
ответ дан 10 August 2012 в 09:48

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

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

0
ответ дан 10 August 2012 в 09:48

ROM не находится в Оперативной памяти:

ROM не является частью Оперативной памяти. Это - отдельная микросхема, которая большую часть времени встроена в большем IC. Больше примера, Ваш ПК может состоять из нескольких ROM. Они создаются в Вашей материнской плате.

Обычно:

  • ROM является очень маленьким в емкости памяти. Они память является энергонезависимой, в смысле, программа, сохраненная в ROM, не становятся стертыми с закрытием питания.
  • ROM используется для хранения постоянных программ, которые очень важны аппаратные средства для выполнения правильно.
  • Типичным примером ROM является микросхема, содержащая BIOS. Где программа очень низкого уровня загружающиеся и инициализирующие аппаратные средства хранится

Вы упомянули, чтение статьи, где автор сказал, "ROM является частью Оперативной памяти". Это сбивает с толку, потому что обычно Оперативная память относится к памяти видов, которые энергозависимы, таковы как RAM. Но да, Если Вы используете термин Оперативной памяти для всего пространства памяти ПК, затем ROM является частью того пространства памяти. Необходимо отметить, что, обычно Оперативная память исключает память видов как ROM.

Где сохраненный Загрузчик:

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

С точки зрения системы Ubuntu как следует процесс:

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

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

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

Так, мы можем ясно сказать, что загрузчик ни не хранится в ROM, ни в RAM, Это на самом деле хранится на Жестком диске (или другое Устройство загрузки, такое как загрузочный CD-ROM, Карты памяти и т.д.), точно говоря первый сектор жесткого диска, который имеет размер 512 байтов и часто называемый загрузочным сектором. И этот загрузчик загружает загрузчик ОС (в Ubuntu, это - личинка), который также находится в жестком диске (т.е. /boot/grub/ папка), и это - задача, загружается, ОС (скажите, Ubuntu).

Как тест, Удалите жесткий диск (и все другое устройство загрузки) и попытайтесь загрузиться. Можно подойти к шагу BIOS, но после того шага, Вы ничего не можете загрузить. По всей вероятности BIOS скажет, "Никакое Устройство загрузки, Найденное" или "Никакая Операционная система, найденная" или что-то подобное.

Надеюсь, что этот ответ поможет.


Для получения дополнительной информации можно хотеть посетить эти ссылки:

  1. http://en.wikipedia.org/wiki/Read-only_memory
  2. http://en.wikipedia.org/wiki/Random-access_memory
23
ответ дан 10 August 2012 в 09:48

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

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

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

0
ответ дан 10 August 2012 в 09:48

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

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

В BIOS компьютера он просто загружает и запускает первый сектор с диска, с которого он решает загрузиться, который обычно является первым обнаруженным жестким диском. По соглашению, первый сектор жесткого диска, называемый Master Boot Record, содержит таблицу разделов DOS, в которой перечислены местоположения разделов на диске, и оставляет место для загрузчика. Ubuntu использует загрузчик GRUB, который помещает достаточное количество кода в MBR для загрузки и выполнения /boot/grub/core.img. Обычно копия этого файла помещается в секторах, следующих за MBR, но перед первым разделом, и это именно то, что MBR загружает, поскольку найти местоположение /boot/grub/core.img слишком сложно, чтобы сделать его правильно в очень ограниченном доступном пространстве. в МБР.

Образ ядра grub содержит базовый код grub, а также все модули, необходимые для доступа к /boot/grub, чтобы он мог загружать туда дополнительные модули, и файл конфигурации grub, который описывает, какие операционные системы можно загружать и где они могут быть. найдено.

Микропрограмма EFI, используемая на Intel Mac и доступная в качестве замены BIOS на большинстве современных материнских плат для ПК, требует выделенного раздела, содержащего файлы загрузчика, и микропрограмма достаточно умна, чтобы найти эти файлы и загрузить один вместо простой загрузки. и выполнение всего, что находится в первом секторе диска.

0
ответ дан 10 August 2012 в 09:48

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

Таким образом, исходным состоянием является наличие компьютера, который является программируемым устройством, но не знает, как загрузить программное обеспечение для запуска, потому что на нем нет загруженного программного обеспечения. (И, следовательно, boot из вытаскивают себя из своих бутстрапов ).

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

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

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

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

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

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

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

Этот код, возможно, мог бы стать последней стадией процесса. Если бы у вас была только одна ОС, или если все ОС в вашей системе использовали совместимые загрузчики (например, две установки 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 путает вещи и делает необходимым загрузку цепей).

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

0
ответ дан 10 August 2012 в 09:48

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

Ура

0
ответ дан 10 August 2012 в 09:48

Другие вопросы по тегам:

Похожие вопросы: