memory-management - 有人可以解释一下操作系统中的分页吗?

标签 memory-management operating-system paging cpu-architecture

Frequently, on a 32-bit CPU, each page-table entry is 4 bytes long, but that size can vary as well. A 32-bit entry can point to one of 2^32 physical page frames. If frame size is 4 KB (2^12), then a system with 4-byte entries can address 2^44 bytes (or 16 TB) of physical memory. We should note here that the size of physical memory in a paged memory system is different from the maximum logical size of a process.



分页如何使逻辑内存空间大于物理内存空间? 32 位 CPU 中的总帧数不是等于 2^(32-12)=2^20 帧数而不是 2^32 帧数吗?如果是这样,是否具有 4 字节条目的系统不能寻址 (2^20)*(2^12) 字节的内存?

最佳答案

诚然,这段文字不是很清楚。我会尽力清除它。

将虚拟地址转换为物理地址时,不会转换固定数量的低位:

+---------------------+----------+
|    High bits        | Low bits |
+---------------------+----------+
         |                  |
         |                  |
         V                  |
   [Page tables]            |
         |                  |
         |                  |
         V                  V
+---------------------+----------+
|        Physical address        |
+---------------------+----------+

较低的位数与页面大小相关:如果我们假设页面为 4KiB,那么较低的 12 位是固定的,不会被转换。
我们还假设虚拟地址空间是 32 位。

如果页表条目是 32 位长,它可以提供 32 位用裁剪理地址的高位部分。
因此,在查找页表时,我们有 20 (32 - 12) 位输入和 32 位输出。
加上来自固定部分的额外 12 位,这给出了 32 + 12 = 44 位的物理地址。

一个更新的数字:
        <---------- 32 bits ----------->
        <---- 20 bit -------> <- 12 b -> 
       +---------------------+----------+
       |    High bits        | Low bits |
       +---------------------+----------+
               |                  |
               | 20 bit           |
               V                  |
         [Page tables]            |
               |                  |
               | 32 bit           |
               V                  V
+----------------------------+----------+
|           Physical address            |
+----------------------------+----------+
 <-------- 32 bits ---------> <- 12 b ->
 <------------- 44 bits --------------->

然而,这不是真正的 44 位寻址,指针仍然是 32 位。
应用程序只能直接访问 4GiB 的内存,但操作系统可以映射一个
应用到第一个 4GiB,另一个应用到第二个 4GiB,依此类推。

这类似于 PAE适用于 x86。

所有页表条目都用于提供物理地址的较高位的假设是不正确的。
其中一些位用于设置帧的属性:缓存能力、访问权限、映射状态等。

物理地址的高位称为页框。
页框的数量是由页表项的结构决定的,而不是由虚拟地址空间(也不是物理地址空间)的大小决定的。
如果页表条目的帧号为 50 位,则有 250 个帧。
物理地址的较低部分称为页偏移量,它由页大小(或帧大小,它们在设计上相等)决定。

关于memory-management - 有人可以解释一下操作系统中的分页吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44356669/

相关文章:

iOS内存管理一头雾水

ios - 过渡到 ARC - 发布不引发错误

c - 如何找出物理内存的哪些部分包含哪些进程的数据/指令?

c - 更改大页分配的大小时由于initialize()函数导致的段错误

heap - 对象是堆中最小的可分页单元吗?

url - 你如何处理排序、分页和过滤的参数?

memory-management - 当使用将在函数末尾删除的字符串调用时,如何返回 serde_json::from_str 的结果?

r - 垃圾收集器会在tryCatch语句的替代表达式中释放变量吗?

windows - 从架构上讲,共享对象 (SO) 和动态链接库 (DLL) 之间有什么区别?

php - php中的分页显示多个页面的数据