Как работает VirtualAlloc?

Discussion in 'WASM.WIN32' started by Deader, Aug 1, 2011.

  1. 7mm

    7mm New Member

    Blog Posts:
    0
    Для каждого фрейма физической памяти должен быть описатель в PTE. Иначе при трансляции будет #PF.
     
  2. Deader

    Deader New Member

    Blog Posts:
    0
    Почитаю как-нибудь(сейчас времени в обрез). А вообще пост можно понять, как книга "Внутреннее устройство Windows" за авторством Соломона, Руссиновича и Deader'a :))))))) спс за комплимент :)))))))

    где хранятся индексы описателелей PTE для выделенного участка памяти?
     
  3. leo

    leo Active Member

    Blog Posts:
    0
    Да одну непрерывную область виртуальной памяти (линейных адресов). А индекс это просто часть виртуального (линейного) адреса.
    Размер выделенного блока хранится в ядерных структурах ОС (в частности в VAD - virtual address descriptor) и нужен он только ОС (а не процессору) для дальнейших операций с VirtualAlloc\Free. А процессору, как уже было сказано, незачем знать размеры блоков - ему достаточно для каждой команды чтения\записи быстро перетранслировать линейный адрес в физический и все. Поэтому он просто бъет лин.адрес на части ("индексы") и лезет по ним за физ. адресами в PDE и PTE - если находит, значит ОК, если же запись PDE или PTE оказывается невалидной, то проц просто выбрасывает исключение #PF (page fault - отказ страницы), которое перехватывается ОС и она уже смотрит в чем дело. В частности на этих #PF полностью основана подкачка страниц при свопинге и файл-маппинге (т.е. вирт.память выделена, но данные в физ.память не загружены, поэтому ОС в ответ на такой #PF выделяет физ.память и корректирует записи PDE\PTE, делая их валидными)
     
  4. 7mm

    7mm New Member

    Blog Posts:
    0
    В каталогах описателей страниц.
     
  5. gorodon

    gorodon New Member

    Blog Posts:
    0
    Deader

    Большинство ваших вопросов отражено в заголовках параграфов данной главы... так что - очень советую...
     
  6. Deader

    Deader New Member

    Blog Posts:
    0
    В PDE? Там же хранятся адреса таблиц PTE, а не их индесы.
     
  7. Deader

    Deader New Member

    Blog Posts:
    0
    Все, стало понятно. Спасибо всем откликнувшимся за терпение и разъяснения.