![]() |
начальная загрузка компьютера
Здравствуйте!
Прошу помочь разобраться с начальной загрузкой компьютера (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 .... Спасибо! |
Неужели всё правильно и нечего добавить или нет интереса к этой важной теме?
Цитата:
Колесниченко О.В, Шишигин И.В, Соломенчук В.Г. Аппаратные средства PC (6-е изд.) и лаконичного Цитата:
или разве не возникает вопрос Цитата:
|
Цитата:
|
Цитата:
Для разработчиков есть другие форумы, но если уж спрашивать, то по частям, а не одним большим текстом. Непонятен также практический смысл для Вас столь детального изучения процесса загрузки или приведения чрезмерно подробных азбучных истин про Reset. Цитата:
|
Цитата:
Ведь в литературе это давно (лет 25-30 назад) в общих словах расписано. А конкретика постоянно меняется. Да и про BIOS пора забывать, --- активно внедряется UEFI |
спасибо за ответы, по меньшей мере, не с собой разговариваю и дело двигается
Цитата:
Цитата:
В данном случае спрашивать по частям не вижу смысла, иначе большинство ответов сведётся к изложению, того, что можно было изложить сразу, и потом долго притираться в понятиях, к тому же не такой большой объём я затронул, в основном блоки крупные, хочется уточнить некоторые потенциально принципиальные детали, о которых возможно я не знаю, или знаю с ошибками когда объём информации велик, а её исчерпываемость не достаточна, то то, что для одного азбучные истины, для другого - вопрос, отложенный для дальнейшего изучения и поиска источника для изучения разве про reset больше нечего добавить? Цитата:
но только сейчас начинают прояснятся вроде бы очевидные вещи, которые раньше были для меня неочевидными: раз сектор диска - это минимальная адресуемая единица хранения информации на дисковых запоминающих устройствах (НЖМД, дискета, CD), значит механизм заключается в том, что bios начинает считывать первую из этих единиц, остаётся вопрос как программа определяет сколько для устройства является минимально адресуемой единицей, очевидно, информация об этом становится доступной во время опроса устройства при выполнении процедуры POST если всё так, то похоже, что удалось выявить нексколько принципиальных деталей Цитата:
Цитата:
Цитата:
схема с UEFI меня тоже интересует, так как, допустим я хочу разработать свою ОС, значит мне как-то необходимо будет загрузить её в оперативную память для выполнения при включении компьютера |
jah,
Цитата:
|
jah, я Вам больше скажу: многие не только не понимают, что происходит с ПК во время включения-выключению. Но им это не особенно нужно в повседневной деятельности.
|
Цитата:
Изучайте спецификации, интересно. |
Цитата:
|
Цитата:
jah, сектор 512 байт – тяжкое наследие времён первых РС и DOS, которые вы решили изучать. |
Цитата:
кстати, в статье википедии про начальную загрузку говорится, что Цитата:
вероятно здесь, имелся в виду блок при адресации LBA, они как раз нумеруются с 0 Цитата:
Цитата:
быть может ответ очевиден для старых BIOS, которые действительно пытаются считать первый 512-байтовый сектор накопителя, а новые BIOS действуют как-то по-другому? (или с 4К-секторных дисков вообще не загрузиться? :)) но те же старые BIOS без проблем считывали первый 2048-байтовый сектор оптических дисков как же это всё разруливается в BIOS? |
Цитата:
Эволюция компьютера насчитывает каких-то 70 лет, но и здесь тысячи моих жизней не хватит, чтобы её постичь. Для одного человека зто мегабитовая бомба.. Что с того, что современные медики знают про живые вирусы..???... --- Живьём их даже вирусологи не видели, а если даже и показать, то нащупать для врача практика верный путь лечения болезни невозможно. Для них толку с этого ноль... Да и не нужно для этого континуальное непротиворечивое знание, которого на самом деле нет. А вот людей лечить нужно... IMHO так |
Цитата:
Позже появились CD-приводы – комплектуемые контроллерами, устанавливаемыми в материнку. Ни о какой загрузке с них поначалу тоже речи не шло, да и диски использовались только для музыки. Затем <и т.д.> Цитата:
"Несколько лет назад мы стояли на краю пропасти. С тех пор мы сделали огромный шаг вперёд!" |
Цитата:
возможно подошли к самому интересному - к пункту 5, так как именно с него начинается то, на что мы можем воздействовать (bios обычно разрабатывают производители материнских плат, так как у этой программы сильная зависимость от конкретной реализации архитектуры, поэтому считаем, что мы на неё воздействовать не можем, то есть можем играть только по её правилам) Цитата:
то есть теперь мы, например, при помощи какого-нибудь hex-редактора, уже можем записать в конец первого сектора 2 байта (55 AA), а далее с начала сектора писать свой код, таблица разделов, как я понимаю, здесь уже необязательна и потенциально мы можем реализовать свою систему для дальнейшей работы последующим шагом для изучения, как я понимаю, должно стать изучение того, как при помощи машинного языка (или его отображения - ассемблера) воздействовать на то, что bios нам предоставляет после своего изучения оборудования на шаге опроса устройств, посмотреть на то, как это всё используется в уже известных ОС (вероятно это можно сделать только в системах с открытым исходным кодом) |
jah,
Раз решили продолжать изобретать свой деревянный лисапед...:gigi::gigi::gigi: --- Читайте MBR своими руками… Автор: (c)Крис Касперски ака мыщъх |
Цитата:
поставил себе глобальную задачу, так мотивация выше на изучение уже существующего Цитата:
|
Время: 00:47. |
Время: 00:47.
© OSzone.net 2001-