【系统架构师修炼之道】(19):操作系统基础知识——分页存储管理
定义
将一个进程直接分散到许多不相邻的分区中。
页面与页表
- 页面
将一个进程的逻辑地址分成若干大小相同的片,并加以编号,从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)
页表起始地址寄存器保存了正在运行进程页表的首地址
页表长度寄存器保存了正在运行进程页表的长度
分页存储的优缺点
优点
- 作业可不连续存放,解决了可变分区存储的外部碎片问题
- 有利于多道程序运行
缺点
- 存在内部碎片
页的划分没有考虑程序的逻辑结构,不利于共享
注:该文章转载自:http://mousycoder.com/2015/10/14/the-pragmatic-sa-19/