1、第 8章 内存管理(三)分 页内存管理离散内存管理方案 分页内存管理方案 现代操作系统常用方案 分段内存管理方案 段页式内存管理方案分页( Paging) 进程物理地址空间可能不连续 如果有可用的物理内存,它将分给进程 把物理内存分成大小固定的块,称为 帧( Frame) 大小为 2的幂 早期: 512字节至 8192字节 现在: 4K-64K 把逻辑内存也分为同样大小的块,称为 页( Page) 系统保留所有空闲帧的记录 运行一个有 N页大小程序,需要找到 N个空帧来装入程序 建立一个页表,把逻辑地址转换为物理地址 存在内碎片逻辑内存和物理内存的分页模型 分页地址被分为 : 页号 (p) 它
2、包含每个页在物理内存中的基址,用来作为页表的索引 页偏移 (d) 同基址相结合,用来确定送入内存设备的物理内存地址对给定逻辑地址空间 2m 和页大小 2n 线性地址和二维地址page number page offsetp dm - n n地址转换机制分页的硬件支持1)根据逻辑地址中的页号 p,到页表中找到第 p项,第 p项内存储的 f就是页框号2)页框号 f和页内偏移 d构成物理地址32-byte的内存4-byte的页分页的例子空闲帧的分配页表的实现 页表被保存在主存中 页表基址寄存器 (PTBR)指向页表 页表限长寄存器 (PRLR)表明页表的长度 在这个机制中,每一次的数据 /指令存取需
3、要两次内存存取,一次是存取页表,一次是存取数据 /指令 解决两次存取的问题,是采用小但专用且快速的硬件缓冲,这种缓冲称为 转换表缓冲器 (TLB)或联想寄存器TLB TLB并行查找 地址转换 (A, A) 如果 A在联想寄存器中,把帧号取出来 否则从内存中的页表中取出帧号页号 帧号使用 TLB的分页硬件有效访问时间 联想寄存器的查找需要时间单位 a微秒 假设内存一次存取需要 b微秒 命中率 在联想寄存器中找到页号的百分比,比率与联想寄存器的大小有关 命中率 = 有效访问时间 (EAT)EAT = (a + b) + (1 ) (a+2b)内存保护 简单方法: 把页号和页表限长寄存器 (PRLR)比较 内存的保护由与每个帧相连的保护位来实现 有效 -无效位附在页表的每个表项中 : “有效”表示相关的页在进程的逻辑地址空间,并且是一个合法的页 “无效”表示页不在进程的逻辑地址空间中页表中的有效位和无效位 共享代码 如果代码是可重入代码(只读),可以在进程间共享 (如文本编辑器 , 编译器 , 数据库 系统 ) 共享 代码必须出现在所有进程的逻辑地址空间的相同位置 私有代码和数据 每个进程保留 一个代码 和 数据副本 存有私有数据和代码的页能够出现在逻辑地址空间的任意位置页共享一个共享页的例子