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

基本页表
默认块号大小为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操作系统考研复习指导-王道论坛
  • 19
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
(1) 由于每个页面大小为64Byte,因此每个页面的偏移量需要6位二进制位来示。操作系统的物理地址和逻辑地址寻址空间为64KB,即2^16Byte,因此需要16位二进制位来示。因为采用两级页的分页管理方式,所以可以将16位逻辑地址分为两部分,一部分用于访问一级页,另一部分用于访问二级页。因此,一级页需要10位二进制位来示,而二级页需要6位二进制位来示。每个页项需要记录页面的物理地址,因此每个页项需要占用6位二进制位。因此,一级页和二级页的大小均为2^10个和2^6个,页占用的存储空间大小为2^10*6bit=60Byte和2^6*6bit=24Byte。 (2) 一级页和二级页逻辑地址结构图如下: 一级页逻辑地址结构图: |--------10位--------|--------6位--------| | 一级页索引 | 页内偏移量 | 二级页逻辑地址结构图: |--------10位--------|--------6位--------| | 一级页索引 | 二级页索引 | 页内偏移量 | 一级页项包含了指向二级页的指针,而二级页项包含了页面的物理地址。 (3) TLB(Translation Lookaside Buffer)是一种高速缓存,用于存储最近访问过的页项,以加快操作系统对内存的访问速度。当操作系统需要访问某个页面时,首先会检查TLB中是否已经存在该页面的页项。如果存在,操作系统就可以直接从TLB中获取该页项,而不需要访问内存中的页。这样可以大大减少访问内存的次数,从而提高了操作系统对内存的访问速度。如果TLB中不存在该页项,操作系统就需要访问内存中的页来获取页面的物理地址。在访问完毕后,操作系统会将该页项加载到TLB中,以便下次访问时直接从TLB中获取。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jieshenai

为了遇见更好的文章

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

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

打赏作者

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

抵扣说明:

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

余额充值