Yoda писал(а):
В принципе, добавить начальный сектор, откуда загружать образ, чрезвычайно просто. Думаю, сделаю. А вот установка в раздел... структура первого сектора зависит от конкретной файловой системы. Кроме того, для раздела, - это значит надо передавать загруженному образу валидные параметры. Или ты имеешь ввиду сырой раздел без файловой системы?
Сначала я его использовал исключительно для "сырого раздела", но потом сообразил, что после небольшой доработки (оставив резерв под BPB+) при определенных условиях его можно использовать и для FAT12/16, ведь я все равно пакую в образе загрузочные модули последовательно без фрагментации. Можно конечно использовать и обычный загрузчик для FAT12/16, т.к. EBR-код все равно настраивает поле HiddenSectors динамически, но он не так компактен.
Цитата:
Если говорить о передаче номера, то мой аргумент примерно следующий. Вкупе с номером диска для самых примитивных ОС, к тому же работающих в реальном режиме, это позволяет однозначно идентифицировать раздел и приступить сразу же к разбору файловой системы, минуя разбор таблицы разделов. Так, виндовый загрузчик хочет в BP указатель на BPB/BS. Это очень просто сделать, имея номер первого сектора, но по идентификатору (или даже по геометрическому номеру) уже сложно. Идентификатор раздела, который передаётся в EBX, полезен в том случае, если у нас весь парсер дисковой подсистемы работает в защищённом режиме (особенно в 64-битном) и удобного доступа к функциям BIOS уже нет. А в более примитивных случаях он неудобен.
В общем я не спорю, что это вполне достойный способ идентификации раздела без необходимости доступа к его содержимому. Я когда-то передавал в первичном загрузчике сигнатуру, подтверждающую наличие BPB+ по известному адресу, но уже давно убрал соответствующий код и из первичных загрузчиков, и из вторичного загрузчика/ядра (за ненадобностью; оставил только небольшую лазейку для возврата к такой возможности в виде параметра, передаваемого вторичному загрузчику: BX - значение, отличное от 0xAA55; значение 0xAA55 как раз и указывало на наличие определенной структуры в памяти). У меня такого никогда не было, чтобы нужно было сразу пытаться обращаться к разделу по его смещению на диске. Я сначала создаю объект раздел (в ядре это виртуальное устройство), а потом уже осуществляю взаимодействие с этим объектом. Кстати идентификатор в виде номера стартового сектора раздела мне еще не нравится и тем, что из-за ошибки он может содержать и какой-либо другой номер сектора, и даже если он содержит корректный номер стартового сектора, а лог. структура самого раздела/тома некорректна, то при выполнении различных операций возможен выход за пределы пространства раздела, т.е. повреждение содержимого др. разделов.
Цитата:
Если говорить о разрядности, то к тому времени, когда 64-бит на номер сектора не хватит, загрузка через BIOS (в реальном режиме) уже вряд ли будет в каком-либо виде актуальна.
Ну, мы с упомянутым товарищем начали с 32-разрядной нумерации, поэтому спор у нас проходил весьма живехонько.
Цитата:
Одно напрягает. И так утрамбованный до безобразия код надо трамбовать ещё, чтобы выделить место для нескольких инструкций.
И это тоже. Я понимаю твое стремление сделать как можно более универсальный интерфейс, но все-таки ты должен прежде всего ориентироваться на потребности твоей ОС. Я поступаю именно так. Лично тебе нужен такой идентификатор?