【发布时间】:2020-11-26 09:25:01
【问题描述】:
我在 XV6 中读到过,在每个进程的虚拟地址空间中,整个物理地址空间都被映射。这怎么可能?
【问题讨论】:
标签: operating-system xv6 virtual-address-space
我在 XV6 中读到过,在每个进程的虚拟地址空间中,整个物理地址空间都被映射。这怎么可能?
【问题讨论】:
标签: operating-system xv6 virtual-address-space
我在 XV6 中读到过,在每个进程的虚拟地址空间中,整个物理地址空间都被映射。这怎么可能?
通常,虚拟地址空间分为 2 个区域 - 用户空间(属于当前进程)和内核空间(所有进程都相同)。然后内核空间被分成更小的区域(内核的代码和数据、内存映射设备的区域等)。如果剩余的内核空间量大到足以容纳整个物理地址空间,那么就没有问题(但这极不可能)。
但是;这可能不是 XV6 实际所做的。更有可能的是它只将物理 RAM 映射到内核空间(根本不映射整个物理地址空间)。
对于一些实数;假设您有一台具有 128 MiB RAM 的计算机和一个具有 4 GiB 物理地址空间的 32 位 CPU(其中大部分物理地址空间未使用且不是 RAM);你还剩下 256 MiB 的内核空间。在这种情况下,128 MiB 的 RAM 将适合剩余的 256 MiB 内核空间(但整个 4 GiB 的物理地址空间不会)。
当然,这在实际系统上仍然可能会失败(只要 RAM 过多,尤其是对于 32 位 CPU)。幸运的是,XV6 仅用于“教育目的”,预计不会在真实计算机上实际运行,所以这不是一个大问题。
【讨论】: