PM: как добраться из Ring0 к структурам в Ring3?

Тема в разделе "WASM.OS.DEVEL", создана пользователем simnet_, 4 июн 2008.

  1. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Собственно, вопрос содержится в заголовке темы. Режим адресации - страничный, у каждой задачи - свой контекст и свое 4Гб виртуальное адресное пространство.. Как добраться из ядра в Ring0 к данным задач, кроме как ручным чтением контекстов задач (содержимое cr3)-> каталогов/таблиц страниц каждой задачи? Или это единственный вариант?
    Thanks
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Думаю, что контекст разбирать не придется -- при переходе в режим ядра содержимое CR3 не меняется, поэтому можно смело писать по виртуальному адресу, переданному самим приложением.

    А если речь вообще идет о своей ОС, то, конечно, надо не забыть проверить параметр на принадлежность пользовательскому адресному пространству.
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Если у тебя ядро сделанно отдельным процессом то да именно так. Можно установить cr3.
    А вообще скорее всего ядро выполняется в контексте текущей задачи. Собственно тут тогда должно быть разграниечение где ядро, а где код/данные программы. Для удобства установить 4ГБ придел чтобы флат был. И никаких проблем с доступом нет.
     
  4. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Да, у меня ядро - отдельный процесс.
    Если не трудно, подскажите, как заставить ядро выполняться в контексте задачи. Насколько я понимаю, нужно на страницы каждого процесса сделать ссылки в таблице страниц ядра? Или как-то по-другому?
     
  5. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    И если можно, расскажите, какие проблемы могут возникнуть из-за несоответствия уровней привилегий ядра и приложения
     
  6. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    верхние N элементов PDT (PDPT для PAE, PML4T для IA-32e) должны быть одинаковы для каждого процесса (отображать физические страницы ядра)
    N зависит от размера адресного пространства ядра

    в смысле?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    зачем? наоборот - как уже сказали, у каждого процесса сделать одинаковые ссылки на ядро.
    Тогда чтобы переаттачиться надо будет просто перезагрузить CR3, поскольку код ядра окажется в новом виртуальном адресном пространстве спроецированным по тем же виртуальным адресам. Так делает Windows (а переключение там по KeStackAttachProcess идет, посмотри исходники, если интересно. правда код весьма тупой - все сводится в конечном счете к MOV CR3, EAX =))
     
  8. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Простите за возможно глупый вопрос, но я правильно понял?
    В адр. простр. ядра есть области, на которые проектируется часть АП задачи #1, часть задачи#2 (эти части и нужно изменять из ring0)?
    Но ведь так получится широковещательная рассылка. Или нет?
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    нет

    АП любого процесса состоит из 2-х частей: ядерной и пользовательской
    пользовательская часть уникальна для каждого процесса (совместно-используемую память не рассматриваем)
    ядерная часть является общей по значениям элементов PDT (PDPT, PML4T), но уникальной по физическому расположению PDT (PDPT, PML4T)

    ps. кстати, получается, что при отображении через PDT (PDPT, PML4T) страницы на АП ядра необходим захват глобальной блокировки и модификация всех PDT (PDPT, PML4T) всех процессов?
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Почему уникальной по расположению? Зачем держать много копий одного адресного пространства ядра. Достаточно одной копии каждой из двух таблиц PDT, на которую будут ссылаться последние два PDPE каждого процесса.
     
  11. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Никак не могу понять, каким образом удастся передать данные определенному пользовательскому приложению. Всем одновременно - да, ядро пишет что-то в отображаемую область, а каждый из процессов читает ее (не знаю, правда, что там с уровнями привилегий - ведь Ring3 не подпускают обычно к данным страниц с Ring0).

    И видимо я безнадежно отстал от жизни :). Что такое pml4t?
    Из всех таблиц, что я знаю, page directory, Page table и собственно страницы. Ну, в x64 добавили еще одну таблицу. А остальные тогда для чего?
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    в режиме PAE есть еще Page Directory Pointer Table (PDPT).
    Брр..
    Смотри, ты выполняешься в режиме ядра в контексте произвольного процесса и хочешь записать что-то в память процесса P.
    Ты аттачишься к процессу P сменой текущего адресного пространства, далее, поскольку все процессы имеют проекцию страниц ядра у себя по тем же виртуальным адресам, то ты спокойно продолжаешь выполняться в режиме ядра, но уже у процесса P. Далее ты просто делаешь memcpy() в буффер пользовательскоо режима этого процесса.
    Потом деаттачишься обратно. Что неясного-то?
     
  13. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    потому что PDT (PDPT, PML4T) уникальна для каждого процесса
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    rei3er
    А ну мы про разные таблицы говорили)
    Верхняя самая таблица (PDPT или PDT) действительно уникальна, иначе и быть не может. Но они могут ссылаться на одинаковые таблицы страниц :) Собственно так и стоит сделать автору.
    А проще включить PAE - тогда надо будет составить PDPT, в которой последние два PDPE сделать ссылающимися на одни и те же PDT. И все будет шикарно:)
     
  15. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    должны :)
     
  16. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    так и сделаю
    Great
    rei3er
    Спасибо, дошло наконец :)