【系统架构师修炼之道】(19):操作系统基础知识——分页存储管理

定义

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

页面与页表

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


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

页面大小选择

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

页表

【系统架构师修炼之道】(19):操作系统基础知识——分页存储管理_第1张图片

页号 = 相对地址 / 块尺寸

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

地址变换

  • 当进程运行时,系统将该进程 PCB 中页表起始地址及其长度送入页表起始地址寄存器(PB)和页表长度寄存器(Pl)

  • 系统将 CPU 给出的逻辑地址由硬件中的地址映射机制自动分成两部分:页号 p 和页内地址 d

  • 比较 p 和 Pl,若 p>= Pl,发生地址越界终端,否则进行地址映射

  • 根据页表起始地址寄存器 Pb 和 p,找到也表中相应表项,即:找到页号 p 的物理块号 p'

  • 将 p' 与 d 拼在一起形成内存物理地址

逻辑地址转换成物理地址

【系统架构师修炼之道】(19):操作系统基础知识——分页存储管理_第2张图片

缺点

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

改良方案

【系统架构师修炼之道】(19):操作系统基础知识——分页存储管理_第3张图片

  • 当进程运行时,系统将该进程 PCB 中页表起始地址及其长度分别送入页表起始地址寄存器(Pb)和页表长度寄存器(Pl)

  • 系统将 CPU 给出逻辑地址由硬件中的地址影射机制自动分成页号 p 和业内地址 d

  • 比较 p 和 Pl,若 p >= Pl,则产生地址越界中断,否则进行地址映射,与此同时,用 p 去查找快表,若找到一项,则终止步骤 d,转入步骤 e

  • 根据页表起始地址寄存器 Pb 和 p,找到页表中相应表项,即 p 的物理块号 p'

  • 将 p' 和 d 放入块表中,若块表已满,则用淘汰算法,淘汰表中的一项。常用淘汰算法:先进先出(淘汰最先进入的)、访问位(淘汰访问次数最少的)

  • 将 p' 和 d 拼在一起形成内存物理地址

硬件支持

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

分页存储的优缺点

优点

  • 作业可不连续存放,解决了可变分区存储的外部碎片问题

  • 有利于多道程序运行

缺点

  • 存在内部碎片

  • 页的划分没有考虑程序的逻辑结构,不利于共享


感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,你的鼓励是作者写作最大的动力,
如果您认为本文质量不错,读后觉得收获很大,不妨小额赞助我一下,让我更有动力继续写出高质量的文章。

  • 支付宝

  • 微信

作 者 : @mousycoder

原文出处 : http://mousycoder.com/2015/10/14/the-pragmatic-sa-19/

创作时间:2015-9-18

更新时间:2015-10-16

你可能感兴趣的:(系统架构师修炼之道)