Станислав писал(а):
Загрузчик от слова ЗАГРУЗКА, простенькая функция от биоса чтения секторов с кодом с диска в память, которая либо не работает либо работает. Если осталось место на первом секторе, котроый грузит биос то его можно использовать как угодно.
От человека, который грузит систему, как "MBR-helper" и думает, что это предел совершенства, ничего другого ожидать не приходится. Как верно было подмечено, нужно выполнять четкое разделение функций между разными сущностями, даже если внешне они видятся единым целым (загрузочный образ). Разъяснять на пальцах это утверждение я не буду. Просто скажу, что лучше будет оставить "место на первом секторе" пустым, чем тянуть туда что попало.
achesnokov писал(а):
У меня так получилось по "историческим причинам". До переключения в защищенный режим, всё работает в 16-ти битном режиме. Я когда делал сборку ядра, не сразу разобрался как можно линковать 16-ти битный код вместе с 32-битным. По этой причине, ядро сделал сразу работающим в защищённом режиме.
Отсутствие на руках подходящего инструментария или неумение его применять - не повод для отказа от оптимального решения - лично я в случае необходимости сам бы написал нужный мне инструментарий, чем идти по заведомо неоптимальному пути развития.
Цитата:
Можно перенести код переключения в защищённый режим внутрь ядра. Но это тоже будет не готично, мне думается.
Мне нравится
Как вариант, это можно делать, используя промежуточное звено в виде ОС-специфичного вторичного загрузчика.
SII писал(а):
В самой системе тоже надо разделять программу инициализации ядра и собственно ядро. Тогда при изменении одного из компонентов остальные трогать не придётся (при условии сохранения совместимости по параметрам и т.п., естественно). Да и проще разобраться, чем когда всё в одну кучу свалено...
Я особо не возражаю против такого подхода, но лично мне проще считать инициализацию ядра начальными стадиями его работы и отбрасывать инициализационный код, как отработавшие ступени ракеты. Как бы при использовании озвученного тобой подхода не получилось так, что при изменении одного компонента часто нужно будет изменять и другой.
Было время, когда я выносил в отдельный модуль (расширитель ядра) часть ядра, которая была не нужна на начальных этапах инициализации, однако я отказался от такого разделения (возможно, временно), т.к. сейчас ядро достаточно компактное.