基本页表和二级页表的思路和比较

基本页表
默认块号大小为4KB。

在这里插入图片描述
(页表项由 页号 和 块号 组成)
块号是内存的。
块号 -> 物理地址
内存的块号是唯一的,通过它能得到内存内的物理地址。

块号为0,它的物理地址为0。
比如块号为3,它的物理地址是4KB*3 = 12288。

页表:通过页表知道进程的4KB数据块,存放在内存的哪个4KB的空间内;
逻辑地址转换:一个逻辑地址通过计算后,得到在内存中的物理地址。

在这里插入图片描述
 计算机为32位,按字节编址。逻辑地址也为32位。
 页内偏移量为12位,是因为每个页面固定大小为4KB = 212B。
 页号有20位,可以认为系统最多有220个页面(内存大小最大为220*4KB = 4GB)。

 我们得到一个逻辑地址如何算出真实的物理地址?
 前面的20位的页号就是内存的块号,通过前面的方法(块号 -> 物理地址)。
 比如块号为n,偏移量为w,物理地址为n*4KB+w

这个n有很多种算法
我们可以使用除法,逻辑地址 / 页面大小。(除法相当于二进制移位)
或者我们可以和计算机硬件的处理方式,前面的20位就是页号(块号)

在这里插入图片描述
在这里插入图片描述

一级页表需要扩充成二级页表的原因:
页表是连续存放的。(页表在存储时,只存块号,前面的页号是不存的(比如C语言的数组是不存下标的,所以需要连续存放,从而可以快速算出某个元素存放的地址))
页表的优点是,页表的块可以分散存放,但是页表又需要连续存放,这就体现不出它的优点了,所以我们引进了二级页表。

二级页表
 我们前面说过了一级页表,是只存储内存块号的。
 假设内存块号大小是220,我们用4B = 32位 来存放内存块号。不用3B存的原因是 为了一个页面正好能装下整数个页表项(如取成4B,一页正好能装下1K个页表项)。

 以一个40MB的进程为例,页表项共40KB(40MB/4KB*4B)大小,如果按照一级页表的存法,我们需要10个连续的页框(40KB/4KB)。
 我们思考二级页表如何使得这10个页面不需要连续了?

思路:
 顶级页表最多只能有一个页面。(这是规定)
 一个页面可以存放1K个页表项4KB/4B = 1K。
 所以顶级页表虽然只有一个页面但是可以存放1K个页表项,其中每一个页表项对应的是下一级的1K个页表项。所以可以存放的最大空间是1K* 1K *4KB = 4GB内存。

我们知道在一级页表中页号有20位。二级页表我们不需要连续存放了,所以这就是一级页号和二级页号只有10位(1K)的原因。

参考资料:

  1. (视频)https://www.bilibili.com/video/BV1YE411D7nH
  2. (书籍)2021操作系统考研复习指导-王道论坛
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieshenai

为了遇见更好的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值