虚拟存储管理_虚拟存储管理的基本条件

虚拟存储管理_虚拟存储管理的基本条件必要性:前面的各种存储管理方式必须一次性全部装入内存才可以运行,直至作业运行结束才能释放全部内存资源,所以存在:(1)内存不满足作业地址空间要求时就不能运行(2)大量作业要求运行时只有少数作业装入内存运行,其他作业留在辅存等待程序执行呈现局部性特征,程序的执行局限于某个部分局限性⎧⎩⎨时间局限性{某条指令被执行,不久之后指令可能再次执行某条数据被访问,不久之后数据可能再次空间局限性…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

必要性:前面的各种存储管理方式必须一次性全部装入内存才可以运行,直至作业运行结束才能释放全部内存资源,所以存在:
(1)内存不满足作业地址空间要求时就不能运行
(2)大量作业要求运行时只有少数作业装入内存运行,其他作业留在辅存等待

程序执行呈现局部性特征,程序的执行局限于某个部分

{
访
访
局 限 性 { 时 间 局 限 性 { 某 条 指 令 被 执 行 , 不 久 之 后 指 令 可 能 再 次 执 行 某 条 数 据 被 访 问 , 不 久 之 后 数 据 可 能 再 次 空 间 局 限 性 : 程 序 一 段 时 间 内 访 问 的 地 址 可 能 集 中 在 一 定 范 围

根据局部性原理可以把作业信息保存在磁盘上,当作业请求装入时,将当前运行所需要的一部分信息装入主存,作业执行过程时,如果需要的信息调入主存则继续执行;如果此时内存已满,无法将需要的信息加入,则将内存中暂时不用的信息置换到磁盘,腾出空间使需要的信息调入内存使程序继续执行。

虚拟存储器/虚拟内存
虚拟存储器的容量由计算机的地址结构辅助存储器的容量决定。建立在离散分配的存储管理方式的基础上,它允许将一个作业分多次调入内存。

四大特征
离散性(基础)
按照页或段进行离散化放置(物理空间可以不连续),以段或者页为单位进行换出换入
分段或分页内存管理方式是虚拟存储器产生的基础
多次性(最重要特征)
一个作业被分成多次调入内存运行,只需要将当前运行的那部分程序或数据装入内存即可
对换性/对唤性
允许作业的运行过程中进行换进和换出,【交换分区:在作业对应的进程运行期间,允许将那些暂时不使用的程序和数据,从内存换出至外存的对换区】,可以有效提高内存的利用率
虚拟性(最重要特征)
逻辑上扩充内存容量,是以多次性和对换性为基础。
多次性和对换性又必须建立在离散分配的基础上

虚拟内存存储管理

请求分页式存储管理

{
虚 拟 分 页 式 存 储 管 理 ( 调 入 方 式 不 同 ) { 请 求 分 页 式 管 理 预 调 入 页 式 管 理

请求分页式管理
主要功能:当需要执行某条指令而发现它不在内存时或当某条指令需要访问其他的数据或指令时,这些指令和数据不在内存,从而发生缺页中断,于是系统将外存中相应的页面调入内存
优点:按需访问,只有被访问的页面的才会进入内存,节省了内存空间
缺点:处理缺页中断次数过多和调页的系统开销较大,由于每次仅调入一页,增加了磁盘I/O次数
预调入页式管理
根据某种算法动态预测进程最可能访问哪些页面,在使用前预先调入内存,尽量做到进程在访问页面之前已经预先调入该页,而且每次可以调入多个页面,以减小磁盘的I/O次数
缺点:若预先调入的页面在实际情况下较少得到访问,则效率较低

Δ Δ 请求分页式存储管理是在页式存储管理的基础上,增加了请求分页功能和页面置换功能实现的虚拟存储系统
Δ Δ 主要思想:请求分页式存储管理允许作业只装入部分页面就可以启动运行。
在执行过程中,如果所要访问的页已调入内存,则进行地址转换,得到欲访问的内存物理地址,如果不在内存中,则产生一个“缺页中断”;
如果此时内存能容纳新页,则启动磁盘I/O将其调入内存,如果内存已满,则通过页面置换功能将当前所需的页面调入。

需 要 的 支 持 { 请 求 分 页 的 页 表 机 制 缺 页 中 断 机 构 地 址 变 换 机 构 页 面 置 换 算 法

1.请求分页的页表机制
页表格式

物理块号:指出该页在主存中的占用块(1表示访问)
状态位:指出该页是否已经调入主存(1表示调入)
访问字段:记录该页一段时间内被访问的次数或多久未被访问
修改位:表示该页调入主存后是否被修改
辅存地址:该页在磁盘上的地址

由于作业在磁盘上保留一份备份,若此次调入主存中后未被修改置换该页时不需要再将该页写回磁盘,减少系统开销;如果该页被修改,必须将该页写回磁盘上,保证信息的更新和完整。

2.缺页中断机构
缺页中断处理流程
缺页中断与一般中断的区别:
(1)一般中断是在指令结束后接受中断请求并响应;缺页中断是在指令执行期间所要访问的指令或数据不在内存时产生和处理的
(2)一条指令在执行期间可能产生多次缺页中断

3.地址变换机构
地址变换过程

查快表 找到:状态位为1则地址转换,状态位为0则缺页中断 调入主存,填上块号,修改状态位、修改位,形成物理地址:::::快表中找不到:主存中查找页表,若未调入主存则调入主存写入快表

4.页面置换策略

(1)

页 面 置 换 策 略 { 固 定 分 配 局 部 置 换 策 略 可 变 分 配 局 部 置 换 策 略 可 变 分 配 全 局 置 换 策 略

1.固定分配局部置换
固定分配:为每一个进程分配一定数目的主存物理块,在整个运行期间不在改变

{ 平 均 分 配 算 法 ( 物 理 块 平 均 分 配 给 每 一 个 进 程 ) 按 比 例 分 配 算 法 ( 按 进 程 大 小 按 比 例 分 配 ) 考 虑 优 先 权 的 分 配 算 法 ( 一 部 分 按 比 例 分 配 , 一 部 分 根 据 进 程 的 优 先 权 分 配 )



缺点:难以为进程分配准确的内存数量。若太少,会频繁出现缺页中断,影响进程性能;若太多,会使内存驻留的进程数据减少,造成内存利用率下降


2.可变分配局部置换

主要思想:先分配一定数目的内存物理块,运行过程中频繁缺页中断就分配若干附加的物理块,缺页中断次数过少则缩小为该进程分配的物理块,控制缺页中断次数在一个合理的范围


3.可变分配全局置换

主要思想:为每一进程分配一定数目的物理块,保持一个空闲块队列,发生缺页中断则从该队列中取出一块,用完该队列中的物理块采用内存中选择页面进行置换(可能是系统中任一进程的页)

5.页面置换算法
抖动现象(颠簸):调入调出反复,使得调度非常频繁,以至于大部分时间都花费在来回调度上

(1)OPT最佳置换算法(理想化,无法实现)
Δ Δ 主要思想:淘汰的页面是以后永远不再使用或者是将来最长时间内不再被访问的页面

最少次缺页中断次数
最佳置换算法置换图
20次总访存次数,9次缺页中断,缺页中断率45%
置换掉那个下一次访问时间最久的页面
开始7,0,1装入主存三次缺页中断;(701)
到2时将7出去,因为需要7的在最后面调入2(201)
到0的时候不需要缺页中断(201)
到3时将1出去,因为需要1的排在20后面(203)

(2)FIFO先进先出置换算法
Δ Δ 主要思想:先淘汰最近进入内存的页面(认为刚被调入的页面在最近的将来被访问的可能很大),淘汰在内存中驻留时间最长的页面

先进先出置换算法置换图
20次总访存次数,15次缺页中断,缺页中断率75%
置换掉最先进入的那个页面

Belady现象:在未给作业分配足够要求的页面数时,分配的物理块数增多,缺页中断次数反而增加
产生原因:没有考虑程序执行的动态特征

Belady现象
M=3时,缺页中断次数为9;
M=4时,缺页中断次数为10
具有Belady现象的例子

(3)LRU最近最少用置换算法(基于局部性原理)
Δ Δ 主要思想:将最近一段时间内最长时间没有被访问过的页面调出,认为刚被访问的页面最近的将来还会经常访问他们;
在页表增加一个引用位,在每次被访问后将引用位‘置零’,重新计时;
在发生缺页中断需要调入新的页面时,通过检查页表中各页的引用位,选择计时最长时间没有被访问过的页面淘汰,并且把内存中所有页面的引用位全部清零,重新计时

最近最少用置换算法
20次总访存次数,12次缺页中断,缺页中断率60%
置换掉那个最长时间没被访问的页面

(4)CLOCK时钟置换算法(LRU近似算法)
Δ Δ 主要思想:
当该页被访问时,由硬件将它的引用位信息置为1;
操作系统选择一个时间周期T,每隔一个周期T,将页表中所有页面的引用位信息置 0;
这样,在时间周期T内,被访问过的页面的引用位为 1,而没有被访问过的页面的引用位仍为0;
当产生缺页中断时,可以从引用位为0的页面中选择一页调出,同时将所有页面的引用位信息全部重置0

Δ Δ 关键:
周期T的确定:T 太大,可能所有的引用位都变成1,找不出最近最少使用的页面淘汰;T太小,引用位为0的页面可能很多,而无法保证所选择的页面是最近最少使用的

淘汰一个页面时,如果该页面已被修改过,必须将它重新写回磁盘;但如果淘汰的是未被修改过的页面,就不需要写盘操作了,这样看来淘汰修改过的页面比淘汰未被修改过的页面开销要大
(1)最近没有被引用,没有被修改(r=0,m=0)
(2)最近被引用,没有被修改(r=1,m=0)
(3)最近没有被引用,但被修改(r=0,m=1)
(4)最近被引用过,也被修改过(r=1,m=1)

(5)LFU最近最不常用置换算法
Δ Δ 主要思想:
选择被访问次数最少的页面调出,即认为在过去的一段时间里被访问次数多的页面可能经常需要访问
Δ Δ 关键:
周期T的确定:为每一页设置一个计数器,页面每次被访问后其对应的计数器加1,每隔一定的时间周期T,将所有计数器全部清零

6.缺页中断率分析
缺页中断处理需要系统的额外开销,影响系统效率,因此应尽可能减少缺页中断的次数,降低缺页中断率



=FAFA访 缺 页 中 断 率 = F A ( F 次 缺 页 中 断 , A 次 访 问 页 面 )



(1)缺页中断率与缺页中断次数有关

$$

影响缺页中断率的因素

\begin{cases}

分配给作业的主存块数\给

页面大小\
程序编制方法\
页面调度算法
\end{cases}$$

分配给作业的主存块数
CPU利用率与进程数关系
CPU利用率与进程数关系
随着主存中进程数的增加,频繁的页面换入换出,磁盘I/O占据了主要时间,拉低了CPU利用率



程 序 的 工 作 集



程序的工作集:给定的访问序列,选取定长的时间间隔

Δ Δ
,落在工作集窗口中的页面集合,也就是某段时间间隔内进程实际要访问的页面的集合


内存容量和缺页中断次数之间的关系

工作集过大:降低缺页中断率不明显,浪费内存

工作集过小:频繁缺页,降低系统效率

程序运行时,对页面的访问是不均匀的,即在某段时间内访问仅限于较少的若干页面

OPT页面算法:预知程序在某段时间间隔内要访问哪些页面预先调入内存,减少置换发生的次数,提高cpu的利用率


工作集窗口尺寸越大,工作集越大,缺页中断的频率越低

1.虚拟存储管理程序为每一个进程分配固定数量的物理块,并且这个数目可以进行动态的调整。这个数目就是由每个进程的工作集来确定,并且根据主存的负荷和进程的缺页情况动态地调整其工作集

2.做法:创建一个最小工作集


该工作集保证进程运行在主存中应有的最小页面数


主存负荷不大可能增大工作集


空闲页不多就使用”自动调整工作集“(检查主存中的每一个进程,与最小工作集进行比较,,大于最小值就从工作集中移去一些页面作为主存自由页面为其他进程使用,主存自由页面太小不断检查直到每个进程的工作集都达到最小值为止)

3.每个工作集都已达到最小值时,虚拟内存管理程序跟踪进程的缺页数量,根据主存中自由页面数量可以适当增加其工作集的大小

页面大小
页面大小会影响页表的长度,检索时间,置换页面的时间,页内零头的大小等,对缺页中断的次数有一定的影响
页面太大:页面数少,查表速度快,缺页中断次数在系统分配相同主存块下减少,降低了缺页中断率,但是换页时间延长,可能产生的页内零头(内存碎片)所带来的空间浪费较大
页面太小:换页时间短,页内零头少提高了空间利用率,但在系统分配相同的内存卡情况下,发生缺页中断次数增多,增加了缺页中断率

程序编写方法
一般希望编制的程序能集中在几个页面上进行访问,减少缺页中断次数,降低缺页中断率

页面调度算法
理想的调度算法是当要装入一个新页而必须调出一个页面时,所选择的调出页应该是以后再也不使用的页或者是距离当前最长时间以后才使用的页(OPT),能使缺页中断率最低,如果选择不当则有可能产生抖动现象。

请求分段式存储管理

Δ Δ 与分段式区别:与请求分页式原理一样,是以段式存储管理为基础为用户提供比主存实际容量更大的虚拟空间

Δ Δ 主要思想:请求分段式存储管理允许作业当前需要的一段或几段装入主存便可启动执行,如果要访问的段在主存就把逻辑地址转换为绝对地址;如果不在主存就产生“缺段中断”,将欲访问的段调入。

需 要 的 支 持 { 请 求 分 段 的 段 表 机 制 缺 段 中 断 机 构 地 址 变 换 机 构 等

1.段表机制
段表机制

存取方式:只执行或只读或读/写
访问字段A:记录该段被访问的频繁程序
修改位M:该段进入主存后是否已被修改
状态位P:是否在内存
扩充位:请求分段式特有,表示本段在运行过程中是否有动态增长
段基址:该段在内存中的起始地址
辅存地址:本段在辅存中的起始地址

2.缺段中断机构
缺页中断步骤:
(1)空间分配:查主存分配表,找一个足够大的区域容纳该分段,找不到就检查该空闲区总和,能满足就采用移动技术,不符合就调出主存中的一段或几段,再将要访问的段调入主存
(2)修改段表
(3)装入段后就让作业重新执行被中断的指令,在主存中找到所要访问的段,继续执行下去
3.地址变换机构

请求分段式存储管理地址变换过程

请求段页式存储管理

Δ Δ 每个作业仍然按逻辑分段,把每一段再分成若干页面,这样,在请求式存储管理中,每一段不必占用连续的存储空间,可按页存放在不连续的主存块中,甚至当主存块不足时,可以将一段中的部分页面装入主存。
Δ Δ 采用请求段页式存储管理,需要对每一个装入主存的作业建立一张段表,对每一段建立一张页表,段表中指出该段对应页表所存放的起始地址及其长度,页表中应指出该段的每一页在磁盘上的位置以及该页是否在主存,若在主存,则填上占用的主存块号
Δ Δ 作业执行时按段号查找段表,找到相应的页表再根据页号查找页表,由状态位判定该页是否已在主存,若在,则进行地址转换,否则进行页面调度
优点:结合了请求分段式和请求分页式虚拟管理的优点
缺点 :增加了设置表格(段表,页表)和查表等开销

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189203.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • quartus波形仿真破解MODELSIM「建议收藏」

    quartus波形仿真破解MODELSIM「建议收藏」(1)对于Quartus14.0安装时自动安装了modelsim的ae和ase两个版本,分别位于D:\ProgramFiles\altera\14.0\modelsim_ase和D:\ProgramFiles\altera\14.0\modelsim_ae目录下(根据自己的安装路径而定)。其中ae是免费的,包含有altera的FPGA芯片,而ase除了altera的外,还有xilinx的,库更…

  • Pycharm轻松创建Flask项目

    Pycharm轻松创建Flask项目打开Pycharm的file,选择创建新的项目,然后弹出对话框,我们可以看到里面有很多的案例,Flask、Django等等,我们选择生成Flask的demo程序。选择创建之后一个简易的Flask项目就出现在我们眼前,第一个是入口程序,还有一个static的静态目录,templates是模板存放的位置。在Pycharm上面有个run,我们可以选择run来启动Flask的服务,默认打开…

  • Java面试之EJB & Spring[通俗易懂]

    Java面试之EJB & Spring[通俗易懂]Java面试之EJB & Spring

  • 二十、Sql Server 保留几位小数的两种做法

    二十、Sql Server 保留几位小数的两种做法问题:数据库里的floatmomey类型,都会精确到多位小数。但有时候我们不需要那么精确,例如,只精确到两位有效数字。解决:1.使用Round()函数,如Round(@num,2)参数2表示保留两位有效数字。2.更好的方法是使用Convert(decimal(18,2),@num)实现转换,decimal(18,2)…

  • python如何安装matplotlib.pyplot_matplotlib中文

    python如何安装matplotlib.pyplot_matplotlib中文首先,一些博文上说可以在pycharm自动安装,也就是:File–Setting–ProjectInterpreter–±-输入指定模块安装,这对于社区版或教育版真的不行,好吗。安装的思路比较靠谱的,也是自己安装成功的方法。第一步:在官网上下载指定安装包:官网模块包:https://pypi.org/project需要什么模块就下载啥,需要注意的是与你的python版本一致(至于怎么一致,可以…

  • 2016下半年总结[通俗易懂]

    2016下半年总结[通俗易懂]2016下半年总结

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号