У меня начальный стек ядра лежит в диапазоне 500h-8000h, причем дно используется также интенсивно, как и вершина: начиная с адреса 500h и до 1000h-7*8 встроенные компоненты ядра могут статически резервировать небольшие участки для передачи параметров из RM в PM, если у них нет возможности это сделать в вершине стека (для передачи параметров через вершину стека нужно соблюдать правильный порядок помещения параметров в стек в RM/извлечения параметров из стека в PM). Конец первой страницы сразу отдается для будущего размещения в нем начала IDT. Потом эта страница будет отображена в пространство ядра и объявлена некэшируемой, чтобы предотвратить возможность появления одного опасного бага на пентиумах.
Извиняюсь за столь детальное описание. Это чтобы картина была полностью ясна.
achesnokov писал(а):
Нужно помнить что к примеру начальная загрузка MBR происходит по адресу 0x7c00, что выше упомянутых выше и 0x500 и 0x600. Так что даже при загрузке ядра придется делать дополнительные телодвижения. Поэтому лучше размешать ядро не по адресу 0x500 и не 0x600, а где-то выше.
??? MBR-загрузчик сам себя перемещает, причем обычно как раз по адресам 500h или 600h. Я обычно компилирую MBR-загрузчики как раз с перемещением по адресу 500h. У моего последнего MBR-загрузчика использование этого адреса вообще является обязательным, т.к. задекларировано, что именно по этому адресу после своей работы он должен сохранять всю таблицу разделов (код идет вслед за таблицей).