Новая модель ядра

Kernel architecture questions
  • rabid rabbit
    Потому что у нас нет денег на покупку стандарта этой модели, и лицензия не позволяет подобных скрещиваний.
  • Какая покупка? Какие стандарты? Какая нахрен лицензия? ;)
  • Может у кого-то есть конкретные предложения по архитектуре ядра? Споры по лицензиям лучше вести в отдельной теме.
  • Serge
    Не очень понял что из сказанного выше - планы, а что уже реализовано.

    Думаю, что именование абсолютных переменных стоит залить на SVN сервер.
  • halyavin
    Ситуация такая: я отделил загрузчик от ядра, теперь это отдельная программа. Он использует текстовый ini-файл, где прописаны основные настройки. Загрузчик определяет размер установленной памяти, загружает ядро по физ.адресу 0x10000, дискету по адресу 0х10 0000, создает таблицы страниц, переходит в защищенный режим с включенной страничной адресацией и передает управление ядру.
    После включения страничной адресации физ.адреса 0х0 - 0х00FF FFFF отображаются на линейные 0x8040 0000 - 0x813F FFFFF. LFB отображается прямо на адреса видеопамяти. Первая команда ядра начинается по лин. адресу 0x80410000, приложения грузятся с лин. адреса 0х0100 0000, адреса ниже пока зарезервированы для обнаружения ошибок. Работает большая часть программ кроме тех, что используют read/write_process_memory и IPC.
    Пока не работают: Shootdown/Reboot, FDC и Vesa1.2 видеокарты. Сейчас я отлаживаю код для динамического выделения памяти в ядре и пишу код который будет делать доступной всю видеопамять.
  • А зачем отделять загрузчик от ядра? А как загрузчик считывает оставшуюся часть ядра? Что, в загрузчике есть код для разбора FAT12/16/32/NTFS/ext*fs?
    Ушёл к умным, знающим и культурным людям.
  • Сейчас kernel.asm начинается с org 0x80410000. Оказалась довольно сложно компилировать вместе код загрузчика который должен работать в первом мегабайте и код ядра, который должен работать по старшим адресам. Сейчас загрузчик работает только с дискетами там простой код для разбора FAT12. Для загрузки с HD можно сделать отдельную версию - еще лучше модифицировать существующие загрузчики добавив код для инициализации системы. Нынешний дистрибутив расчитан на загрузку с дискеты, загрузчика с HD там нет моя версия не сильно отличается. В принципе можно сделать загрузчик который ничего не будет "грузить" - просто настраивать систему, если все файлы будет грузить в память другая программа.
  • Добавив код для инициализации системы? С переходом в защищённый режим, настройкой таблицы страниц и т.д.? А размер кода, который на это понадобиться? Ну ладно meosload, там нет ограничений на размер. Ну ладно mtldr, там ограничение в 8 Кб, до чего ещё долго. А односекторный acroboot? Кроме того, это означает добавление кучи кода, а ведь есть такие факторы, как банальная лень и ещё более банальная нехватка времени...
    Проблемы с компиляцией, как правило, можно решить. А вот переписывать кучу существующего внешнего кода...
    Ушёл к умным, знающим и культурным людям.
  • Да, и ещё: что, удалён код настройки параметров (синий экран загрузки показывается 16-битным загрузочным кодом)? А если в результате неудачно выбранных параметров система просто не загрузится? В текущей версии в этом случае просто изменяем параметры в синем загрузочном экране. А для редактирования файла настроек нужна как минимум загруженная ОС.
    Ушёл к умным, знающим и культурным людям.
  • Добавив код для инициализации системы? С переходом в защищённый режим, настройкой таблицы страниц и т.д.?
    Точно так. Размер загрузчика 7.5 Кб ядра 77 Кб. Синий экран настройки никуда не пропал. Исчез выбор MTRR (это будет по дефолту где есть) и источник загрузки (дискета, диск C:\ - все равно не работает). Добавлены текстовый ini-файл. Сейчас готовлю код для сохранения измененных параметров настройки в ini.
  • Похоже, что в mtldr не влезет. В acroboot - тем более. Не говоря уже о том, что дублировать синий экран в нескольких загрузчиках вряд ли целесообразно. Короче, загрузке с жёсткого диска наступит полная хана.
    В общем, лично я решительно против идеи выделения загрузчика в отдельную программу/файл (если кто ещё не понял :-))
    Ушёл к умным, знающим и культурным людям.
  • Да почему хана? Если mtldr может загрузит в память ядро то и отдельный загрузчик для него не проблема. По поводу дублирования кода - это не страшно.
  • Serge
    Мне интересна вот какая вещь.
    Вот загрузили мы ядро, запустили систему. А что с той областью памяти, где располагался загрузчик? Мне кажется, его можно с чистой совестью затереть, как только запустилось ядро.

    diamond
    Из твоих размышления я все же не понял, почему загрузке с жесткого диска хана? Сформулируй идею в менее расплывчатом виде.
  • Мне интересна вот какая вещь.
    Вот загрузили мы ядро, запустили систему. А что с той областью памяти, где располагался загрузчик? Мне кажется, его можно с чистой совестью затереть, как только запустилось ядро.
    Я уже об этом думал. Сейчас он располагается по физ. адресу 0x60000. Этот адрес я выбрал произвольно. У меня эта область не используется. Но в принципе его можно поместить в любое место, которое потом затрется.
    По поводу загрузки с диска. Сделать загрузку из ДОС очень просто и код будет даже меньше. Для остальных файловых систем все сведется к написанию соответствующих версий find_file/read_file. И какие проблемы в том, чтобы иметь разные версии загрузчика для разных файловых систем?
  • Who is online

    Users browsing this forum: No registered users and 7 guests