侧边栏壁纸
  • 累计撰写 39 篇文章
  • 累计创建 1 个标签
  • 累计收到 3 条评论
标签搜索

【深入浅出-系统架构师】(18):操作系统基础知识——分页存储管理

mousycoder
2015-10-14 / 0 评论 / 0 点赞 / 67 阅读 / 1,157 字
温馨提示:
本文最后更新于 2022-01-20,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

定义

将一个进程直接分散到许多不相邻的分区中。

页面与页表

  • 页面
    将一个进程的逻辑地址分成若干大小相同的片,并加以编号,从0开始,如第0页,第1页


  • 把内存空间分配成页面相同大小的若干存储块,并加以编号,如0#块,1#块

页面大小选择

分页系统中的页面其大小应适中。页面若太小,一方面虽然可使内存碎片减小,从而减少了内存碎片的总空间,有利于提高内存利用率,但另一方面也会使每个进程占用较多的页面,从而导致进程的页表过长,占用大量内存;此外,还会降低页面换进换出的效率。然而,如果选择的页面较大,虽然可以减少页表的长度,提高页面换进换出的速度,但却又会使页内碎片增大。因此,页面的大小应选择适中,且页面大小应是2的幂,通常为512 B~8 KB

页表

页号 = 相对地址 / 块尺寸

页内偏移 = 相对地址 % 块尺寸

地址变换

  • 当进程运行时,系统将该进程 PCB 中页表起始地址及其长度送入页表起始地址寄存器(PB)和页表长度寄存器(Pl)
  • 系统将 CPU 给出的逻辑地址由硬件中的地址映射机制自动分成两部分:页号 p 和页内地址 d
  • 比较 p 和 Pl,若 p>= Pl,发生地址越界终端,否则进行地址映射
  • 根据页表起始地址寄存器 Pb 和 p,找到也表中相应表项,即:找到页号 p 的物理块号 p'
  • 将 p' 与 d 拼在一起形成内存物理地址

逻辑地址转换成物理地址

缺点

由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近1/2。可见,以此高昂代价来换取存储器空间利用率的提高,是得不偿失的。

改良方案

  • 当进程运行时,系统将该进程 PCB 中页表起始地址及其长度分别送入页表起始地址寄存器(Pb)和页表长度寄存器(Pl)
  • 系统将 CPU 给出逻辑地址由硬件中的地址影射机制自动分成页号 p 和业内地址 d
  • 比较 p 和 Pl,若 p >= Pl,则产生地址越界中断,否则进行地址映射,与此同时,用 p 去查找快表,若找到一项,则终止步骤 d,转入步骤 e
  • 根据页表起始地址寄存器 Pb 和 p,找到页表中相应表项,即 p 的物理块号 p'
  • 将 p' 和 d 放入块表中,若块表已满,则用淘汰算法,淘汰表中的一项。常用淘汰算法:先进先出(淘汰最先进入的)、访问位(淘汰访问次数最少的)
  • 将 p' 和 d 拼在一起形成内存物理地址

硬件支持

硬件需要提供页表起始地址寄存器(Pb)和页表长度寄存器(Pl)
页表起始地址寄存器保存了正在运行进程页表的首地址
页表长度寄存器保存了正在运行进程页表的长度

分页存储的优缺点

优点

  • 作业可不连续存放,解决了可变分区存储的外部碎片问题
  • 有利于多道程序运行

缺点

  • 存在内部碎片
  • 页的划分没有考虑程序的逻辑结构,不利于共享
0

评论区