大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
一、请求分页式存储管理的基本思想
请求分页式存储管理是基于分页式存储管理的一种虚拟存储器
1. 相同点
a. 把内存空间划分成尺寸相同、位置固定的块
b. 按照内存块大小,把作业的虚拟地址空间(相对地址空间)划分成页(划分过程对用户透明)
c. 虚拟地址空间中的一页可以装入到内存中的任何一块中
2. 不同点
a. 作业全部进入辅存,运转时,并不把整个作业程序一起都装入到内存,只装入目前要用的若干页
b. 运行过程中,虚拟地址被转换成(页号,页内偏移)
c. 根据页号查页表,如果该页不在内存中,就没有具体的块号与之对应,表明“缺页”,运行无法继续,此时,要根据页号把它从辅存中调入内存
d. 所谓请求分页式,是指当程序运行中需要某一页时,再把它从辅存中调入内存使用
3. 其他
用户的虚拟地址空间可以很大,不受内存尺寸约束
二、页表表目的扩充
在请求分页式存储管理中:通过“缺页中断位”判断所需要的页是否在内存中
页的表项包括:页号、块号、缺页中断位、辅存地址、引用位、改变位
页号:虚拟地址空间中的页号
块号:该页所占内存的块号
缺页中断位:1 表示在内存中,0 表示不在内存中,为 0 时会发生“缺页”中断信号,请求系统处理
辅存地址:该页内容存放在辅存中的地址,缺页时,缺页中断处理根据它的指点,将所缺的页调入内存
引用位:在系统规定的时间间隔内,该页是否被引用过(在页面淘汰算法中使用)
改变位:0 表示页面在内存时数据未被修改,1 表示被修改过。当页面被选为淘汰对象时,根据此为的取之来确定是否要将该页的内容进行磁盘回写操作
三、缺页中断的处理
1. 处理过程
a. 根据当前执行指令中的虚拟地址,形成(页号,页内偏移),用页号查页表,判断该页是否在内存中
b. 如该页的缺页中断位为 0,表示该页面不在内存,于是产生缺页中断,让操作系统的中断处理程序进行中断处理
c. 中段处理程序查询存储分块表,寻找一个空闲的内存块;查询页表,得到该页在辅存中的地址,启动磁盘读信息
d. 把从磁盘上读出的信息装入到分配的内存块中
e. 根据分配存储快的信息,修改页表、存储分块表中相应表目的信息
f. 由于产生缺页中断的那条指令并未执行,所以在完成所需页面的装入工作后,应该返回原指令重新执行
2. 缺页中断与一般中断的区别
a. 缺页中断时在执行一条指令中间时产生的中断,并立即转去处理;一般中断则是在一条指令执行完毕之后,当发现有中断请求时再去响应和处理
b. 缺页中断处理执行完毕之后,仍返回到原指令处重新执行;一般终端则是返回到下一跳指令去执行
四、调页方式
主要分为:请调和预调两种,请调为主,预调为辅
1. 请调
发生缺页时,终端请求调入此页
2. 预调
作业最初被调入运行时,通常是预先将相应的第一页装入内存,而所需的其他各页,按照请求顺序装入
五、页面淘汰算法
页面走向:一个程序执行过程中页号的变化序列
页面淘汰问题:发生缺页时,需要从辅存上把所需要的页面调入内存,而当时内存中又没有空闲块,需要选择一个页面调出内存
抖动(颠簸):一个刚被淘汰出去的页面,不久又要访问,又把它从辅存调入内存,调入不久后又被淘汰……如此反复的调入调出,整个系统一直陷于页面的调入调出,大部分时间都用在处理缺页中断和页面淘汰中
抖动使得整个系统的效率低下,应极力避免
如果淘汰的页面在内存中修改过,必须把它写回到磁盘,以便更新该页在辅存上的副本
1. 先进先出页面淘汰算法(FIFO)
做法:淘汰最早进入内存的页面
FIFO 算法认为:随着时间的推移,在内存中待的时间最长的页面,被访问的可能性最小
实际中:有可能把经常要访问的页面淘汰出去
2. 最近最久未使用页面淘汰算法(Least Recently Used,LRU)
做法:淘汰最长时间未被访问的页面
这是一种基于局部性原理的淘汰算法
LRU 算法认为:如果一个页面刚被访问过,那么不久的将来被访问的可能性就大
3. 最近最少使用页面淘汰算法(Least Frequently Used,LFU)
做法:淘汰当前使用的最少的页面
着眼点在于页面的使用频率
LFU 算法认为:在一段时间内使用得最多的页面,将来用到的可能性就大
要实现 LFU 算法,应该为内存中每一个页面设置一个计数器,对某个页面每访问一次计数器加一,过一段时间,所有计数器清零
提示:LRU和LFU是不同的!
LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!
LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!
如果每分钟进行一次调页,主存块为3,若所需页面走向为2 1 2 1 2 3 4
注意,当调页面4时会发生缺页中断
若按LRU算法,应换页面1(1页面最久未被使用) 但按LFU算法应换页面3(整个时间内,页面3只使用了一次,而2使用3次,1使用2次)。
可见LRU关键是看页面最后一次被使用到发生调度的时间长短,
而LFU关键是看一定时间段内页面被使用的频率!
4. 最优页面淘汰算法(Optimd,OPT)
做法:把以后不再使用的或在最长时间内不会用到的页面淘汰出去
前提:已知作业运行时的页面走向
因为其苛刻的前提条件:没有实用价值,只能用来做一个标尺
5. FIFO 页面淘汰算法的异长现象
有若干因素会影响缺页中断的发生次数,例如:分配给作业的内存块数
一般情况:分配给作业的内存块数增多,发生缺页中断的可能性就下降
FIFO 的异常现象:对于 FIFO 算法,有时增加分配给作业的内存块数,它的缺页中断次数反而上升
FIFO 算法并不总是产生异长现象,它和页面走向有关
六、缺页中断率
1. 定义
假设一个作业运行的页面走向中涉及到的页面总数为 A,其中有 F 次缺页,必须通过缺页中断把他们调入内存
缺页中断率:f = F/A
2. 影响缺页中断次数的因素
a. 分配给作业的内存块数
b. 页面尺寸
c. 程序的实现
d. 页面淘汰算法
七、虚拟存储的性能问题
在虚拟存储中,页面在内存和外存之间频繁的调度以至于系统中页面所需的时间比进程实际运行的时间还多,在这种情况下,系统效率急剧下降,甚至可能出现全面崩溃
在颠簸时,伴随着磁盘的剧烈抖动,引起颠簸的原因是缺页过于频繁,CPU 忙于处理缺页
活跃页面:进程运行时,CPU 总是集中访问的一些页面
工作集:对于给定的访页序列,在其中选取定长区间,成为工作集的窗口,落在工作集窗口中的集合称为工作集,记为 WS(t)
工作集的大小取决于页的三个因素:访页序列特性、时刻 Ti、窗口长度
引入工作集的目的是:希望分配给进程的页面数与当前工作集的大小吻合
实现工作集存储管理的策略是很困难的
一般可用硬件装置统计当前工作集的大小,用软件根据工作集的大小调整对每个进程分配的物理块数
只有在具备足够内存的情况下,才能有效的实现多道程序设计
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189432.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...