C 您可以在Linux中手动分配虚拟页面吗?

C 您可以在Linux中手动分配虚拟页面吗?,c,linux,memory-management,operating-system,C,Linux,Memory Management,Operating System,我正在玩我写的一个简单的缓存模拟器,我想知道是否有可能通过Linux手动分配一个虚拟页面,这样我就可以测试路径冲突 我知道这是值得怀疑的,甚至在Linux的设计中可能都没有考虑过,而且用不同的方式来测试这一点显然更容易(只是传递一个地址值),但出于我自己的好奇心,我想我会把这个问题抛出去 我想要的是: char *p1 = (char *)SomeLiteral; *p1 = value1; dcache.writeback(p1); char *p2 = (char *)ADifferent

我正在玩我写的一个简单的缓存模拟器,我想知道是否有可能通过Linux手动分配一个虚拟页面,这样我就可以测试路径冲突

我知道这是值得怀疑的,甚至在Linux的设计中可能都没有考虑过,而且用不同的方式来测试这一点显然更容易(只是传递一个地址值),但出于我自己的好奇心,我想我会把这个问题抛出去

我想要的是:

char *p1 = (char *)SomeLiteral;
*p1 = value1;
dcache.writeback(p1);

char *p2 = (char *)ADifferentLiteral;
*p2 = value2;
//may map to same set index and be brought to second way
dcache.writeback(p2);
这可能适用于某些嵌入式系统,但在Linux下显然会出现页面错误。那么,有没有办法为p1和p2分配一个虚拟页面?甚至设置程序堆的虚拟地址


如果这听起来很迟钝,我道歉,谢谢

如果您想让它分配物理页面,只需通过向每个页面写入一个值来浏览并触摸每个页面即可。假设您需要预先分配1024个4k页面,然后调用malloc,然后以4k步骤遍历地址,并在每个地址处写入一个值

了解并阅读@BasileStarynkevitch,这对他有什么帮助?似乎他想要的是避免页面错误,而实现这一点的方法是触摸每个页面,以便强制将物理内存分配给虚拟页面。另请参见&如果您使用mmap()文件,并且没有太大的内存压力(您有可用的可用内存),则内容存储在称为页面缓存的内核数据结构中,并且不会命中实际媒体(直到munmap()或msync())。您可以多次将一个文件映射到mmap(),从而获得基本相同物理RAM的新虚拟地址。使用
MAP\u NORESERVE
mmap()标志避免为映射保留交换。您可以使用mlock()来确保页面保留在RAM(页面缓存)中,或者使用madvise()来请求(没有保证,只是意图)或请求将其逐出。使用msync()更新文件内容。