我想构建一个内存分配器来管理一大块非共享的线性地址空间(例如32GB)。我需要在 Big-3 操作系统上运行它,但我可以忍受使用特定于操作系统的代码。
所需功能:
- 开始时,获取在 2^N 字节边界上对齐的虚拟地址空间的 2^N 字节连续区域
- 最初,整个区域应该是不可访问的(即触摸该区域内的任何地址都应该导致该操作系统相当于 SEGV)
- 随着时间的推移,从这个区域的底部(最低地址)开始,我将增加应该可以访问的部分(即分配后备存储,提供 PTE)
- 在运行时,由于后备存储耗尽而遇到故障是可以接受的
奖励积分:
- 理想情况下,最初不保留后备存储
- 在不释放地址空间的情况下取消配置整个区域
- 鼓励使用更大的页面和 TLB 条目
问题:
- 我知道我可以在 Linux 上使用 mmap 来实现这个方案。在 Win64 和 MacOS 上可行吗?
- 如果是,我应该查看哪些原语/系统调用?
- 最初获取地址空间时,如何最好地实现 2^N 字节对齐?