更改内存页面大小

4
我正在阅读一篇关于虚拟内存页面数量与物理内存帧数量相等且页面大小和帧大小相同的文章,比如我的32位系统页面大小为4096。我在想有没有办法改变页面大小或者帧大小呢?我使用的是Linux操作系统。我已经搜索了很多信息,发现我们可以通过转换为巨大页面来改变页面大小,但是否还有其他方法可以改变(增加或减少)或设置我们自己选择的页面大小呢?(不涉及编程,只是普通问题)

在哪个操作系统上? - Basile Starynkevitch
你应该编辑你的问题以改进它(至少添加Linux标签)。并且请解释一下你为什么在问,以及你正在编写什么类型的应用程序! - Basile Starynkevitch
我没有在编写任何代码,这只是一个普通问题。我只是想知道。 - user2353613
1个回答

2
实际上,几乎不可能“更改”内存页面大小,因为页面大小由MMU硬件确定并已知,因此操作系统正在考虑这一点。但是,请注意,一些 Linux 系统(和硬件!)具有hugetlbpage,而且Linux的mmap(2)可能会接受MAP_HUGETLB(但您的代码应该处理不支持大页支持的处理器或内核的情况,例如在第一个具有MAP_HUGETLBmmap失败时再次调用mmap without MAP_HUGETLB)。
据我所读,在一些Linux系统上,您可以使用不同大小的“巨大页面”(hugetlbpage)。但是,系统管理员可能会限制这些功能(或某些内核禁用它),因此您的代码应该始终准备好在使用MAP_HUGETLB的mmap失败时处理。
即使使用了“巨大页面”,页面大小也不是任意的。在POSIX系统上使用sysconf(_SC_PAGE_SIZE)获取标准页面大小(通常为4K字节)。另请参见sysconf(3)
据我所知,即使在具有hugetlbpage功能的系统上,也可以调用没有MAP_HUGETLB的mmap,并且页面大小(由sysconf(_SC_PAGE_SIZE)报告)仍为4K字节。也许一些最近的内核使用奇怪的配置在所有地方都使用巨大页面,而且我IRC记得一些内核可能配置为1M字节页面(我不确定这一点,我可能错了)...

是的,它是4。我正在使用Linux。无论是巨型页面还是简单页面,我们都不能更改大小。我是对的吗? 好的,在我的系统中,巨型页面大小为2048kb。我可以增加巨型页面的数量,但无法更改其大小。 - user2353613
你可以使用mmapMAP_HUGETLB,但是你应该处理失败的情况(例如通过调用不带 MAP_HUGETLBmmap再次尝试)。 - Basile Starynkevitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接