|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » начальная загрузка компьютера |
|
начальная загрузка компьютера
|
Старожил Сообщения: 215 |
Здравствуйте!
Прошу помочь разобраться с начальной загрузкой компьютера (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 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать Цитата alef2474:
![]() jah, сектор 512 байт – тяжкое наследие времён первых РС и DOS, которые вы решили изучать. |
|
------- Отправлено: 18:38, 04-09-2014 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Цитата Tau_0:
![]() кстати, в статье википедии про начальную загрузку говорится, что Цитата:
вероятно здесь, имелся в виду блок при адресации LBA, они как раз нумеруются с 0 Цитата mwz:
Цитата jah:
быть может ответ очевиден для старых BIOS, которые действительно пытаются считать первый 512-байтовый сектор накопителя, а новые BIOS действуют как-то по-другому? (или с 4К-секторных дисков вообще не загрузиться? ![]() но те же старые BIOS без проблем считывали первый 2048-байтовый сектор оптических дисков как же это всё разруливается в BIOS? |
||||
Последний раз редактировалось jah, 04-09-2014 в 23:21. Отправлено: 23:07, 04-09-2014 | #12 |
Ветеран Сообщения: 6211
|
Профиль | Отправить PM | Цитировать Цитата jah:
![]() Эволюция компьютера насчитывает каких-то 70 лет, но и здесь тысячи моих жизней не хватит, чтобы её постичь. Для одного человека зто мегабитовая бомба.. Что с того, что современные медики знают про живые вирусы..???... --- Живьём их даже вирусологи не видели, а если даже и показать, то нащупать для врача практика верный путь лечения болезни невозможно. Для них толку с этого ноль... Да и не нужно для этого континуальное непротиворечивое знание, которого на самом деле нет. А вот людей лечить нужно... IMHO так |
|
Отправлено: 23:46, 04-09-2014 | #13 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать Цитата jah:
Позже появились CD-приводы – комплектуемые контроллерами, устанавливаемыми в материнку. Ни о какой загрузке с них поначалу тоже речи не шло, да и диски использовались только для музыки. Затем <и т.д.> Цитата jah:
"Несколько лет назад мы стояли на краю пропасти. С тех пор мы сделали огромный шаг вперёд!" |
||
------- Последний раз редактировалось mwz, 05-09-2014 в 00:47. Причина: Уточнение развития CD Отправлено: 00:41, 05-09-2014 | #14 |
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Цитата mwz:
возможно подошли к самому интересному - к пункту 5, так как именно с него начинается то, на что мы можем воздействовать (bios обычно разрабатывают производители материнских плат, так как у этой программы сильная зависимость от конкретной реализации архитектуры, поэтому считаем, что мы на неё воздействовать не можем, то есть можем играть только по её правилам) Цитата jah:
то есть теперь мы, например, при помощи какого-нибудь hex-редактора, уже можем записать в конец первого сектора 2 байта (55 AA), а далее с начала сектора писать свой код, таблица разделов, как я понимаю, здесь уже необязательна и потенциально мы можем реализовать свою систему для дальнейшей работы последующим шагом для изучения, как я понимаю, должно стать изучение того, как при помощи машинного языка (или его отображения - ассемблера) воздействовать на то, что bios нам предоставляет после своего изучения оборудования на шаге опроса устройств, посмотреть на то, как это всё используется в уже известных ОС (вероятно это можно сделать только в системах с открытым исходным кодом) |
||
Отправлено: 20:28, 05-09-2014 | #15 |
Ветеран Сообщения: 6211
|
Профиль | Отправить PM | Цитировать jah,
Раз решили продолжать изобретать свой деревянный лисапед... ![]() ![]() ![]() --- Читайте MBR своими руками… Автор: (c)Крис Касперски ака мыщъх |
Отправлено: 23:23, 05-09-2014 | #16 |
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Цитата Tau_0:
![]() поставил себе глобальную задачу, так мотивация выше на изучение уже существующего Цитата Tau_0:
|
||
Отправлено: 09:25, 06-09-2014 | #17 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|