分页存储管理的基本概念

/ 0评 / 0

将内存分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个”页框“,或称”页帧”、“内存块”、“物理块”。 每个页框有一个编号,即“页框号”(或者“内存块号”、“页帧号”、“物理块号”)页框号从0开始

将用户进程的地址空间页分为与页框大小相等的一个个区域,称为“”或“页面“。每个页面也有一个编号,即”页号”,页号也是从0开始

如何实现地址的转换

  1. 要计算出逻辑地址对应的页号
  2. 要知道该页号对应页面在内存中的起始地址
  3. 要算出逻辑地址在页面内的“偏移量”
  4. 物理地址 = 页面始址 + 页内偏移量

如何计算


页表

为了能知道进程的每个页面在内存种存放的位置,操作系统要为每个进程建立一张页表

  1. 一个进程对应一张页表
  2. 进程的每一页对应一个页表项
  3. 每个页表项由“页号”和“块号”组成
  4. 页表记录进程页面和实际存放的内存块之间的对应关系
  5. 在内存中,页表项的长度是相同的,页号是”隐含“的

内存块的起始地址 = 内存块的块号 * 内存块大小

易混概念


基本地址变换机制

基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。

通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F页表长度M

进程未执行时,页表的始址 和 页表长度 放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。

地址变换过程

  1. 根据逻辑地址算出页号、页内偏移量
  2. 页号的合法性检查(与页表长度对比)
  3. 若页号合法,再根据页表起始地址、页号找到对应页表项 (CPU第一次访问内存:查页表)
  4. 根据页表项中记录的内存块号、页内偏移量 得到最终的物理地址
  5. 访问物理内存对应的内存单元 (CPU第二次访问内存:访问目标内存单元)

具有快表的地址变换机构

什么是快表

快表,又称联想寄存器(TLB),是一种访问速度比内存快的多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表

有点类似于Cache,当CPU要将逻辑地址转换为物理地址中时,先会去TLB中找这个页号对应的内存块号,如果没找到的话再去内存中的页表找这个页号对应的内存块号,并且会将内存中页表的这个页表项复制到TLB中。

局部性原理

引入快表后,地址的变换过程

  1. CPU给出逻辑地址,由某个硬件算得页号、页内偏移量,将页号与快表TLB中的所有页号进行比较。
  2. 如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表命中,则访问某个逻辑地址仅需要一次访存即可。
  3. 如果没有找到匹配的页号,则需要访问内存中的页表,找到页面存放的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后访问该物理地址对应的内存单元。因此,若快表未命中,则访问某个逻辑地址需要两次访存注意:在找到页表项后,需要将该页表项放入快表中,以便以后可能的再次访问。但如果快表已满,则需要按照一定的算法对旧的页表项进行替换)

两级页表

单极页表存在什么问题?如何解决

问题一的解决办法:

​ 创建页表的页表,即页目录表,又称顶级页表、外层页表,原来的页表称为二级页表,将二级页表中能够满足一个页面大小数量的页表项当作一个页面,并将此页面的页表项存放到页目录表中。

问题二的解决办法

​ 可以在需要访问页面时才把页面调入内存(虚拟存储技术)。可以在页表项中增加一个标志位,用于表示该页面是否已经调入内存。 若想访问的页面不在内存中,则产生缺页中断(内中断),然后将目标页面从外存中调入内存。

两级页表问题需要注意的几个细节

  1. 采用多级页表机制,则各级页表的大小不能超过一个页面。若两级页表不够,可以分更多级。

  2. 两级页表的访存次数分析(假如没有快表机构)

    第一次访存:访问内存中的页目录表

    第二次访存:访问内存中的二级页表

    第三次访存:访问目标内存单元

发表评论

电子邮件地址不会被公开。 必填项已用*标注