操作系统导论习题解答(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 tablebase/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无效。

4. 在这里插入图片描述

在这里插入图片描述

posted @   astralcon  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示