首页 > 解决方案 > 整个物理地址空间如何映射到虚拟地址空间中?

问题描述

我在 XV6 中读到过,在每个进程的虚拟地址空间中,整个物理地址空间都被映射。这怎么可能呢?

标签: operating-systemxv6virtual-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 仅用于“教育目的”,预计不会在真实计算机上实际运行,所以这不是一个大问题。


推荐阅读