某操作系统采用页式虚拟存储管理_虚拟存储系统

某操作系统采用页式虚拟存储管理_虚拟存储系统 一、请求分页式存储管理的基本思想请求分页式存储管理是基于分页式存储管理的一种虚拟存储器1.相同点a.把内存空间划分成尺寸相同、位置固定的块b.按照内存块大小,把作业的虚拟地址空间(相对地址空间)划分成页(划分过程对用户透明)c.虚拟地址空间中的一页可以装入到内存中的任何一块中2.不同点a.作业全部进入辅存,运转时,并不把整个作业程序一起都装入到内存,只…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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账号...

(0)


相关推荐

  • List集合转换成Json字符串

    List集合转换成Json字符串前言进行转换我们使用alibaba的jsonjar:com.alibaba.fastjson.jar1.导入依赖或者直接导入jar<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId&…

    2022年10月18日
  • mysql服务器失败1396_Mysql ERROR 1396 (HY000) 错误的解决办法

    mysql服务器失败1396_Mysql ERROR 1396 (HY000) 错误的解决办法建立用户的时候报告这个错误:ERROR1396(HY000):OperationCREATEUSERfailedfor‘abc’@’localhost’原因是mysql中已经有了这个用户,从mysql.user中直接删除delete,然后刷新权限FLUSHPRIVILEGES,再建用户就不会有这个问题了。如果是dropuser的话,mysql内部会自动刷新一下,那么再建也不会…

  • webpack基本配置项_webpack配置文件详解

    webpack基本配置项_webpack配置文件详解前言上篇我们已经配置好了本地开发服务器,但是配置的相对比较凌乱,一个文件中有些是开发时用到的配置,有些是生成时用到的配置,有些是开发和生成都要用到的配置,所以我们这里把环境分为3个环境webpac

  • Java Eclipse下载安装教程[通俗易懂]

    Java Eclipse下载安装教程[通俗易懂]一、下载:(1)Eclipse是一个开放源代码的项目,其官方网站是www.eclipse.org(2)从首页中单击DOWNLOAD按钮,进入图2所示的页面。(3)点击DownloadPackages,进入Eclipse下载页面。从EclipseIDEforJavaEEDevelopers后面选择适合当前系统的版本,这里单击64bit按钮,…

  • 奔图M6506驱动_三星M2071是一体机吗

    奔图M6506驱动_三星M2071是一体机吗奔图PantumM6608一体机驱动是官方提供的一款一体机(打印/扫描)驱动,本站收集提供高速下载,用于解决一体机与电脑连接不了,无法正常使用的问题,本动适用于:WindowsXP/Windows7/Windows8/Windows1032/64位操作系统。有需要的朋友可以来本站下载安装。奔图PantumM6608一体机驱动http://www.equdong.net/qudong/bt_Pantum/7833.html…

  • 图解后缀表达式的计算过程

    为了解释后缀表达式的好处,我们先来看看,计算机如何应用后缀表达式计算出最终的结果20的。后缀表达式:9 3 1-3*+ 10 2/+规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。下面是详细的步骤:1. 初始化一个空栈。此桟用来对要运算的数字进出使用。

发表回复

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

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