Перемещение страниц.

Тема в разделе "WASM.NT.KERNEL", создана пользователем Clerk, 2 фев 2010.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Здрасте. Тут смысл задачи:
    Некоторая область ядра использует 4M страницы(Large Page). Необходимо заменить физический адрес этой страницы в каталоге страниц. Я не вижу возможности выделить непрерывный блок памяти такого размера с выравниванием на границу 4M. Менеджер памяти использует в основном наборы страниц расположенные произвольным образом в физической памяти. Моё решение - создать таблицу страниц и создать описатель её в каталоге страниц, заменив тем самым страницу размером 4M. Формируем MDL, затем для каждой страницы определяем её физический адрес и загружаем описатели в созданную таблицу страниц.
    Существует ли способ выделить непрерывный участок физической памяти средствами менеджера памяти(чтоб вручную не парсить каталог страниц) ?
     
  2. Bazhan

    Bazhan Андрей

    Публикаций:
    0
    Регистрация:
    8 янв 2008
    Сообщения:
    71
    Адрес:
    Украина
    MmAllocateContiguousMemory
    http://msdn.microsoft.com/en-us/library/ms801986.aspx
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Bazhan
    Выделяет регион выравненный на 4K. У меня 512M всего, 8M не выделяется(можно былобы сделать (~(LARGE_PAGE_SIZE - 1) && (Ptr + LARGE_PAGE_SIZE - 1)).
     
  4. Bazhan

    Bazhan Андрей

    Публикаций:
    0
    Регистрация:
    8 янв 2008
    Сообщения:
    71
    Адрес:
    Украина
    PHYSICAL_ADDRESS pa = { 0xffffffff, 0xffffffff };
    PVOID pv = MmAllocateContiguousMemory( 0x800000, pa );

    у меня выделяется при 256M
     
  5. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Что-то совсем непонятно. "Во всех процессах например заголовок ядра имеет одинаковый физический адрес" - офигенный вывод)
    "Необходимо заменить физический адрес этой страницы в каталоге страниц. Я не вижу возможности выделить непрерывный блок памяти такого размера с выравниванием на границу 4M."
    Блин, хоть убей - не пойму зачем тебе именно блок физ.памяти такого размера.Выравнивание на 4М идет лесом, на 4 кб страницах все то же самое
     
  6. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Обрисуй задачу в целом
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    medstrax1
    Для 4k страниц описатель каждой её хранится в таблице страниц, физический адрес которой находится в каталоге страниц. Для 4M страниц описатель в каталоге страниц определяет не таблицу страниц, а непосредственно её физический адрес, тоесть ссылается на страницу. Под памяти нтос отводятся 4M страницы. Дескриптор 4M страницы содержит в младших 22 битах маску в которой флажки, тоесть физический адрес страницы должен быть выравнен на 4M.