Цитата:
Во-первых, инициализация ОС и её нормальная работа -- совсем разные вещи, и код для них вполне может быть различным (хотя частично может и совпадать). В частности, в процессе работы ОС должна сама управлять всеми поддерживаемыми устройствами, но в процессе инициализации и загрузки может пользоваться услугами BIOS, переключаясь постоянно из реального режима в защищённый и обратно (здесь можно вспомнить, например, установщик Windows: сначала он работает через BIOS, почему может обращаться к SCSI/SATA дискам, однако, если на этом этапе не установить с помощью дискеты специальный драйвер, система загрузиться и продолжить процесс установки уже не сможет, поскольку не будет иметь возможности обратиться к нужному устройству).
Естественно, я имел в виду не первоначальные этапы загрузки, а загрузку конфигурационных файлов, драйверов и даже оболочку. Хотя некоторые умудряются все это сразу грузить в память посредством GRUB'а, где в основном используется BIOS, но мне такой вариант в принципе не подходит, потому что у меня загрузка выполняется вариативно в зависимости от содержимого конфигурационных файлов и может, также вариативно, частично повторяться без выполнения полной перезагрузки компьютера.
Цитата:
Во-вторых, в "нормальных" системах буферизация без нужды не используется (во всяком случае, допускается работа без буферизации). Например, в такой древней системе, как OS/360 (известной в нашей стране как ОС ЕС), прикладные программы имели два способа определения данных для операции ввода-вывода: режим пересылки и режим указания места. В первом случае ОС пересылала данные из указанной области в некий буфер, из которого уже осуществляла вывод на внешнее устройство (ну или читала в буфер, после чего пересылала в область памяти программы), во втором данные прямо читались или записывались в область памяти программы. Второй способ оказывался быстрее, причём значительно (скорость работы тогдашних процессоров наше воображение, естественно, не поразит), однако требовал определённых усилий со стороны программиста, связанных главным образом с синхронизацией выполнения ввода-вывода и работой программы.
Моя ось поддерживает прямой ввод-вывод, но при работе с дисками он используется лишь дисковыми драйверами. У меня "без нужды не используется" прямой ввод-вывод :)
Цитата:
Ну и позвольте небольшой камешек в Ваш огород. Если я правильно понял про "У меня, например, вся базовая память кроме первых 8 Кб отдана именно под использование в качестве аппаратных буферов", то у Вас область физической памяти от 800 до 9FFFF включительно отдана в распоряжение драйверов под буферы (а область от 0 до 800, возможно, используется под IDT -- для 256 записей как раз 8 Кб нужно). Если это так, то, весьма вероятно, Вы лишаетесь возможности когда-либо реализовать поддержку спящего режима и прочей ACPI'шной дребедени без переделок уже сделанного: чтобы эти функции работали, необходимо сохранять содержимое определённых областей памяти, список которых можно получить от BIOS. Ну а, ИМХО, любая ОС всё же должна поддерживать такие возможности хотя бы в теории. Впрочем, здесь всё зависит от постановки задачи; возможно, в Вашем проекте это действительно не требуется
Вообще-то для IDT мне хватает 2 Кб, более того IDT большей своей частью находится совсем в другом месте (где именно, трудно сказать, т.к. я использую пэйджинг, но то что выше первого мега это точно). Далее в первой физической странице я сохраняю IVT и BDA (нетронутыми), парковочный код и только первые семь входов IDT (в конце страницы). Во второй физической странице находится специальная структура, отвечающая за распределение памяти. Кроме того я не затрагиваю EBDA, где могут храниться структуры, относящиеся к ACPI, а также все участки выше первого мега, которые не доступны для использования ОС (для детекта используется функция SMAP). Иными словами, изначально для распределения обычно доступен участок 0x2000..0x9EFFF(вверху 1-2 Кб обычно занимает EBDA, а ось выравнивает доступную память по границам страниц, поэтому свеху минус 4 Кб).
P.S. Не нужно переходить в оффтоп! При необходимости создай новую тему.