分段、分页、页表、快表学习笔记


原视频链接:https://www.bilibili.com/video/BV1bf4y147PZ?p=23&spm_id_from=333.1007.top_right_bar_window_history.content.click

1.分段和分页的动机

为了解决内存碎片问题,通过将进程内存分割成不连续的片段,散布在内存的不同位置。

分段认为程序由大小不同的段组成,根据段对程序进行切分,不同的段存放在内存不同位置,比如代码段、data段、堆段、栈段分别保存在内存地某一位置。

分页根据进程内存长度(如4K)进行分割,将进程分割成大小相同的多个分页,分布在内存不同的位置。

2.分段实现原理

首先linux记录了进程的段表,内容是每一个分段的编号、起始物理地址(段基址)、段限长。然后逻辑地址分成两部分,第一部分是段编号,第二部分是段内位移。地址转换的流程为:

  1. 根据段编号,从段表中获取段基址和段限长
  2. 比较段内位移和段限长的大小,如果大于段限长,则地址越限。
  3. 物理地址=段内位移+段基址
  4. 段基址和段限长记录在基址寄存器和限长寄存器中

3.分页实现原理

在这里插入图片描述

首先将内存分成固定大小的若干页框,进程也被分割成一个个页面,页面大小和页框的大小应该相同,这样除了最后一个页面之外,其余页面均不会产生碎片。

在这里插入图片描述

页号和页框号之间的映射关系表称为页表,逻辑地址由页号和页内位移组成,首先根据页号和页表,找到页框号,根据单个页框的大小×页框号,可以得到该页框的物理地址,这个地址+页内位移可以得到逻辑地址对应的物理地址。计算公式1为:
物 理 地 址 = 页 框 号 × 页 面 大 小 + 页 内 位 移 物理地址 = 页框号 × 页面大小 + 页内位移 =×+
假设逻辑地址页号占m位,页内位移占n位,即逻辑地址=[m|n],页大小为2^n,页号对应页框号为x,则物理地址=[x|n],可以看出就是拿页框号替换页号,即可得到物理地址,无需进行加法计算。

4.分页和分段的区别

分段分页
信息的逻辑单位信息的物理单位
段长是任意的页面大小由系统确定
段的起始地址是主存的任一地址开始页框的起始地址是页框大小的整数倍
(段号,段内位移)构成二维地址空间(页号,页内位移)构成一维地址空间
产生外部碎片消除外部碎片,产生内部碎片

5.页表

页框表格式

页框表用于描述内存中哪些页框已用,哪些未用,其形式如下:

frame no.state
01
10
21
30
40
51

页表格式

页表用于描述进程页表和内存页框之间的映射关系,其形式如下:

page no.frame no.
05
10
22

页表左边的列可以省略,因为相当于是数组的下标。

页表目录格式

页表也是储存在内存中的,当页表过大,内存中没有连续的页框能记录时,需要将页表进行分割,然后离散地记录在内存中。通过页表目录,描述页表在内存中的位置。页表目录格式如下:

页表页编号页框编号
PPT#0F#7
PPT#1F#10

此时逻辑地址的编排为:页表页号+页号+页内位移

地址转换的步骤变成:

  1. 根据页表页号找到页表页
  2. 根据页号,在页表页中找到页框号
  3. 根据页框号和页内位移,得到物理地址

如果页目录过大,起始可以将目录进一步分割成多个部分。这样的页表被称为多级页表。

32位系统用的是2级页表,64位系统用的4级页表

页面大小计算

逻辑地址长度占m bit,页内位移占n bit,页号占m - n bit,则页面大小为2^n Byte。

假设页面大小是4K,理论上n = 12,m = 52;实际上64位太大,其中只有48位用来表示地址,所以m = 36。

获取系统页面大小

getconf PAGESIZE

页表特性

  1. 操作系统为每一个进程维护了一份页表的拷贝
  2. 只有正在受CPU调度的进程的页表才会被加载到CPU中
  3. CPU加载页表的时候是把内存中页表的地址加载进来,记录在页表专用寄存器PTBR中
  4. CPU切换页表的时候,只需要重新加载地址
  5. 页表的使用会增加进程上下文切换的开销
  6. CPU每次访问物理地址,都需要两次访存操作,第一次是寻找页表,第二次是访问实际的物理地址

快表-TLB

TLB(Translation Look-aside Buffer)是一种专门记录页表的硬件缓存,大小很小,查找速度很快。TLB将进程中的部分页表项记录在TLB中,因为大小很小。

CPU访问逻辑地址的时候,首先在TLB中寻找表项,如果找到就直接获取到了物理地址;如果cache miss,就经过的两次访存。所以需要将经常访问的页表项(不一定属于同一进程),存放在TLB中,这就是快表。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值