操作系统导论习题解答(18. Introduction to Paging)
Paging: Introduction
在解决大多数空间管理问题时,操作系统会采用两种方法中的一种。一种是前面我们所提及到的segmentation,很不幸的是这种方法实现起来很困难。另一种方法就是接下来要介绍的paging。
1. A Simple Example And Overview
下图就是一个64KB的虚拟地址空间被分成了4个paging。
下图是将上图的虚拟page转换为实际物理frame。
从上两幅图可以看出虚拟page到物理frame的转换:
Virtual Page 0 → Physical Frame 3
VP 1 → PF 7
VP 2 → PF 5
VP 3 → PF 2
--------------------------------------------------------------------------------------------------------(分割线)
movl <virtual address>, %eax
为了转换上述代码过程生成的虚拟地址,我们必须将其分成两个部分,virtual page number(VPN)和page的offset。
上述进程的虚拟地址为64字节,因此我们的虚拟地址总共需要6位(26 = 64)。如下图所示:
由于page的大小为16字节。如下图所示:
为了更好地理解,我们不妨有如下代码:
movl 21, %eax
对于上述代码有如下表示:
前两位VPN表示选中page 1,后四位offset表示page 1中偏移量。
我们再回头看下开头的虚拟地址转换到物理地址(VP 1 → PF 7),则进一步可以做如下转换:
注意上述图片,offset是不变的,因为offset仅仅告诉我们所需page中的哪个字节。对于VPN到PFN的转换,每个进程都有一个page table。
2. Where Are Page Tables Stored?
page table可以变得非常大,比我们之前讨论的segment table或base/bounds要大得多。
例如,想象一个典型的32位地址空间,具有4KBpage。该虚拟地址分为20位VPN和12位offset。
由于page table太大,我们不可能用MMU中任何专用芯片硬件来存储当前正在运行的进程的page table。所以我们将page table存储在内存的某个位置。现在我们假设page table存储在操作系统管理的物理内存上(稍后我们将看到很多OS内存本身可以被虚拟化),如下所示:
3. What’s Actually In The Page Table?
page table:一种数据结构。用于将虚拟地址(VPN)映射到物理地址(PFN)。
最简单的形式就是线性page table,它就是一个数组。操作系统通过VPN建立索引,并在该索引处查找page-table entry (PTE)。下图是一个例子:
P(present bit):当前位指示此页面是在物理内存中还是在磁盘上。
R/W(read/write bit):用于确定是否允许对该页面进行写操作。
U/S(user/supervisor bit):用于确定用户模式进程是否可以访问页面。
PWT、PCD、PAT、G:确定这些页面的硬件缓存工作方式。
A(accessed bit):跟踪是否已访问页面。
D(dirty bit):指示该页自从进入内存以来是否已被修改。
4. Paging: Also Too Slow
上述我们已经知道page table大部分情况都是非常大的,其实它们也可能效率非常低。
如下代码所示:
5. Homework (Simulation)
In this homework, you will use a simple program, which is known as paging-linear-translate.py, to see if you understand how simple virtual-to-physical address translation works with linear page tables. See the README for details.
Question & Answer
1. 

从上面3幅图可以发现:当地址空间增大时,page-table也相应的增大。
从上面3幅图可以发现:当page增大时,page-table减小。
一般情况下不使用big pages是为了提高效率。
2. 
从上面5幅图可以发现:当增加percent of address space that is used时,有效的page-table数量也增加。
3. Now let’s try some different random seeds, and some different (and sometimes quite crazy) address-space parameters, for variety:
第二组不符合实际。如下所示:
从图中就可以看出,虚拟地址对应的page-table无效。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端