[OS]Three Easy Pieces Chapter 18
Paging: Introduction
1 Overview
每个进程都有一个自己的页表(Page table),用来进行虚拟地址到物理地址的转换。
虚拟地址分为两部分,虚拟页号(Virtual Page Number,VPN)和内页偏移(offset)。
MMU根据页表,将VPN转换为对应的物理页号(Physical Page Number,PPN),然后将PPN和offset组合,获得实际的物理地址。
2 Where Are Page Tables Stored?
对于常见的地址空间(32位,页大小4KB),VPN是20位,offset是12位。这意味着我们需要$2^{20}$个页表项(page table entry),如果每个页表项是4字节,那么每个进程为了进行地址转换,需要4MB的空间。因此,通常,将页表防止在内存中,而不是在某些芯片上的硬件中。
3 What’s Actually In The Page Table?
页表就是一个负责将VPN转换为PPN的数据结构。最简单的实现方式是数组,OS用VPN作为索引,取得对应的PTE,然后取得对应的PPN。
valid bit
该位用来标识一个地址转化是否有效。
protection bits
用来标识某页是否可读,可写,可执行等。
present bit
用来标识某页是在物理内存中,还是在磁盘中。主要是为了支持交换技术。
dirty bit
用来标识某页是否被修改过。
reference bit(accessed bit)
用来标识某页是否被访问过。主要是为了支持页替换。
4 Paging: Also Too Slow
注意到,每次访存之前,都必须进行一次额外的访存,找到对应的PTE完成地址转换,然后才能访问实际的内存。
[OS]Three Easy Pieces Chapter 18
https://erlsrnby04.github.io/2024/11/15/OS-Three-Easy-Pieces-Chapter-18/