【操作系统】3.3 基本分页存储管理

分页存储管理是为了解决内存碎片问题,将主存和进程信息划分为固定大小的块,通过页表映射逻辑地址到物理地址。地址变换包括基本地址变换和具有快表的地址变换,快表提高了地址转换速度。两级页表解决了大页表占用过多连续内存的问题。地址转换流程涉及页号计算、页表查找和物理地址生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本分页存储管理

为了上述分页思想产生碎片的问题,提出了分页的思想:把主存空间划分为大小相等而且固定、容量较小的块,作为主存的基本存储单位,每个进程的信息也以块大小划分,在存入内存的时候进程以块为单位存入,一个进程装入一个或者多个块。在形式上看分也类似于固定分区,但是每个分区都很小,因此即便进程没有用满分区,留下来的内部碎片也很少。

1.分页基本概念

(1)页面和页面大小

进程中的块又称之为页面或者,内存中的块称之为页框或者页帧。内存中的页框有页号,从低地址到高地址递增。页面的大小为整数幂,方便进行划分。为了管理分页,内存中会有页表以标记每个进程的页面对应的是内存中的哪个页框,同时页面大小设置应该适中,太小会使得页表过长,进程页数太多,换出换入次数增多;太大会导致碎片增多。在进程装入内存的时候,会向页表中写入,进程的每一个页面对应的是内存的哪个一页框,为后面寻址提供根据。

(2)地址机构
假设内存大小为2n比特,并且划分页面大小为2k比特,则需要划分2n-k个页,其内存地址表示需要n位,其中低k位表示的是页内地址,高n-k位表示的是在第几个页。因此,将进程中的逻辑地址转化为页内地址步骤如下:

假设页大小为32B,页数为16页,需要访问的地址为0010 01010

  • 计算逻辑页号:然后取逻辑地址的高4位,可以知道这是第2个页。
  • 找到对应页框在内存中的位置:通过页表,查询进程的第二个页对应内存的位置
  • 算出逻辑地址对应的页内偏移量:取逻辑地址的低k位,知道是本页的第10个位置
  • 物理地址=页框开始物理地址+页内偏移量

页号 = 逻辑地址/页面大小;页内偏移量=逻辑地址mod页面大小;

2.基本地址变换机构

在系统中会设置一个页表寄存器(PTR),用于存放页表在内存的起始地址F和页面长度M。进程未执行的时候,页表的起始地址和页表长度存放在本进程PCB中,当进程被调度的时候,才会将页表起始地址和页表长度装入页表寄存器中。主要地址变换过程如下:

  • 根据逻辑地址算出页号、页内偏移量
  • 页号是否合法,是否越界
  • 根据页表起始地址和页号找到对应页表项
  • 根据页表箱中记录的内存块号和页内偏移量得到最终物理地址
  • 访问物理内存的对应单元

为了方彬啊找到页表项,页表一般放在连续的内存块中。

3.具有快表的地址变换机构
根据程序执行的空间局部性原理,上一条指令所在的页框很有可能也是下一条指令执行所在的页框,因此为了提高逻辑地址到物理地址转换的速度,地址比那换机构中增设了一个具有并行查找能力的高速缓冲存储器——快表,又称相连存储器(TLB),与之相对的在内存中的页表则是慢表
在快表出现之后,地址变换如下:

  • CPU给出逻辑地址后,硬件进行地址转换,将页号送入高速缓存寄存器,并且将页号和快表之中的页号进行对比
  • 如果命中,则直接从中取出该页对应的页框号和页内偏移量组成物理地址
  • 如果不命中,则访问主存之中的页表,并且将读出的页框数据存入快表中,以便后续可能的再次访问

该做法类似于高速缓存,一般命中率在90%以上。

4.两级页表

单级页表在使用上也会存在一定的问题:首先是搜又页表箱需要在内存中连续存放,页表要是很大时需要很大的连续空间;其次,一段时间内并非所有页面都用得到,让整个页表常驻内存有一定浪费。
因此提出了两级页表的概念,逻辑地址被划分为了如下模型:

一级页号二级页号页内偏移量

(待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值