Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   начальная загрузка компьютера (http://forum.oszone.net/showthread.php?t=287399)

jah 03-09-2014 00:43 2397648

начальная загрузка компьютера
 
Здравствуйте!

Прошу помочь разобраться с начальной загрузкой компьютера (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 ....





Спасибо!

jah 03-09-2014 22:40 2398054

Неужели всё правильно и нечего добавить или нет интереса к этой важной теме?


Цитата:

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

может есть что уточнить по этому поводу, помимо найденного мной в
Колесниченко О.В, Шишигин И.В, Соломенчук В.Г. Аппаратные средства PC (6-е изд.)
читать дальше »
Переключатель Reset
Переключатель Reset (Сброс) служит для перезапуска РС. Это так называе-
мый горячий старт, который очень похож на холодный старт, но (в отличие
от холодного старта) при нажатии кнопки Reset компоненты РС остаются под
напряжением.
С помощью Reset осуществляется прерывание сигнала Power_Good. При
этом формируется сигнал сброса и повторяется последовательность событий,
происходящих при холодном старте PC.
Результат нажатия кнопки Reset внешне похож, но не аналогичен нажатию
комбинации клавиш <Ctrl>+<Alt>+<Del>. После нажатия этой комбинации
клавиш не выполняется процедура POST, а просто происходит перезагрузка
операционной системы. При серьезном зависании системы горячий старт вы-
полняется не всегда после нажатия клавиш <Ctrl>+<Alt>+<Del>.
В некоторых корпусах имеется сдвоенный переключатель Reset. Двухжиль-
ный кабель подключения, как правило, маркируется красно-белым цветом.
Место подключения разъема на материнской плате отмечено символами RES
или RESET. Полярность подключения здесь не важна.

и лаконичного
Цитата:

Сигнал сброса. Специальный сигнал, подаваемый с помощью кнопки перезагрузки системы и вызывающий сброс процессора и перевод его в некоторое исходное известное состояние. Сигнал reset автоматически активируется также при включении питания, это называется power-on reset; он может возникнуть также из-за аппаратных сбоев и тогда называется unexpected reset (неожидаемый сброс).



или разве не возникает вопрос
Цитата:

Цитата jah
BIOS считывает первый (нулевой - под номером 0) сектор (в 512 байт) загрузочного устройства (например, жёсткого диска), в котором предполагается находится MBR (Master Boot Record - главная загрузочная запись), »

а что происходит, если сектор диска не 512, а, к примеру, 4096 байт?

WSonic 03-09-2014 23:00 2398066

Цитата:

Цитата jah
или нет интереса к этой важной теме? »

Гм... вы на техническом форуме. Поэтому, если представить два вопроса - "почему включается ПК?" и "почему не включается ПК?" большинство будет думать именно над вторым вопросом ;)

alef2474 03-09-2014 23:50 2398085

Цитата:

Цитата jah
или нет интереса к этой важной теме »

Скорее всего интерес небольшой, потому что на форуме тусуются люди, обслуживающие комп-ы, а не разрабатывающие их.
Для разработчиков есть другие форумы, но если уж спрашивать, то по частям, а не одним большим текстом.
Непонятен также практический смысл для Вас столь детального изучения процесса загрузки
или приведения чрезмерно подробных азбучных истин про Reset.

Цитата:

Цитата jah
а что происходит, если сектор диска не 512, а, к примеру, 4096 байт? »

Тогда читает информацию с сектора большего размера. У оптических дисков - 2048 байт.

Tau_0 04-09-2014 00:42 2398104

Цитата:

Цитата jah
Неужели всё правильно и нечего добавить или нет интереса к этой важной теме? »

Это походит на набросок студенческого реферата...:)
Ведь в литературе это давно (лет 25-30 назад) в общих словах расписано. А конкретика постоянно меняется.

Да и про BIOS пора забывать, --- активно внедряется UEFI

jah 04-09-2014 01:25 2398112

спасибо за ответы, по меньшей мере, не с собой разговариваю и дело двигается

Цитата:

Цитата WSonic
Гм... вы на техническом форуме. Поэтому, если представить два вопроса - "почему включается ПК?" и "почему не включается ПК?" большинство будет думать именно над вторым вопросом »

а разве понимание деталей реализации не позволяет избежать большинства вопросов?

Цитата:

Цитата alef2474
Скорее всего интерес небольшой, потому что на форуме тусуются люди, обслуживающие комп-ы, а не разрабатывающие их.
Для разработчиков есть другие форумы, но если уж спрашивать, то по частям, а не одним большим текстом.
Непонятен также практический смысл для Вас столь детального изучения процесса загрузки
или приведения чрезмерно подробных азбучных истин про Reset. »

Предполагаю, что не совсем так: контингент здесь самый разнообразный, от новичков до мастеров универсального профиля
В данном случае спрашивать по частям не вижу смысла, иначе большинство ответов сведётся к изложению, того, что можно было изложить сразу, и потом долго притираться в понятиях,
к тому же не такой большой объём я затронул, в основном блоки крупные, хочется уточнить некоторые потенциально принципиальные детали, о которых возможно я не знаю, или знаю с ошибками
когда объём информации велик, а её исчерпываемость не достаточна, то то, что для одного азбучные истины, для другого - вопрос, отложенный для дальнейшего изучения и поиска источника для изучения
разве про reset больше нечего добавить?

Цитата:

Цитата alef2474
Тогда читает информацию с сектора большего размера. У оптических дисков - 2048 байт. »

у меня было такое предположение (предположение, так как подтверждающей информации я не встретил),
но только сейчас начинают прояснятся вроде бы очевидные вещи, которые раньше были для меня неочевидными:
раз сектор диска - это минимальная адресуемая единица хранения информации на дисковых запоминающих устройствах (НЖМД, дискета, CD),
значит механизм заключается в том, что bios начинает считывать первую из этих единиц,
остаётся вопрос как программа определяет сколько для устройства является минимально адресуемой единицей,
очевидно, информация об этом становится доступной во время опроса устройства при выполнении процедуры POST

если всё так, то похоже, что удалось выявить нексколько принципиальных деталей

Цитата:

Цитата Tau_0
Это походит на набросок студенческого реферата... »

скорее на компиляцию информации по теме в понятный для мозга формат :)

Цитата:

Цитата Tau_0
Ведь в литературе это давно (лет 25-30 назад) в общих словах расписано. А конкретика постоянно меняется. »

да этот вопрос меня тоже интересует как связать прошлое с настоящим, начав с изучения IBM PC-совместимых компьютеров

Цитата:

Цитата Tau_0
Да и про BIOS пора забывать, --- активно внедряется UEFI »

насколько я представляю, UEFI помимо всего прочего также выполняет основные функции BIOS: инициализацию оборудования и т.п.
схема с UEFI меня тоже интересует, так как, допустим я хочу разработать свою ОС, значит мне как-то необходимо будет загрузить её в оперативную память для выполнения при включении компьютера

WSonic 04-09-2014 01:45 2398119

jah,
Цитата:

а разве понимание деталей реализации не позволяет избежать большинства вопросов?
Нет, не помогает. Голова и так забита проблемами, еще только осталось подумать о процессе включения ПК :-)

topotun32 04-09-2014 08:43 2398159

jah, я Вам больше скажу: многие не только не понимают, что происходит с ПК во время включения-выключению. Но им это не особенно нужно в повседневной деятельности.

Nerdy 04-09-2014 11:14 2398212

Цитата:

Цитата jah
а разве понимание деталей реализации не позволяет избежать большинства вопросов? »

это никому не интересно и не нужно.

Изучайте спецификации, интересно.

Tau_0 04-09-2014 11:14 2398213

Цитата:

Цитата jah
да этот вопрос меня тоже интересует как связать прошлое с настоящим, начав с изучения IBM PC-совместимых компьютеров »

При всей своей очевидности --- Это бездна, это мрак, это каша манная...:gigi::gigi::gigi:

mwz 04-09-2014 18:38 2398426

Цитата:

Цитата alef2474
Тогда читает информацию с сектора большего размера. »

И обломится, если это жёсткий диск с сектором 4K Native. ;)

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

jah 04-09-2014 23:07 2398528

Цитата:

Цитата Tau_0
При всей своей очевидности --- Это бездна, это мрак, это каша манная... »

это мотивация на провал или действительно всё так плохо? :)




кстати, в статье википедии про начальную загрузку говорится, что
Цитата:

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




Цитата:

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

неужели ответ на вопрос
Цитата:

Цитата jah
а что происходит, если сектор диска не 512, а, к примеру, 4096 байт? »

оказался не столь очевидным?
быть может ответ очевиден для старых BIOS, которые действительно пытаются считать первый 512-байтовый сектор накопителя, а новые BIOS действуют как-то по-другому? (или с 4К-секторных дисков вообще не загрузиться? :))
но те же старые BIOS без проблем считывали первый 2048-байтовый сектор оптических дисков
как же это всё разруливается в BIOS?

Tau_0 04-09-2014 23:46 2398544

Цитата:

Цитата jah
это мотивация на провал или действительно всё так плохо? »

Я верую в теорию эволюции Чарльза Дарвина, но проследить эволюцию от амёбы до человека невозможно..:)

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

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

IMHO так

mwz 05-09-2014 00:41 2398557

Цитата:

Цитата jah
старые BIOS без проблем считывали первый 2048-байтовый сектор оптических дисков »

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

Цитата:

Цитата jah
(или с 4К-секторных дисков вообще не загрузиться? ) »

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

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

jah 05-09-2014 20:28 2398931

Цитата:

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

Tau_0 05-09-2014 23:23 2399015

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

jah 06-09-2014 09:25 2399085

Цитата:

Цитата Tau_0
jah,
Раз решили продолжать изобретать свой деревянный лисапед... »

что имею, на том и рассуждаю :)
поставил себе глобальную задачу, так мотивация выше на изучение уже существующего

спасибо


Время: 00:47.

Время: 00:47.
© OSzone.net 2001-