4 存储管理
1 存储器工作原理
存储管理的功能:
- 分配和去配
- 抽象和映射
- 隔离和共享
- 存储扩充
存储器层次:寄存器、缓存、内存、磁盘、磁带
地址转换和存储保护:
- 编译程序负责记录引用发生的位置,编译或汇编的结果产生相应的多个目标代码模块,每个都附有供引用使用的内部符号表和外部符号表。符号表中依次给出每个符号名及在本目标代码模块中的名字地址,在模块被链接时进行转换
- 链接需要解析内部和外部符号表,把对符号名字引用转换为数值引用,要转换每个涉及名字地址的程序入口点和数据引用点成为数值地址
- 链接程序(linker)的作用是根据目标模块之间的调用和依赖关系,将主调模块、被调模块、以及所用到的库函数装配和链接成一个完整的可装载执行模块
- 装入时根据指定的内存块首地址,再次修改和调整被装载模块中的每个逻辑地址,将逻辑地址绑定到物理地址
- 根据程序链接发生的时刻和链接方式,可分成三种:
- 静态链接
- 动态链接
- 运行时链接
- 装载程序(loader)把可执行程序装入内存方式有三种:
- 绝对装载。装载模块中的指令地址始终与其内存中的地址相同,即在模块中出现的所有地址都是内存绝对地址
- 可重定位装载。根据内存当时使用情况,决定将装载代码模块放入内存的物理位置。模块内使用的地址都是相对地址
- 动态运行时装载。为提高内存利用率,装入内存的程序可换出到磁盘上,适当时候再换入到内存中,对换前后程序在内存中的位置可能不同,即允许进程的内存映像在不同时候处于不同位置,此时模块内使用的地址必为相对地址
- 可执行程序逻辑地址转换 (绑定)为物理地址的过程称地址重定位 、地址映射或地址转换,基于上述程序装载方式,可区分三种地址重定位
- 静态地址重定位
- 动态地址重定位
- 运行时链接地址重定位
- 存储保护:防止地址越界和控制正确存取
- 各道程序只能访问自己的内存区而不能互相干扰,必须对内存中的程序和数据进行保护,以免受到其他程序有意或无意的破坏。可对进程执行时所产生的所有内存访问地址进行检查,确保进程仅访问它自己的内存区,这就是地址越界保护,越界保护依赖于硬件设施,常用的有:界地址和存储键
- 进程访问分配给自己的内存区时,要对访问权限进行检查,如允许读、写、执行等,从而确保数据的安全性和完整性,防止有意或无意的误操作而破坏内存信息,这就是信息存取保护
2 连续存储管理
固定分区存储管理:
- 基本思想:内存空间被划分成数目固定不变的分区,各分区大小不等,每个分区只装入一个作业,若多个分区中都装有作业,则它们可以并发执行,这是支持多道程序设计最简单的存储管理技术
- 数据结构:
- 一张内存分配表:指出各分区起始地址和长度,占有标志用来指示此分区是否被使用
- 排队策略:
- 一是每个分区有单独的作业等待队列,调度程序选中作业后,创建用户进程并将其排入一个能装入它的最小分区等待队列尾部,当分区空闲时,装入队首进程执行
- 二是所有等待处理的作业排成一个等待队列,每当有分区空闲时,就从队首依次搜索分区长度所能容纳的作业以便装入执行
- 优点:解决单道程序运行在并发环境不能与CPU速度匹配的问题
- 缺点:
- 由于预先已规定分区大小,大作业无法装入,用户不得不采用覆盖技术加以补救,加重用户负担,极不方便
- 内存空间利用率不高,作业很少会填满分区
- 无法动态扩充运行中进程的内存空间
- 分区数目确定,限制多道程序的道数
可变分区存储管理:
- 按作业的实际大小来划分分区,且分区个数随机,实现多个作业对内存的共享,进一步提高内存资源利用率
- 内存分配表可由两张表组成:
- 已分配区表
- 未分配区表
- 分配算法:
- 最先适应:
- 下次适应:从为分配区的上次扫描结束处顺序查找
- 最优适应:扫描整个未分配分区,挑选最小分区进行分配
- 最坏适应:挑选最大的
- 快速适应:为经常用到的长度的空闲区设置独立的空闲区链表
- 地址转换与存储保护:
- 固定分区采用静态地址重定位,进程使用绝对地址,由加载程序进行地址越界检查
- 可变分区采用动态地址重定位,硬件设置两个专用控制寄存器:基址寄存器和限长寄存器(进程占有的连续空间的长度)
- 内存不足的存储管理技术:
- 移动技术
- 对换技术:将阻塞的进程暂时移除内存,腾出空间
- 把时间片耗尽或优先级较低的进程换出,因为短时间内它们不会被投入运行
- 数据区和堆栈是进程运行时创建和修改的,可通过文件系统把这些可变信息作为特殊文件移出
- 批处理系统中,当有进程要求动态扩充内存且得不到满足时可触发对换;分时系统中,对换可与调度结合在一起,每个时间片结束或执行I/O操作时实施
- 覆盖技术:程序运行过程中程序的不同模块在内存中相互替代,以达到最小内存执行最大程序的目的
- 实现技术:把用户空间分成固定区和一个或多个覆盖区,把控制或不可覆盖部分放在固定区,其余按调用结构及先后关系分段并保存在磁盘上,运行时依次调入覆盖区
产生碎片,移动开销大
3 分页存储管理
优点:允许将程序存放在不相邻的空闲块中,即可免除移动信息工作,又可充分利用内存空间,消除动态分区中的碎片问题,提供内存利用率
基本原理:
- 页面:进程逻辑地址划分为大小相等的区,每个区称为页面或页
- 页框:把内存物理空间划分为大小相等的区,大小与与页面大小相等
- 逻辑地址:页号+页内位移
- 内存页框表:长度取决于内存划分的物理块数
- 页表:操作系统为进程建立的,是程序页面与内存页框的对照表
- 页表基址寄存器:存放页表起始地址,整个系统只有一个
快表
- 在硬件中设置相联寄存器,提供运算速度
- 相联寄存器:存放进程最近访问的部分页表项,也称翻译快表
分配和去配:
- 位示图:a、b
- 链表方法:c
- 分配算法:
- 进行内存分配时,先查找空闲块能不能满足用户进程的需求,若不能则令进程等待;若能则查找位示图,找出0的那些位,占用标志,从空闲块中减去本次占用块数,按所找到的位的位置计算对应页框号,填入此进程的页表。进程执行结束归还内存,根据页框号计算出对应位在位示图的位置,将占有标志清零,并将归还快熟加入空闲块数中
页面共享和保护:
- 程序共享--由于指令包含指向其他指令或数据的地址,进程依赖于这些地址才能执行,不同进程中正确执行共享代码页面,必须为它们在所有逻辑地址空间中指定同样页号
- 实现信息共享必须解决共享信息保护问题。通常的做法是在页表中增加标志位,指出此页的信息只读/读写/只可执行/不可访问等,进程访问此页时核对访问模式。例如,欲向只读块写入信息则指令停止执行,产生违例异常信号
多级页表:
- 系统为每个进程建一张页目录表,它的每个表项对应一个页表页,而页表页的每个表项给出了页面和页框的对应关系,页目录表是一级页表,页表页是二级页表
- 逻辑地址结构有三部分组成:页目录、页表页和位移
- 解决页表页占用内存空间的问题:
- 进程运行涉及页面的页表页应放在内存,其他页表页使用时再调入,
- 在页目录表中增加特征位,指示对应的页表页是否已调入内存,
- 地址转换机构根据逻辑地址中的dir,去查页目录表对应表项,如未调入,应产生一个”缺页表页”中断信号,请求操作系统将页表页调入内存
- 多级页表结果本质:
- 多级不连续,导致多级索引
- 以二级页表为例,用户程序的页面不连续存放,要有页面地址索引,该索引是进程页表;进程页表又是不连续存放的多个页表页,故页表页也要页表页地址索引,该索引就是页目录
- 页目录项是页表页的索引,而页表页项是进程程序的页面索引
反置页表:
- 为内存中的每一个物理块建立一个页表并按照块号排序
- 该表每个表项包含正在访问该页框的进程标识、页号及特征位,用来完成内存页框到访问进程的页号、即物理地址到逻辑地址的转换
- 逻辑地址给出进程标识和页号,用它们去比较IPT,若整个反置页表中未能找到匹配的页表项,说明该页不在内存,产生请页中断,请求操作系统调入;否则,该表项的序号便是页框号,块号加上位移,便形成物理地址
4 分段存储
主要目的:满足用户编程和使用上的要求
基于可变分区存储管理原理
基本原理:
- 两维逻辑地址:段号+段内地址
管理共享和保护:
- 多对基址/限长寄存器
- 段的共享,是通过不同作业段表中的项指向同一个段基址来实现
- 几道作业共享的例行程序就可放在一个段中,只要让各道作业的共享部分有相同的基址/限长值
- 对共享段的信息必须进行保护,保护位用来对共享段实施保护,如禁写、禁修改等
分段和分页的比较:
- 分段是信息的逻辑单位,由源程序的逻辑结构所决定,用户可见,
- 段长可根据用户需要来规定,段起始地址可从任何内存地址开始。
- 分段方式中,源程序(段号,段内位移)经连结装配后地址仍保持二维结构。
分段和分页的比较:
- 分页是信息的物理单位,与源程序的逻辑结构无关,用户不可见,
- 页长由系统确定,页面只能以页大小的整倍数地址开始。
- 分页方式中,源程序(页号,页内位移)经连结装配后地址变成了一维结构
5 虚拟存储管理
定义:在具有层次结构存储器的计算机系统中,采用自动实现部分装入和部分对换功能,为用户提供一个比物理内存容量大得多的,可寻址的一种“内存储器”
程序局部性原理:指程序在执行过程中的一个较短时间内,所执行的指令地址或操作数地址分别局限于一定的存储区域中。又可细分时间局部性和空间局部性
- 第一,程序中只有少量分支和过程调用,大都是顺序执行的指令;
- 第二,程序含有若干循环结构,由少量代码组成,而被多次执行;
- 第三,过程调用的深度限制在小范围内,因而,指令引用通常被局限在少量过程中;
- 第四,涉及数组、记录之类的数据结构,对它们的连续引用是对位置相邻的数据项的操作;
- 第五,程序中有些部分彼此互斥,不是每次运行时都用到
实现虚拟存储器必须解决的问题:
-
内存外存统一管理问题、
-
逻辑地址到物理地址的转换问题、
-
部分装入和部分对换问题
实现技术:
- 请求分页虚拟存储管理
- 请求段页式虚拟存储管理
请求分页虚拟存储管理:
硬件支撑:内存管理单元MMU完成逻辑地址到物理地址的转换功能,它接受逻辑地址作为输入,物理地址作为输出,直接送到总线上,对内存单元进行寻址主要功能:
-
-
(1)管理硬件页表基址寄存器。
(2)分解逻辑地址。
(3)管理快表TLB。
(4)访问页表。
(5)发出缺页中断或越界中断,并将控制权交给内核存储管理处理。
(6)设置和检查页表中各个特征位。
-
缺页中断处理过程:
- 步1 挂起请求缺页的进程;
- 步2 根据页号查外页表,找到该页存放的磁盘物理地址;
- 步3 查看内存是否有空闲页框,如有则找出一个,修改内存管理表和相应页表项内容,转步6;,
- 步4 如内存中无空闲页框,按替换算法选择淘汰页面,检查它曾被写过或修改过吗?若未则转步6;若是则转步5;
- 步5 该淘汰页面被写过或修改过,则把它的内容写回磁盘原先位置;
- 步6 进行调页,把页面装入内存所分配的页框中,同时修改进程页表项;
- 步7 返回进程断点,重新启动被中断的指令。
请求分页虚存管理基本原理:
- 分页式虚存不把作业信息(程序和数据)全部装入内存,仅装入立即使用的页面,在执行过程中访问到不在内存的页面时,产生缺页中断,再从磁盘动态地装入
- 扩充页表的内容,增加驻留标志位等信息,来发现页面是否在内存中。
- 外页表:页面与磁盘物理地址的对应表,由操作系统管理,进程启动运行前系统为其建立外页表,并把进程程序页面装入外存。该表按进程页号的顺序排列,为节省内存,外页表可存放在磁盘中,当发生缺页中断需要查用时才被调入
- 请求分页虚存地址转换过程:
- 请求分页虚存系统优缺点:
- 优点:作业的程序和数据可按页分散存放在内存中,减少移动开销,有效解决了碎片问题;既有利于改进内存利用率,又有利于多道程序运行
- 缺点:要有硬件支持,要进行缺页中断处理,机器成本增加,系统开销加大
- 页面装入内存策略:
- 请页式调度
- 预调式调度
- 页面清除策略:
- 请页式清除
- 预清除
页面分配策略:
- 分配内存时需要考虑的因素:
①分给进程的空间越小,同一时间处于内存的进程就越多,至少有一个进程处于就绪态的可能性就越大
②如果进程只有小部分在内存里,即使局部性很好,缺页中断率还会相当
③因程序的局部性原理,分给进程的内存超过一定限度后,再增加内存空间,不会明显降低进程的缺页中断率。
- 固定分配:
- 进程保持页框数固定不变,称固定分配
- 进程创建时,根据进程类型和程序员的要求决定页框数,只要有一个缺页中断产生,进程就会有一页被替换
- 可变分配:
- 进程分得的页框数可变, 称可变分配
- 进程执行的某阶段缺页率较高,说明目前局部性较差,系统可多分些页框以降低缺页率,反之说明进程目前的局部性较好,可减少分给进程的页框数
页面替换策略:
- 全局替换:如果页面替换算法的作用范围是整个系统,称全局页面替换算法,它可以在运行进程间动态地分配页框。
- 局部替换:如果页面替换算法的作用范围局限于本进程,称为局部页面替换算法,它实际上需要为每个进程分配固定的页框
固定分配与局部替换配合使用:
- 进程分得的页框数不变,发生缺页中断,只能从进程的页面中选页替换,保证进程的页框总数不变
- 系统把页框分配给进程:
- 平均分配
- 按比例分配
- 优先权分配
可变分配和全局替换配合使用:
- 先每个进程分配一定数目页框,os保留若干空闲页框,进程发生缺页中断时,从系统空闲页框中选一个给进程,这样产生缺页中断进程的内存空间会逐渐增大,有助于减少系统的缺页中断次数
- 系统拥有的空闲页框耗尽时 ,会从内存中选择一页淘汰,该页可以是内存中任一进程的页面,这样又会使那个进程的页框数减少,缺页中断率上升
可变分配和局部替换配合使用:
- 实现要点:
-
(1)新进程装入内存时,根据应用类型、程序要求,分配给一定数目页框,可用请页式或预调式完成这个分配。
(2)产生缺页中断时,从该进程驻留集中选一个页面替换。
(3)不时重新评价进程的分配,增加或减少分配给进程的页框以改善系统性能
-
缺页中断率:
- 影响缺页中断率的因素:
- 内存页框数
- 页面大小
- 页面替换算法
- 程序特性
- 全局页面替换算法
-
1) 最佳页面替换算法OPT
- 调入一页而必须淘汰一个旧页时,所淘汰的页应该是以后不再访问的页或距现在最长时间后再访问的页
-
2) 先进先出页面替换算法FIFO
- 算法淘汰最先调入内存的页,或者说在内存中驻留时间最长的页
- FIFO算法增加可用物理页框数量会导致更多的缺页异常
- 页面缓冲算法:
- •维护两个FIFO队列,修改页面队列和非修改(空闲)页面队列,前者是由修改页面的页框构成的链表;后者是由可直接用于装入页面的页框构成的链表,未修改的淘汰页暂时还留在其中,当进程再次访问这些页面时,可不经I/O而快速回。
- 按FIFO选出淘汰页,并不立即抛弃它,根据它的内容是否被修改过进入两个队列之一的末尾,需要装入的页面被读进非修改队列的队首指向的页框中,不必等待淘汰页写回,使得进程能快速恢复运行
-
3) 最近最少用页面替换算法LRU
- 算法淘汰的页面是在最近一段时间里较久未被访问的那页
- 根据程序局部性原理,那些刚被使用过的页面,可能马上还要被使用,而在较长时间里未被使用的页面,可能不会马上使用到
- 算法实现:
- 页面淘汰队列:
- 队列中存放当前在内存中的页号,每当访问一页时就调整一次,使队列尾总指向最近访问的页,队列头就是最近最少用的页。
- 发生缺页中断时总淘汰队列头所指示的页;执行一次页面访问后,需要从队列中把该页调整到队列尾
- 引用位法最近未使用页面替换算法(Not Recently Used replacement,NRU) :
- 每页设置一个引用位R,访问某页时,由硬件将页标志位R置1,隔一定时间t将所有页的标志R均清0。
- 发生缺页中断时,从标志位R为0的页中挑选一页淘汰。挑选到要淘汰的页后,也将所有页的标志位R清0
- 计数法:
- 每个页面设置一个多位计数器,又叫最不常用页面替换算法LFU。每当访问一页时,就使它对应的计数器加1。
- 当发生缺页中断时,可选择计数值最小的对应页面淘汰,并将所有计数器全部清0
- 计时法:
- 为每个页面设置一个多位计时器,每当页面被访问时,系统的绝对时间记入计时器。
- 比较各页面的计时器的值,选最小值的未使用的页面淘汰,因为,它是最“老”的未使用的页面
- 老化算法:
- 为每个页设置一个多位寄存器r。当页面被访问时,对应寄存器的最左边位置1;每隔时间t,将r寄存器右移一位;在发生缺页中断时,找最小数值的r寄存器对应的页面淘汰
- 页面淘汰队列:
-
4) 第二次机会页面替换算法SCR
-
改进FIFO算法,把FIFO与页表中的”引用位”结合起来使用:
-
检查FIFO中的队首页面(最早进入内存页面),如果它的”引用位”是0,这个页面既老又没有用,选择该页面淘汰;
-
如果”引用位”是1,说明它进入内存较早,但最近仍在使用。把它的”引用位”清0,并把这个页面移到队尾,把它看作是一个新调入的页。
-
算法含义:最先进入内存的页面,如果最近还在被使用的话,仍然有机会作为像一个新调入页面一样留在内存中
-
-
-
5) 时钟页面替换算法Clock
- 实现要点:
-
一个页面首次装入内存,其“引用位”置1 。
-
内存中的任何页面被访问时, ”引用位”置1。
-
淘汰页面时,从指针当前指向的页面开始扫描循环队列,把迁到的”引用位”是1的页面的”引用位”清0,跳过这个页面; 把所迁到的”引用位”是0的页面淘汰掉,指针推进一步。
-
扫描循环队列时,如果迁到的所有页面的”引用位”为1,指针就会绕整个循环队列一圈,把碰到的所有页面的”引用位”清0;指针停在起始位置,并淘汰掉这一页,然后,指针推进一步
-
- 改进算法:
- 把”引用位”和”修改位”结合起来使用,共组合成四种情况:
-
(1)最近没有被引用,没有被修改(r=0,m=0)
(2)最近被引用,没有被修改(r=1,m=0)
(3)最近没有被引用,但被修改(r=0,m=1)
(4)最近被引用过,也被修改过(r=1,m=1)
-
- 步1:选择最佳淘汰页面,从指针当前位置开始,扫描循环队列。扫描过程中不改变”引用位”,把迂到的第一个r=0,m=0的页面作为淘汰页面。
- 步2:如果步1失败,再次从原位置开始,查找r=0且m=1的页面,把把迂到的第一个这样的页面作为淘汰页面,而在扫描过程中把指针所扫过的页面的”引用位”r置0
- 步3:如果步2失败,指针再次回到了起始位置,由于此时所有页面的”引用位”r均己为0,再转向步1操作,必要时再做步2操作,这次一定可以挑出一个可淘汰的页面
- 把”引用位”和”修改位”结合起来使用,共组合成四种情况:
- 实现要点:
-
计算缺页中断次数和被淘汰页面:
- 假设采用固定分配策略,进程分得三个页框,执行中按下列次序引用5个独立的页面: 2 3 2 1 5 2 4 5 3 2 5 2。
局部页面替换算法
-
1) 局部最佳页面替换算法
- 实现思想:进程在时刻t访问某页面,如果该页面不在内存中,导致一次缺页,把该页面装入一个空闲页框。
- 不论发生缺页与否,算法在每一步要考虑引用串,如果该页面在时间间隔(t,t+τ)内未被再次引用,那么就移出;否则,该页被保留在进程驻留集中。
- τ为一个系统常量,间隔(t,t+τ)称作滑动窗口
- 实现思想:进程在时刻t访问某页面,如果该页面不在内存中,导致一次缺页,把该页面装入一个空闲页框。
- 不论发生缺页与否,算法在每一步要考虑引用串,如果该页面在时间间隔(t,t+τ)内未被再次引用,那么就移出;否则,该页被保留在进程驻留集中。 τ为一个系统常量,间隔(t,t+τ)称作滑动窗口
-
2) 工作集模型和工作集置换算法
- 进程工作集指“在某一段时间间隔内进程运行所需访问的页面集合”
- 指“在某一段时间间隔内进程运行所需访问的页面集合”,W(t,Δ)表示在时刻t-Δ到时刻t之间( (t-Δ,t))所访问的页面集合,进程在时刻t的工作集。
- Δ是系统定义的一个常量。变量Δ称为“工作集窗口尺寸”,可通过窗口来观察进程行为,还把工作集中所包含的页面数目称为“工作集尺寸”
- 实现思想:工作集模型用来对局部最佳页面替换算法进行模拟实现,不向前查看页面引用串,而是基于程序局部性原理向后看。
- 任何给定时刻,进程不久的将来所需内存页框数,可通过考查其过去最近的时间内的内存需求做出估计
- 通过工作集确定驻留集大小
- (1)监视每个进程的工作集,只有属于工作集的页面才能留在内存;
- (2)定期地从进程驻留集中删去那些不在工作集中的页面;
- (3)仅当一个进程的工作集在内存时,进程才能执行。
- 进程工作集指“在某一段时间间隔内进程运行所需访问的页面集合”
-
3) 模拟工作集替换算法
- 时间戳算法:
-
为页面设置引用位及关联时间戳,通过超时中断,至少每隔若干条指令周期性地检查引用位及时间戳:
- 当引用位为1时,就把它置0,并把这次改变的时间作为时间戳记录下来。
- 当引用位为0时,系统当前时间减去时间戳时间,计算出从它上次使用以来未被再次访问的时间量,记入t_off
- t_off值随着每次超时中断的处理而不断增加,除非页面在此期间被再次引用,导致其使用位为1;
- 把t_off与系统时间参数t_max相比,若t_off>t_max,就把页面从工作集中移出,释放相应页框
-
- 时间戳算法:
-
4) 缺页频率替换算法
- 根据连续的缺页之间的时间间隔来对缺页频率进行测量,每次缺页时,利用测量时间调整进程工作集尺寸
- 规则:如果本次缺页与前次缺页之间的时间超过临界值τ,那么,所有在这个时间间隔内没有引用的页面都被移出工作集
请求分页虚存管理的几个设计问题:
- 页面大小
- 从页表大小考虑
- 从内存利用率考虑
- 从读写一个页面所需的时间考虑
- 最佳页面尺寸
- 页面长度是由CPU中的MMU规定的,操作系统通过特定寄存器的指示位来指定当前选用的页面长度
页面交换区:
- 替换算法要挑选页面淘汰出内存,但被淘汰出去的页面可能很快使用,又要被重新装入内存。操作系统必须保存被淘汰的页面,
- 需要建立和维护交换区映射表,记录所有被换出的页面在交换区中的位置。如果页面要被换出内存,仅当其内容与保存在交换区的副本不同时才进行复制。交换区最常用的数据结构是进程页面号与盘块号的对照表,称磁盘外页表
写时复制:
- 是存储管理节省物理内存(页框)的一种页面级优化技术,已被Linux等采用,能减少内存页面内容的复制操作,减少相同内容页面在内存的副本数目
请求段页式虚存管理
- 段式存储是基于用户程序结构的存储管理技术,有利于模块化程序设计,便于段的扩充、动态链接、共享和保护,但会生成段内碎片浪费存储空间
- 页式存储是基于系统存储器结构的存储管理技术, 存储利用率高,便于系统管理,但不易实现存储共享、保护和动态扩充
- 基本原理:
-
1、虚地址以程序的逻辑结构划分成段(段页式存储管理的段式特征)
2、实地址划分成位置固定、大小相等的页框(段页式存储管理的页式特征)
3、将每一段的线性地址空间划分成与页框大小相等的页面,于是形成了段页式存储管理特征。
4、逻辑地址形式为:
-
- 数据结构:
- 作业表:登记进入系统中的所有作业及该作业段表的起始地址,
- 段表:包含这个段是否在内存,以及该段页表的起始地址等,
- 页表:包含该页是否在内存(中断位)、对应内存块号
- 请求段页式虚存管理动态地址转换
- 从逻辑地址出发,先以段号s和页号p作索引去查快表,如果找到,那么立即获得页p的页框号p’,并与位移d一起拼装得到访问内存的实地址,从而完成了地址转换
- 若查快表失败,就要通过段表和页表作地址转换了,用段号s作索引,找到相应表目,由此得到s段的页表起址s’,再以p作索引得到s段p页对应的表目,得到页框号p’;这时一方面把s段p页和页框号p’置换进快表,另一方面用p’和d生成内存实地址,从而完成地址转换
- 如查段表时,发现s段不在内存,产生“缺段中断”,引起系统查找s段在外存的位置,将该段页表调入内存;
- 如查页表时,发现s段的p页不在内存,产生“缺页中断”,引起系统查找s段p页在外存的位置,并将该页调入内存,当内存已无空闲页框时,就会导致淘汰页面