操作系统的内存管理(中)
基本分页存储管理方式
基本概念
基本构成
页
将一个进程的逻辑地址空间分成若干大小相等的片,称为页。
页框
将物理内存空间分成与页大小相同的若干存储块,称为页框,页帧。
分页存储
为进程分配内存时以页框为单位将进程中的若干分页分别装入多个可以不邻接的页框中。
页内碎片
进程的最后一页一般装不满一个页框,而形成不可利用的的碎片,称为页内碎片。
页表
页表是系统为进程建立的数据结构,页表的作用是实现页号到页框号的映射。
地址结构
页号 P 和 页内偏移量 W。 若 A 为逻辑地址, L 为页大小,P 为页号,W 为页内偏移量。
P = INT (A/L) W = MOD(A/L)
分页地址变换
为了能将用户地址空间的逻辑地址变换为内存空间的的物理地址,在系统中必须设置地址变换地址,该机构的基本任务是实现逻辑地址到物理地址的变换。
地址变换过程
1.进程执行,PCB 中页表的起始地址和页表长度发送 CPU 的页表寄存器。
2.CPU 访问逻辑单元 A。
3.由分页地址变换机构硬件自动将 A 分为页号和页内偏移量两个部分。
4.由硬件检索页表,得到 A 所在的对应的页框号。
页号对应的页表项的的起始地址=页表起始地址 + 页表长度 * 页号 。
5.页框号和页内偏移量地址送物理地址寄存器,计算物理地址。
物理地址=页框大小*页框号 + 页内偏移量
页大小的选择
在分页系统中,页大小由机器的体现结构和操作系统共同决定。对于某一种机器只能支持几种固定的页大小。一旦操作系统选定了一种页大小,系统中所有进程的页大小就固定了。
影响页大小设计的因素。
1.管理内存的开销。
选择较小的页,会导致进程被划分较多的页,页表过长,占用大量的内存空间。同时,进程的缺页率和置换率都会比较高,内存管理的时间开销相对较大。
2.内存的利用率。
选择较小的页,有利于提高内存的利用率,但存在(1)中描述的缺点。选择较大的页,可以克服(1)中描述的缺点,但页内碎片大,空间利用率降低。
快表
什么是快表
块表也称转换后援缓冲(Translation look-aside buffer,TLB),是为了提高 CPU 访存速度而采用的专用缓存,用来缓存最近被访问过的页表项。
TLB 是关联的快速闪存。TLB 的条目由两部分构成:键(对应页号)和值(页框号)。
引入 TLB 后的地址变换过程
1.CPU 产生分页的逻辑地址页号和页内偏移量,将逻辑地址页号提交给 TLB。
2.查找 TLB,如果找到页号,则把该页所在的页框号用于形成物理地址。否则(TLB 失效)查找内存中的页表,从内存页表中找到对应的页表项,读取页所在的页框号,形成物理地址。
3.如果所查找的页表项不在 TLB 中,在访问内存表后,要把找到的页表项中的页号和页框号写到 TLB 中,如果 TLB 中的条目已慢,系统会根据某种策略选择一个 TLB 中的条目,用刚访问的页表项信息替换选中的这个 TLB 条目。
两级页表
前情提示(基本分页存储)
1.每一个进程有一个页表。
2.每个页表至少包含与进程页数相同的页表项数。
3.页表必须是连续存放。
二级表概念
两级页表是将页表在进行分页,使每一个页表分页的大小与内存页框的大小相同,并为它们编号。将这些页表分别分别放入不同的,不一定相邻的页框中,为离散分配的页表再建立一个张外层页表(页目录表),页目录表中的每个表项中记录了页表分页所在的页框号。
使用二级表时,把 4M 大小的页表分为 1024 个页表分页。页表长度为 1K 个,每个页表大小为 4KB。1 K 个页表离散存放。
逻辑地址结构
在二级分页系统中,为了能在地址映射时得到离散存放的页表在物理内存中的地址,需要为页表再建立一个连续存放的外层页表,称之为页目录表(包括:页目录号,页号,页内偏移量)。
页目录号:实际上是一个索引值,根据页目录号找的页表所在的页框号。
页号:是页表中的偏移量。根据页号可以知道应该从页表的第几项中找到进程所在的页框号。
物理地址 = A 所在的页框号 * 页框大小+ 页内偏移地址 d。
寻址过程
1.对应给定的逻辑地址 A ,由硬件从中分离出页目录号 p1,页号 p2 和页内地址 d。
2.由页表寄存器的值和页目录号 p1,从存放页的页框中找到进程页所在的页框号,
页表所在页框号在内存中的地址=页目录起始地址 + p1 * 页表项长度,从该地址指示的物理内存单元中读取页表所在的页框号。
3.有页表所在页框号和页号 p2,从存放页表的页框中找到进程所在的页框号。
进程所在页框号在内存中的地址=页表起始地址+p2 * 页表项长度。
页表的起始地址=页表所在页框号 * 页框大小
4.A 的物理地址 = 进程所在的页框号*页框大小+页内地址 d。
多级页表结构
对于 64 为的机器,使用二级页表,仍让存在连续占用大量内存的问题,可以采用多级页表结构,将外层表在分若干页,然后为外层表建立连续存放的索引表。
基于分页的虚拟存储系统
虚拟存储器是指具有请求调入和置换功能,能从逻辑上对内存容量进行扩充的一种存储系统。在虚拟存储系统中,进程无需全部装入,只需要装入一部分即可运行。
虚拟存储技术的 3 点好处
1.提高内存的利用率。
2.提高多道程序度。
3.把逻辑地址空间和物理地址空间分开。
虚拟存储的重要特征
1.离散性
进程可以分散的存储在物理内存中。
2.多次性
不必要把进程一次性全部装入内存,先将当前进程所需要的部分代码和数据装入内存,其余部分等进程运行时再装入。
3.对换性
在内存中的进程可以换出,已腾出内存空间换入外存中的进程。
4.虚拟性
虚拟存储系统为用户提高了比实际物理内存大的逻辑内存空间,使程序员不必在编程时受物理内存的限制。
分页中的硬件支持
页表
包括:页框号,状态位,访问字段,修改位 M,保护位。
页框号:存放页所在的页框号。
状态位 P:用来标示页是否在内存中。
访问字段 A:用于记录页最近被访问的情况。
修改位置 M:用于标示页最近是否被修改过。
保护位:用于标示页的访问权限。
缺页异常机构
主要作用是在访问内存过程中发现缺页时产生缺页异常信号,使 CPU 中断当前控制流的执行,转去执行操作系统缺页异常处理程序,完成请求调页。
过程
1.分页硬件通过页表完成逻辑地址到物理地址的映射时,通过检测页表中的状态位 P,判断当前被访问的页是否在内存中,如果不存在,则产生缺页异常信号。
2.执行操作系统的缺页异常处理过程。先在内存中为请求调入的页找一个空闲页框。然后,调度磁盘操作,把需要的页装入到空闲的页框中。
3.修改页表,更新已调用的页的存在位,在内存中的页框号,访问位和保护位等信息。
4.重新开始执行因缺页而被中断的指令。
地址变换过程
1.由分页地址变换机构从逻辑地址分类出页号和页内偏移地址。
2.以页号为索引查找快表,若块表中有该页的页表项,则读出页框号,计算物理地址。
3.若块表中无该页信息,装到内存页表中查找,若页表中的状态位 P 显示该页以调入内存,则从响应的页表项中读出页所在的页框号,并计算物理地址,然后把该页表项写入块表。
4.若该页尚未调入内存,则产生缺页异常,并请求系统从外存把该页调用入内存,然后修改页表项,重新执行中断的指令。
欢迎大家的留言讨论。
评论