我在那里读到,虚拟内存页面的数量等于物理内存帧的数量,并且帧的大小和页面的大小相等,就像我的32位系统一样,页面大小是4096.
我觉得有没有办法改变页面大小或帧大小?
我正在使用Linux操作系统。我搜索了很多,我找到的是,我们可以更改页面大小,或者实际上我们可以通过转移到大页面来增加页面大小。是否有任何其他方式来更改(增加或减少)或设置页面大小我们的选择?
(不编码,一般问题)
答案 0 :(得分:1)
在实践中,(几乎)不可能改变"内存页面大小,因为page大小已知&由MMU硬件确定,因此操作系统正在考虑这一点。但是,请注意某些 Linux系统(和硬件!)具有hugetlbpage而Linux mmap(2)可能接受MAP_HUGETLB
(但您的代码应处理处理器或没有巨大页面支持的内核,例如,当第一个mmap
MAP_HUGETLB
失败时,通过 mmap
再次调用 MAP_HUGETLB
。
根据我的阅读,在某些 Linux系统上,您可以使用各种大小的hugetlbpage
。但系统管理员可以限制这些(或某些内核禁用它),因此您的代码应始终准备好mmap
MAP_HUGETLB
失败。
即使使用那些"大页面",页面大小也不是任意的。在POSIX系统上使用sysconf(_SC_PAGE_SIZE)
来获取标准页面大小(通常为4K字节)。另请参阅sysconf(3)
AFAIK,即使在具有hugetlbpage
功能的系统上,mmap
也可以称为,不含 MAP_HUGETLB
和页面大小(由sysconf(_SC_PAGE_SIZE)
报告)仍然是4Kbytes。也许一些最近的内核有一些奇怪的配置,到处都在使用大页面,而IIRC的某些内核可能配置了1Mbyte页面(我不确定,我可能错了)......