Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » начальная загрузка компьютера

Ответить
Настройки темы
начальная загрузка компьютера
jah jah вне форума

Старожил


Сообщения: 215
Благодарности: 7

Профиль | Отправить PM | Цитировать


Изменения
Автор: jah
Дата: 03-09-2014
Здравствуйте!

Прошу помочь разобраться с начальной загрузкой компьютера (IBM PC-совместимого).

За основу беру статью википедии
Начальная загрузка компьютера
и некоторые другие статьи оттуда,
а также начал прикладываться к
Intel® 64 and IA-32 Architectures Software Developer Manuals

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


Итак, нажимаем кнопку включения (power) или кнопку сброса (reset).
В последнем случае сначала идёт так называемое "снятие сигнала RESET" (здесь нужно будет уточнить, что конкретно происходит).

Далее

1. x86-совместимый процессор начинает работать в реальном режиме (Real-address mode) и исполняет инструкции с предопределённого адреса FFFF:0 (формат "segment_selector : offset" === "сегмент:смещение"), то есть с начала второго сегмента.
Исполнение инструкций с адреса оперативной памяти FFFF:0 является следствием помещения встроенными средствами компьютера, значения FFFF в сегментный регистр CS (таким образом, это значение FFFF расценивается как адрес, с которого начинается сегмент кода программы) и значения 0 в регистр-указатель инструкций IP (таким образом, это значение 0 расценивается как адрес (смещение) внутри сегмента CS, с которого начинается инструкция, которую процессор должен выполнить следующей).

Для справки:
Режим реальных адресов является программным окружением (programming environment) для процессора Intel 8086, которое для совместимости сохранёно в последующих версиях процессоров.
У процессора Intel 8086 всего 20 адресных линий, поэтому ему доступно всего 2 ^ 20 = 1 048 576 (физических) адресов оперативной памяти (это адреса от 0 до 1 048 575),
то есть 1МиБ (мебибайт (а может и мёбибайт), 1MиБ = 2^20 = 1 048 576 Б (байт), то есть приблизительно 10^6 = 1МБ (мегабайт)).
1 сегмент в реальном режиме занимает 64КиБ (кибибайт, 1КиБ = 2^10 = 1024 Б (байт), то есть приблизительно 10^3 = 1КБ (килобайт)),
64КиБ = 64 * 1024 = 65536 Б, то есть в одном сегменте доступны эффективные адреса (смещения, offset) от 0 до 65536.
Сегменты также называются страницами памяти.
Всего сегментов 16 (= 1 048 576 / 65536).
Также есть ещё понятие параграфа: 1 параграф = 16 байт, в 1МиБ ровно 65536 параграфов.
Каждый сегмент удовлетворяет условию: он должен начинаться ровно на границе параграфа.
Селектор сегмента как раз представляет собой номер параграфа, с которого начинается сегмент,
то есть линейный (он отображает физический) адрес байта оперативной памяти при таком раскладе вычисляется как segment_selector * 16 + offset.

2. В конец доступного процессору физического адресного пространства оперативной памяти (а в реальном режиме ему доступен 1МиБ, реально чуть больше из-за наличия дополнительной памяти типа Upper Memory Area, High Memory Area), опять же встроенным в материнскую плату механизмом, копируется содержимое микросхемы BIOS.
По адресу FFFF:0 содержится команда безусловного перехода (нечто типа jmp в ассемблере) на начало этого кода BIOS (скопированного из микросхемы BIOS).
Тут, вроде бы очевидно, что начало кода BIOS и адрес, на который идёт безусловный переход в команде по адресу FFFF:0, должны зависеть от размера программы BIOS (обычно говорят о наборе программ BIOS).
Если так, то размер новой версии BIOS при перепрошивке либо должен совпадать с размером прежней версии, либо при несовпадении размеров переводить командой безусловного перехода из места, в которое будет осуществлён безусловный переход по команде по адресу FFFF:0 в место начала кода новой версии.

Вероятно здесь важно понимать, что процессор не читает напрямую содержимое микросхемы микросхемы BIOS, а читает её копию, отображённую (встроенными механизмами платы) в оперативную память.
Далее, говоря "BIOS что-то делает", имеется в виду эти действия являются результатами выполнения кода BIOS в оперативной памяти.

3. BIOS запускает процедуру POST (Power-On Self-Test - самотестирование при включении), которая производит опрос и тестирование доступных устройств и ряд других операций,
после успешного выполнения POST программа BIOS продолжает исполняться дальше или пытается сообщить о возникших проблемах.

4. BIOS опрашивает по порядку загрузочные устройства из списка, который сформирован настройками программы BIOS Setup (или CMOS Setup, эти настройки хранятся в CMOS-памяти, питаемой от батарейки), опрос продолжается до тех пор, пока загрузочное устройство не будет найдено или список не закончится.

5. BIOS считывает первый (нулевой - под номером 0) сектор (в 512 байт) загрузочного устройства (например, жёсткого диска), в котором предполагается находится MBR (Master Boot Record - главная загрузочная запись),
размещает содержимое этого сектора в оперативной памяти по адресу 0:07C0 (07C0h = 31744),
проверяет значение (сигнатуру) в последних двух байтах этого содержимого (там должно быть значение 55 AA)
и при корректной сигнатуре управление передаётся в начало этого содержимого.

6. Далее всё зависит от содержимого MBR ....





Спасибо!

Отправлено: 00:43, 03-09-2014

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата alef2474:
Тогда читает информацию с сектора большего размера. »
И обломится, если это жёсткий диск с сектором 4K Native.

jah, сектор 512 байт – тяжкое наследие времён первых РС и DOS, которые вы решили изучать.

-------
Mikhail Zhilin


Отправлено: 18:38, 04-09-2014 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

jah jah вне форума Автор темы

Старожил


Сообщения: 215
Благодарности: 7

Профиль | Отправить PM | Цитировать


Цитата Tau_0:
При всей своей очевидности --- Это бездна, это мрак, это каша манная... »
это мотивация на провал или действительно всё так плохо?




кстати, в статье википедии про начальную загрузку говорится, что
Цитата:
Нулевой сектор загрузочного жесткого диска содержит так называемую «Главную загрузочную запись»
хотя сами сектора нумеруются, начиная с единицы
вероятно здесь, имелся в виду блок при адресации LBA, они как раз нумеруются с 0




Цитата mwz:
И обломится, если это жёсткий диск с сектором 4K Native.
jah, сектор 512 байт – тяжкое наследие времён первых РС и DOS, которые вы решили изучать. »
неужели ответ на вопрос
Цитата jah:
а что происходит, если сектор диска не 512, а, к примеру, 4096 байт? »
оказался не столь очевидным?
быть может ответ очевиден для старых BIOS, которые действительно пытаются считать первый 512-байтовый сектор накопителя, а новые BIOS действуют как-то по-другому? (или с 4К-секторных дисков вообще не загрузиться? )
но те же старые BIOS без проблем считывали первый 2048-байтовый сектор оптических дисков
как же это всё разруливается в BIOS?

Последний раз редактировалось jah, 04-09-2014 в 23:21.


Отправлено: 23:07, 04-09-2014 | #12


Аватара для Tau_0

Ветеран


Сообщения: 6211
Благодарности: 1393

Профиль | Отправить PM | Цитировать


Цитата jah:
это мотивация на провал или действительно всё так плохо? »
Я верую в теорию эволюции Чарльза Дарвина, но проследить эволюцию от амёбы до человека невозможно..

Эволюция компьютера насчитывает каких-то 70 лет, но и здесь тысячи моих жизней не хватит, чтобы её постичь. Для одного человека зто мегабитовая бомба..

Что с того, что современные медики знают про живые вирусы..???... --- Живьём их даже вирусологи не видели, а если даже и показать, то нащупать для врача практика верный путь лечения болезни невозможно. Для них толку с этого ноль... Да и не нужно для этого континуальное непротиворечивое знание, которого на самом деле нет. А вот людей лечить нужно...

IMHO так
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:46, 04-09-2014 | #13

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата jah:
старые BIOS без проблем считывали первый 2048-байтовый сектор оптических дисков »
Старые BIOS не могли считать первый 2048-байтовый сектор оптических дисков: CD тогда и в проекте не было.
Позже появились CD-приводы – комплектуемые контроллерами, устанавливаемыми в материнку. Ни о какой загрузке с них поначалу тоже речи не шло, да и диски использовались только для музыки.
Затем <и т.д.>

Цитата jah:
(или с 4К-секторных дисков вообще не загрузиться? ) »
Именно так. Поскольку они читают этот сектор не для собственного удовольствия, а чтобы знать, куда передать управление дальше (всё числа дальше отвлечённые, просто для качественной оценки). И передают, скажем, на десятый сектор (не на адрес!), где лежит уже более продвинутая часть загрузчика. А десятый-то сектор оказывается не на расстоянии 5120 байт, куда он действительно был записан более высокоуровневыми методами, а на 40 килобайтах.

"Несколько лет назад мы стояли на краю пропасти. С тех пор мы сделали огромный шаг вперёд!"

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 05-09-2014 в 00:47. Причина: Уточнение развития CD

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:41, 05-09-2014 | #14

jah jah вне форума Автор темы

Старожил


Сообщения: 215
Благодарности: 7

Профиль | Отправить PM | Цитировать


Цитата mwz:
Именно так. Поскольку они читают этот сектор не для собственного удовольствия, а чтобы знать, куда передать управление дальше (всё числа дальше отвлечённые, просто для качественной оценки). И передают, скажем, на десятый сектор (не на адрес!), где лежит уже более продвинутая часть загрузчика. А десятый-то сектор оказывается не на расстоянии 5120 байт, куда он действительно был записан более высокоуровневыми методами, а на 40 килобайтах. »
хорошо, диски с секторами в 4096 байт пока отбрасываем, диски с 512-байтовыми секторами, насколько я понял, сейчас ещё нормально поддерживаются в bios
возможно подошли к самому интересному - к пункту 5, так как именно с него начинается то, на что мы можем воздействовать (bios обычно разрабатывают производители материнских плат, так как у этой программы сильная зависимость от конкретной реализации архитектуры, поэтому считаем, что мы на неё воздействовать не можем, то есть можем играть только по её правилам)

Цитата jah:
5. BIOS считывает первый (нулевой - под номером 0) сектор (в 512 байт) загрузочного устройства (например, жёсткого диска), в котором предполагается находится MBR (Master Boot Record - главная загрузочная запись),
размещает содержимое этого сектора в оперативной памяти по адресу 0:07C0 (07C0h = 31744),
проверяет значение (сигнатуру) в последних двух байтах этого содержимого (там должно быть значение 55 AA)
и при корректной сигнатуре управление передаётся в начало этого содержимого. »
если всё правильно расписано, то на проверке сигнатуры 55AA и передаче управления на начало первого 512-байтового сектора программа bios отдаёт управление нам,
то есть теперь мы, например, при помощи какого-нибудь hex-редактора, уже можем записать в конец первого сектора 2 байта (55 AA), а далее с начала сектора писать свой код,
таблица разделов, как я понимаю, здесь уже необязательна и потенциально мы можем реализовать свою систему для дальнейшей работы

последующим шагом для изучения, как я понимаю, должно стать изучение того, как при помощи машинного языка (или его отображения - ассемблера) воздействовать на то, что bios нам предоставляет после своего изучения оборудования на шаге опроса устройств, посмотреть на то, как это всё используется в уже известных ОС (вероятно это можно сделать только в системах с открытым исходным кодом)

Отправлено: 20:28, 05-09-2014 | #15


Аватара для Tau_0

Ветеран


Сообщения: 6211
Благодарности: 1393

Профиль | Отправить PM | Цитировать


jah,
Раз решили продолжать изобретать свой деревянный лисапед...
--- Читайте
MBR своими руками…
Автор: (c)Крис Касперски ака мыщъх
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:23, 05-09-2014 | #16

jah jah вне форума Автор темы

Старожил


Сообщения: 215
Благодарности: 7

Профиль | Отправить PM | Цитировать


Цитата Tau_0:
jah,
Раз решили продолжать изобретать свой деревянный лисапед... »
что имею, на том и рассуждаю
поставил себе глобальную задачу, так мотивация выше на изучение уже существующего

спасибо

Отправлено: 09:25, 06-09-2014 | #17



Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » начальная загрузка компьютера

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
8 / 2012 - [решено] Загрузка компьютера thevlados907@vk Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 3 16-06-2013 13:15
загрузка компьютера DeBill Непонятные проблемы с Железом 0 11-06-2011 15:20
[решено] долгая загрузка компьютера PV25 Непонятные проблемы с Железом 3 17-04-2011 22:05
2008 R2 - Начальная настройка DrZoD Windows Server 2008/2008 R2 1 04-12-2010 12:02
Начальная настройка Samba Admiral83 Общий по Linux 7 27-01-2006 23:37




 
Переход