1

我想构建一个内存分配器来管理一大块非共享的线性地址空间(例如32GB)。我需要在 Big-3 操作系统上运行它,但我可以忍受使用特定于操作系统的代码。

所需功能:

  • 开始时,获取在 2^N 字节边界上对齐的虚拟地址空间的 2^N 字节连续区域
  • 最初,整个区域应该是不可访问的(触摸该区域内的任何地址都应该导致该操作系统相当于 SEGV)
  • 随着时间的推移,从这个区域的底部(最低地址)开始,我将增加应该可以访问的部分(分配后备存储,提供 PTE)
  • 在运行时,由于后备存储耗尽而遇到故障是可以接受的

奖励积分:

  • 理想情况下,最初不保留后备存储
  • 在不释放地址空间的情况下取消配置整个区域
  • 鼓励使用更大的页面和 TLB 条目

问题:

  • 我知道我可以在 Linux 上使用 mmap 来实现这个方案。在 Win64 和 MacOS 上可行吗?
  • 如果是,我应该查看哪些原语/系统调用?
  • 最初获取地址空间时,如何最好地实现 2^N 字节对齐?
4

0 回答 0