[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/
作者
ErlsrnBy04
发布于
2024年11月15日
许可协议