hidden - мои приветствия !!! Вери, вери гуд !!!
Начало действительно положено !!!
Теперь о технических деталях :
Загрузчик должен сначало первести процессор в P-Mode, затем обязательно настроить
страничную адресацию, затем выделять при помощи страничной адресации куски памяти и заносить в эти куски наши драйвера и приложения по конфигурационному файлу на загрузку. Это действительно немного усложнит начальный загрузчик, но всеравно он останется маленьким и компактным. Такое решение позволит обойти много трудностей и облегчит затем программистам и драверописателям жизнь. Короче говоря позволит 'убить несколько зайцев одним выстрелом'
Поясню подробнее:
Начальный загрузчик это 'мертвый код' нужен только при запуске системы, а затем будет просто занимать лишнюю память. Благодаря разработчикам из IBM и INTEL код начальной загрузки и перевода процессора в P-Mode, включение страничной адресации - относительно большой, кривой и сложный, поэтому весь этот код нужно помаксимуму вынести в начальный загрузчик, а после загрузки системы при необходимости можно просто удалить из памяти начальный загрузчик.
После завершения работы загрузчика, микро ядро (слово микро - понимается в буквальном смысле этого слова) придет уже на готовые куски памяти, в которые загружены драйвера, приложения, или просто массывы данных (буферы). Затем ядро проверит их на целостность по контрольной сумме, включит многозадачный режим, просмотрит свой конфигурационыый файл kernel.cfg и все что предназначается для запуска поставит на исполнение.
Микро Ядро по своей сути самодостаточный модуль, и для своей работы ему не требуется ни один файл или драйвер, для передачи начальных параметров и правильного запуска приложений микро ядру требуется только конфигурационный файл kernel.cfg и то это в принципе не обязательно !!! (по умолчанию без конфигурационного файла микроядро запустит все исполняемые файлы которые обнаружет в памяти)
Начальный загрузчик действительно получится немного сложней, но это затем слихвой окупится.
Вопревых мы почти полностью избавимся от шеснадцатиричного кода в начальном загрузчике, тем самым создадим готовый полигон для начальной проверки и отладки оборудования в 32-х разрядном режиме, но без многозадачности - которая как правило на начальном этапе создания какого либо драйвера только мешает.
Включив в загрузчик страничную адресацию и набор блоков памяти из страниц, мы максимально унифицируем процесс загрузки драйверов и приложений в память как начальным загрузчиком так и загрузчиком который будет загружать файлы после старта микро ядра. Затем этим уже готовым кодом смогут воспользоваться все те кто будет писать Shell, Far или какойнибудь шедуллер.
Написав в начальном загрузчике код для работы с дисководом, дисплеем, клавиатурой и т.д
мы облегчим жизь драйверо писателям, которые смогут воспользоваться уже готовыми наработками.
И как я уже отмечал выше loadеr.com будет отличным полигоном для начального создания драйверов в 32х разрядном режиме.
Забегая далеко в перед, скажу что минимальный размер исплняемого файла будет 4kb и кнему автоматически должен прикручиваться минимальный стек размером тоже в 4kb (конечно его можно будет потом увеличить).
Адресацию исполняемого файла предлагаю вести с нулевого адреса без смещения (думаю страничная адресация позволит это сделать)
первая команда будет длинный jmp (он же будет обязательным идентификатором исполняемого файла), затем будут находиться всякие параметры.
Не исполняемые файлы - куски данных в памяти будут тоже начинатьс с нулевого адреса и иметь в качестве первого двойного слова нули (обязательный идентификатор неисполняемого файла)
В общем нужно все упрощать по максимуму, чтобы было красиво, просто и понятно.
P.S. Продолжение следует ...