Резервирование большого виртуального адресного пространства в модуле ядра

В моем исследовательском проекте я должен зарезервировать большое адресное пространство виртуальной памяти внутри модуля ядра и обработать доступ к памяти в этой области (в 64-битной системе). Я модифицировал do_page_fault функция в файле arch / x86 / mm / fault.c, чтобы я мог обрабатывать сбои страниц, когда в TLB нет записи отображения страниц.

В моем проекте зарезервированное виртуальное адресное пространство намного больше, чем физически доступная память. Например, допустим, у нас есть 4 ГБ доступного пространства памяти. Внутри модуля ядра у меня есть 16 ГБ адресного пространства, доступного по инструкциям загрузки / хранения. Я хочу сжать страницу 4 КБ в 1 КБ и сохранить сжимаемые данные 16 ГБ в 4 ГБ памяти; как только происходит сбой страницы, он распаковывает соответствующую страницу и копирует ее в кеш страниц.

Я пытался выделить функции памяти, такие как kmalloc а также vmalloc, но они буквально выделяют память, в то время как мне нужно только некоторое сопоставление виртуальных адресов не один к одному посредством вызова функции [декомпрессия]. Как я могу это сделать?

0 ответов

Другие вопросы по тегам