Прототипные PTE

Тема в разделе "WASM.NT.KERNEL", создана пользователем Sheph, 13 мар 2008.

  1. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    Всем доброго времени суток, хочу вот уточнить правильно ли я понимаю как работают прототипные PTE.
    Т.е допустим у нас есть разделяемая секция, 2 процесса спроецировали её на своё адресное пространство, таким образом у первого процесса есть свои прототипные PTE и у второго свои и указывают они на реальные PTE этой для этой секции. Т.к прототипные PTE являются не валидными, то по обращению к ним происходит page fault и, вот тут я не совсем понимаю, винда подменяет прототипный PTE реальным PTE для того чтобы операция чтения/записи прошла по корректному адресу физической памяти ? Или как ?
    А как тогда потом прототипный PTE выставляется назад ?
     
  2. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    Понял, что бред написал ) И заодно понял как всё работает, если не трудно попрошу модератора удалить эту тему
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Да, это так..
    а зачем выставлять назад? В MMPFN в принципе лежит OriginalPte на всякий случай
     
  4. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    Хм, теперь снова непонятно (
    Вобщем, насколько я понял (второй раз) работает это так:
    Есть два процесса: первый и второй ). У обоих есть реальные PTE на какую-то общую разделяемую страницу в физической памяти. Также есть прототипный PTE, который тоже описывает эту же страницу (те реальные PTE как раз и были заполнены с использованием этой прототипной PTE). Пока страница лежит хотя бы в чьём-нить рабочем наборе (т.е она активная) всё хорошо, но как только она к примеру выгружается в страничный файл, реальные PTE этих двух процессов становятся невалидными и указывают на прототипную PTE (опять-таки непонято как это они становятся невалидными ? А если у меня 100 процессов, каким образом их PTE станут невалидными ? В PFN'е прототипного PTE разве есть список процессов, используеющих его ?). Таким образом, когда какой-нить из этих процессов обращается к этой выгруженной странице генерится #PF и ось пытается загрузить эту страницу из страничного файла назад в физическую память, допустим у неё получилось, тогда PTE процесса, который вызвал #PF восстанавливается следующим образом: из его ещё невалидного PTE берётся смещение прототипного PTE, а там уже лежит новый PFN, ну и короче копируется в PTE того процесса и он снова валидный. А если другой процесс тоже сгенерит #PF, то его PTE ведь тоже на прототипный указывает, а там PFN лежит, его ты мы и берём и делаем наш PTE валидным. Вот так я понимаю, это верно ?
    P.S: Просьба сильно не бить, разбираться с низкоуровневым устройством памяти и кэша винды начал разбираться только сегодня, и хотя уже достаточно много ковыряю WRK, в голове ещё каша.
    2 Great:
    Кстати, прочитал твою статью http://wasm.ru/article.php?article=mem_management, спасибо, помогло много с чем разобраться.
    2 All:
    Кто-нибудь может посоветовать что-нибудь ещё почитать по данной теме: память, кэш, пэйджинг и т.д (кроме Руссиновича, уже прочитал, всё понятно, но честно говоря, как вилами по воде, ничего конкретного) ?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    интеловские маны, статьи по пмоду.
     
  6. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    n0name, мне нужно про устройство всего этого в винде, т.е описание софтверной части, что-то типа этой статьи Great'а, такое вообще есть или единственный вариант - ковырять WRK самому + отладчик ?
    Это конечно тоже не проблема, просто хочется обойтись малой кровью
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    шрайбер неемного писал по этому поводу.
     
  8. sww_

    sww_ New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2007
    Сообщения:
    155
    Неплохо было бы все-таки кому-то написать стотью на эту тему, ибо тема действительно интересная, но не раскрытая.

    n0name
    Кто то обещался способ разбора PDE/PTE со всякими извращениями :lol:
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    угу %)
    я его написал, сейчас тестирую некоторые моменты связанные с тем как процесс обрабатывает различные комбинации одинаковых полей в PDPTE/PDE/PTE.
    флаги present и кеширование например.
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Исходники Win2000, WRK. Там все есть:)

    Честно говоря, я не особо разбирался с устройством прототипных PTE и разделяемой памяти.