0

我正在尝试手动更新 TLB 以将新的虚拟内存页面转换为内核空间中的一组物理页面。我想这样做,do_page_fault以便每当加载/存储指令发生在特定的虚拟地址范围(尚未分配)中时,它都会提前在 TLB 中放置一个页表条目。翻译很简单。例如,我希望以下代码正常工作:

int d;
int *pd = (int*)(&d + 0xffff000000000000);
*pd = 25;                  // A page fault occurs and TLB is updated
printk("d = %d\n", *pd);   // No page fault (TLB is already up-to-date)

所以,翻译只是一个减法0xffff000000000000。我想知道实现 TLB 更新功能的最佳方法是什么?

编辑:这样做的主要原因是能够在内核中保留大量的虚拟内存空间。我只想处理内核中特定地址范围内的页面错误。所以,首先我必须保留地址范围(可能超过 100TB 的限制)。然后,我必须为该特定范围实现页面缓存。如果不可能,那么最好的解决方案是什么?

4

0 回答 0