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

Kernel architecture questions
  • Serial Похоже, что это какая-то особенность материнок 8RDA3l. У меня та же песня... Еще мне кажется что у тебя не будет работать nt2klbr
  • Предлагаю использовать адреса 0x522 0x600 для хранения информации об оборудовании, причем это оборудование определять еще в реальном режиме...
  • Serial
    Бывает на некоторых компах, причина пока не выяснена. Скорее всего, несовсем корректный переход в реальный режим процессора.
  • Есть такая идея. Поднять ядро на адреса 0xF800_0000+ а кучу ядра разместить по адресам 0x8000_0000 - 0xF7FF_FFFF Тогда память до 0x7FFF_FFFF будет индивидуальная для каждого потока, 0xF800_0000+ общая для всех потоков, а в куче ядра можно будет выделять общие и частные блоки памяти и загружать туда системные ДЛЛ. Приложения получат доступ на чтение запись и исполнение по адресам в этом диапазоне, разумеется не для всех страниц а только для тех где это разрешено.
  • Serge
    А по какому принципу будет определяться кому, куда и зачем можно лазить? Поскольку у нас нет категорий доступа, для разных приложений, не получиться ли еще одна лазейка для вирусов и прочей вредоносной хрени?
  • Mario79

    Для каждой страницы будут отдельно храниться права доступа. Для прилжений доступ будет очень ограниченным - код и данные ДЛЛ. Код ДЛЛ будет pl_3 с защитой от записи а данные ДЛЛ будут частными для каждого потока, так что ничего испортить не получится. Напрямую к памяти ядра приложение доступ не получит, только косвенно через отображение в своё пространство общих ДЛЛ. Остальные данные и код ядра будут защищены так же как и сейчас.
  • Serge
    То есть приложение будет иметь доступ только к области, через которую осуществляется обмен данными с ДЛЛ?
    Мне кажется, доступ к коду общих ДЛЛ давать не нужно.
  • Mario79

    >Мне кажется, доступ к коду общих ДЛЛ давать не нужно.
    Тогда функцию ДЛЛ невозожно вызвать.

    Будет примерно так:
    фоновая картинка - страницы общие для всех потоков. Доступ только для в pl_0 на чтение и запись.
    код ДЛЛ - страницы общие для всех потоков. Доступ в pl_3 только чтение и исполнение.
    данные ДЛЛ индивидуальные для каждого потока доступ в pl_3 на чтение и запись. Если у ДЛЛ есть константные данные они могут быть расшарены с доступом тольку по чтению.
  • Serge
    Да пожалуй, в таком виде можно использовать. Только нужно еще продумать, как приложение узнает, загружено ли нужное ДЛЛ, и нужно ли его загружать. Или это все будет прозрачно для приложений, и ядро все будет делать само?
  • Mario79

    Приложение вызывает load_dll(), ядро загружает ДЛЛ если она ещё не загружена и отображает её в адресное пространство приложения. До этого вызова ДЛЛ для приложения будет недоступна. ДЛЛ загружается только один раз, при первом вызове. При последующих вызовах страницы кода будут сразу отображаться в память процесса а страницы данных будут создаваться заново и иногда загружаться с диска если данные имели начальные значения.
  • Serge
    А какой механизм будет очищать память потом? Если будет куча ДЛЛ, которые впоследствии не используются, то память будет загажена почем зря. Надо заранее продумать, чтобы не наступать на грабли Виндовс.
    Last edited by Mario79 on Fri May 04, 2007 12:11 pm, edited 1 time in total.
  • Надо ещё определиться с форматом ДЛЛ. PE мне показался проще и удобнее чем ELF.so Библиотеки в PE формате можно создавать прямо в FASM, elf.so нет. На форуме flatassembler.net есть некоторые пояснения как генерировать позиционно независимый код для elf.so Скомпилированный фасмом .o файл надо ещё обработать gcc чтобы получилась .so библиотека.
  • Mario79
    Насчёт кучи ДЛЛ я не уверен. Можно сделать счётчик ссылок и таймер по которому ДЛЛ будет выгружаться если ссылок больше нет.
  • >Надо ещё определиться с форматом ДЛЛ. PE мне показался проще и удобнее чем ELF.so

    Драйвера для X сервера в формале ELF.so
    Если не будет ELF, значит только самопальные драйвера для видео, если таковые вообще удасться как-то написать.

    P.S.

    Оказывается 2D драйверы для X сервера мало весят.К примеру, 2D драйвер для ВСЕХ видеокарт nvidia имеет размер около 90 килобайт.
    Last edited by andrew_programmer on Fri May 04, 2007 5:39 pm, edited 1 time in total.
  • Who is online

    Users browsing this forum: No registered users and 0 guests