在内核模块中保留大型虚拟地址空间

时间:2017-10-14 00:05:58

标签: memory-management linux-kernel kernel-module virtual-address-space page-caching

在我的研究项目中,我必须在内核模块中保留一个大的虚拟内存地址空间,并处理对该区域的内存访问(在64位系统中)。我在arch/x86/mm/fault.c中修改了do_page_fault函数,以便在TLB中没有页面映射记录时可以处理页面错误。

在我的项目中,保留的虚拟地址空间远大于物理可用内存。例如,假设我们有4GB可用内存空间。在我的内核模块中,我有16GB的地址空间可以通过加载/存储指令访问。我想将4KB页面压缩成1KB,并将16GB可压缩数据保存到4GB内存中;一旦发生页面错误,它将解压缩相应的页面并将其复制到页面缓存中。

我已尝试过内存分配kmallocvmalloc等功能,但它们确实分配内存,而我只需要通过调用[[a]来进行非一对一的虚拟地址映射。减压]功能。我怎样才能做到这一点?

0 个答案:

没有答案