operating-system - 整个物理地址空间如何映射到虚拟地址空间中?
问题描述
我在 XV6 中读到过,在每个进程的虚拟地址空间中,整个物理地址空间都被映射。这怎么可能呢?
解决方案
我在 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 仅用于“教育目的”,预计不会在真实计算机上实际运行,所以这不是一个大问题。
推荐阅读
- r - 如何在 mutate() 中简化 case_when()
- java - 如何将命令行参数传递给 Maven 程序的执行?
- javascript - Testcafe Hover 和 jQuery :hover-selector
- java - 如何在Junit的spring boot中访问用@Mock初始化的静态变量
- python - 仅在同一天内重新采样
- node.js - 请求 JS 没有给出响应
- python - Python OpenCV 多个 UDP 流。巨大的延迟和掉线率
- cloudinary - 如何在 Cloudinary 中获取上传图片的 URL
- angular5 - 在 Slickgrid 的列中动态设置,因此按列方式 gridmenu 不显示
- reactjs - 如何在 Reactjs 中创建对象 id:name 格式