静态页式管理(Paging)
基本原理:
①等分内存为物理块(或称页面 page frame),物理块编号为0,1,2…
②进程的逻辑地址空间分页(page),页编号为0,1,2…,页大小 = 物理块大小
③内存分配原则:进程的一页可装入任一物理块
*----进程的最后一页可能装不满,产生“页内碎片”。
*----分页类似于固定分区,但不同之处在于:页比较小且大小相等 + 一个进程可占据多页且不要求连续性。
管理所需数据结构:
OS为每个进程建立一个页表(Page Table)
页表作用:记录进程的页号和物理块号的对应关系----->便于之后逻辑地址和物理地址的转换
地址转换:
逻辑地址—>物理地址
①页表寄存器(Page Table Register,PTR)
*----存放当前进程的页表起始地址和长度(每个进程的页表起始地址和长度平时放在PCB中,调度时由OS放入PTR)
②页大小的选择
页小:碎片小,但页表占用空间大
页大:页表小,但页内碎片大
因此,通常来说,页的大小为2的整数次幂。
③进程的逻辑地址结构
地址的高位部分为页号,低位部分为页内地址
|31|. . . . . . . . . . . . . . . . . . . . . . . . . . . . .|12|11|. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . … . . . . . . . |0|
页号P | 页内地址d |
---|
④基本的地址转换
已知逻辑地址------------>根据逻辑地址结构,得出页号和页内地址------------->根据页表和页号找物理块号-------------->物理地址 = 物理块号 * 页大小(物理块大小)+页内地址
CPU要存取一个数据,需要访问内存几次??
2次:①访问页表,找到对应的物理块号,得出物理地址 ②访问该物理地址,存取其中的指令或数据
⑤引入快表的地址转换
快表:又称联想存储器,是具有并行查找能力的特殊高速缓冲存储器。当切换到新进程时,快表要刷新。
*-----作用:保存当前进程的页表的子集(部分表项),比如最近访问过的表项。
*-----目的:提高地址转换速度
页表只放物理块号,快表中放页号+物理块号+访问位+状态位
*-----访问位指示该页最近是否被访问过(1:访问过);状态位:表示该快表项是否被占用。
*-----访问位和状态位为快表内容更新依据
*-----有了快表之后,当进程访问一页时,先查找快表,如果没有的话再查找页表。引入快表的效果取决于快表访问时的命中率。
二级页表:
存在意义:页表可能占用相当大的连续的内存空间,因此引入二级页表。
<页表不一定放在内存中,还可以将一部分放在磁盘中。>
①基本原理
将页表进行分页,设置1个一级页表,多个二级页表
*—一级页表:第i项纪录第i号二级页表所在的物理块号;二级页表:第i项纪录第i页对应的物理块号。
系统设置1个页表寄存器,存放一级页表的起始地址和长度。(类似于多级索引)
②进程的逻辑地址结构
|31|. . . . . . . . . . . . . . . . . . . . . . . . |22|21|. . . . . . . . . . . . . . . . . . . . . . . .|12|11|. . . . . . . . . . . . . . . . . . . . . . |0|
一级页号P1 | 二级页号P2 | 页内地址d |
---|
③地址转换
先根据一级页表号,找到对应的二级页表;在二级页表中找到页号和对应的物理块号;然后得出物理地址。说明:二级页表并未减少页表所占的内存空间,但解决了页表的离散分配问题,避免了连续存储对空间的要求