通过x86 PAT表将内存设置为不可caching

我想从一个用户空间进程中将一系列内存设置为不可caching(Linux,x86-86)。 这个问题很接近,但只提到MTRR寄存器与物理内存一起工作。 我想用PAT表来做这个,因为它们提供了更细致的控制,它们允许虚拟内存在逐页的基础上被设置为不可caching的。

Linux文档Documentation / x86 / pat.txtbuild议应该有mmapSYNC标志,但在实际中我找不到如何做到这一点。 理想情况下,我想使用诸如mprotect(address, range, O_UNCACHABLE)的调用。

我会建议编写一个内核模块为用户级进程提供必要的接口。 在内核模块内部,您可以使用set_memory_uc来控制页面属性。

关于模拟器:除非你在门口模拟,否则应该慢一千到几千倍,而不是一百万次。 不要忘记考虑编写内核模块的时间。 如果花几个星期来编写和调试模块,那么使用模拟器进行一次实验可能会更好。

根据ARM平台上的各种开发人员的问题,代码将是:

 fd = open("/dev/mem", O_RDWR|O_SYNC); uptr = mmap(addr, length, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fd, off); 

参考: