虚拟存储技术「建议收藏」

虚拟存储技术「建议收藏」一.实现内存扩充的技术:(1)覆盖技术:在程序运行中,在不同时刻把同一个存储区分配给不同程序段和数据段,实现存储区共享。适用于连续存储(单一连续区分配,分区)如图BDG共享一个存储区(三个进程不同时发生),CEFH同理(2)交换技术(对换技术):1.定义:将内存中某进程的的程序和数据(全部或部分)写入外存的交换区,从而腾出内存空间给其他进程使用。2.相关涉及知识

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

Jetbrains全系列IDE稳定放心使用

一.实现内存扩充的技术:

(1)覆盖技术:

在程序运行中,在不同时刻把同一个存储区分配给不同程序段和数据段,实现存储区共享。适用于连续存储(单一连续区分配,分区)

虚拟存储技术「建议收藏」

如图BDG共享一个存储区(三个进程不同时发生),CEFH同理

(2)交换技术(对换技术):

1.定义:

将内存中某进程的的程序和数据(全部或部分)写入外存的交换区,从而腾出内存空间给其他进程使用。

2.相关涉及知识:

磁盘交换区的管理:

磁盘空间划分为两个部分:文件区和交换区

二者的区别:

(1)存储方式不同:文件区信息已文件形式存放,多采用离散存储;交换区信息按字符流形式存放,多用连续存储。

(2)访问速度不同:文件区是间接地址访问(有目录,形成多级),访问时间较慢,而交换区是直接访问,速度较快。

(3)存储时间不同:文件区适合长久存储,交换区适合存放短期数据。

3.方式:对换作业  , 对换进程。

(3)虚拟存储技术(对换页面/段面)

1.相关背景:

程序的局部性原理:在一个较短的时间内,程序执行中对内存地址的访问往往局限于一个较小的空间上。

按照这一原理,一个进程运行时,可不必将进程全部装载到进程中,只需把当前运行的部分程序和数据放到内存中,随着进程运行的不断推进,其余部分可随时装入,实现小内存运次那个大程序的效果。

2.虚拟存储的主要特点:

(1)离散性  (装入虚拟存储的进程以离散形式存放)

(2)多次性(任意进程或其中的一部分可以分多次装载到进程中)

(3)对换性(根据需要进程可以换进换出)

(4)虚拟性(虚拟出一个较大的逻辑空间)

3.虚拟存储的实现:

一.请求分页存储管理:

#1.数据结构:

位示图

页表

(结构)   :    页号 状态(存在位) 帧号 外存位置 访问标识 修改位

若状态位(存在位)为0,说明缺页,则记录该缺页在外存中的位置,访问情况及修改情况。

#2.地址重定位过程:

(1)不发生缺页时:

当调度一个进程时,系统将其页表首址装入CPU中的页表控制寄存器。运行中用相对地址的高端部分作为页号去检索页表,看该页是否已在内存。若已在内存就按普通分页机制的方式直接生成物理地址,并将访问标志和修改标志设置好。

(2)发生缺页时:
若该页不在内存中,则发生缺页中断,通过中断处理机制将缺页调入到内存中。

中断处理过程:

(1) 保留进程上下文。

(2) 判断内存是否有空闲帧?若有,则获取一个帧号No,转(4)。

(3) 腾出一个空闲帧,即:

 (3)-1调用置换算法,选择一个淘汰页PTj。

                   (3)-2  PTj (S)0;

                   (3)-3  No PTj (F);。

                   (3)-4 若该页曾修改过,则:

                           (3)-4-1 请求外存交换区上一个空闲块B。

                           (3)-4-2  PTj (D)B。

                           (3)-4-3 启动I/O管理程序,将该页写到外存上。

 (4)按页表中提供的缺页外存位置,启动I/O,将缺页装入空闲帧中。

 (5)修改页表的状态字段。PTi(F)No;PTi(S)1。

 (6)结束。

虚拟存储技术「建议收藏」

涉及到缺页调入,则要考虑到缺页调入策略:

页面置换算法

主要有6种:

(1)最佳置换算法(OPT):(理想状态下)

思想:每次选择在给出的页号序列中最城市间不再使用的页面置换出去。

(2)先进先出算法:

将最先进来的页调换出去,可以用栈,用栈底保存最开始的值,每次置换都换底。

(3)最近最久未使用算法(LRU):

将最近最久未使用的页面置换出去,若用栈,则在(2)方法的基础上还要每次都要更新栈顶,相关的栈底也会改变

(4)最近最经常不使用(LFU)

(5)Clock(钟表)算法(近似LRU算法(NRU))

该算法中将被置换的候选帧集合构成一个环状缓冲区,并设一个循环移动指针。初始时,该指针指向缓冲区的头部。当某页被选择置换后,指针将顺序指向缓冲区的下一个帧。环状缓冲区中的每个候选帧关联一个“访问位”,记作A,当某帧的A=0时,说明该帧最近未被访问。显然,一个刚刚调入页面的帧,以及刚刚访问过的帧,其A=1。

(6)改进的clock算法:

为每个帧增设一个关联的修改位

A=0且M=0:该帧中所存的页面最近没有访问,也没有修改。

  l  A=1且M=0:该帧中所存的页面最近访问过,但没有修改。

  l  A=0且M=1:该帧中所存的页面最近没有访问,但修改了。

  l  A=1且M=1:该帧中所存的页面最近访问过,也修改过。

页面调入策略:

(1)从文件区调入

(2)从交换区调入

(3)从内存中的磁盘交换区调入

系统的有效访存时间T的估算

•假定系统的一个内存周期为ma,调入缺页的时间为la,缺页率为p,那么:

       T=(1-p)´ma + p ´(la+ ma)

           = ma- p´ma + p´la + p´ma

           = ma +p ´ la.

二.请求分段存储管理:

#1.数据结构:

段表

(结构)    段号   驻留位    内存基址   外存地址   长度   访问权限   访问位   修改位    增补位   



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

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

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

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

(0)


相关推荐

  • 如果要将二叉树{16,14,10,8,7,9,3}_二叉分枝

    如果要将二叉树{16,14,10,8,7,9,3}_二叉分枝有一棵二叉苹果树,如果树枝有分叉,一定是分两叉,即没有只有一个儿子的节点。这棵树共 N 个节点,编号为 1 至 N,树根编号一定为 1。我们用一根树枝两端连接的节点编号描述一根树枝的位置。一棵苹果树的树枝太多了,需要剪枝。但是一些树枝上长有苹果,给定需要保留的树枝数量,求最多能留住多少苹果。这里的保留是指最终与1号点连通。输入格式第一行包含两个整数 N 和 Q,分别表示树的节点数以及要保留的树枝数量。接下来 N−1 行描述树枝信息,每行三个整数,前两个是它连接的节点的编号,第三个数是这根树枝上

  • idea 2021.9激活码_最新在线免费激活

    (idea 2021.9激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlb…

  • p2p流媒体平台有哪些(p2p工作模式)

    P2P流媒体开源项目介绍1.PeerCast2002年成立,最早的开源P2P流媒体项目。PeerCast把节点按树结构组织起来,每个频道都是一个树,直播源是根节点,父节点只给子节点提供数据。节点离根节点越远,传输时延就越大,所以树的深度应该尽可能短,但节点有限的上行带宽限制了节点的宽度。 2.Tribler2008年开始的项目,既能实现BT下载,还能播放视频的点播和直播…

  • Windows Subsystem for Android 安装<简化向>[通俗易懂]

    Windows Subsystem for Android 安装<简化向>[通俗易懂](总共安装时间≤1小时)能在Windows上运行安卓子系统还是第一次,既然Microsoft能开放给我们,那不妨尝试一下安装吧!

  • select2 使用教程(简)「建议收藏」

    select2 使用教程(简)「建议收藏」用了这么久的Select2插件,也该写篇文章总结总结。当初感觉Select2不是特别好用,但又找不到比它更好的下拉框插件。在我的印象里Select2有2个版本,最新版本有一些新的特性,并且更新了一下方法参数,比最初版本要好看一些,本文针对新版本。官网:http://select2.github.io/演示:请选择由于博客系统的原因,所以只能演示简单

  • netstat和netstat -ano

    netstat和netstat -ano(1)在命令行窗口中输入netstat后应该怎能读呢?本机地址为10.1.127.144,本机的52051端口正在和IP地址为183.192.164.67的8864端口进行通信,而且通信使用的是TCP协议(本机使用52021端口,对方使用8864端口)(2)在命令行中输入netstat-ano可以看出多了PID这一列(表示是PID为这个数的程序正在占用某个端口和外部某台机器的某个端口进行通信)所以netstat-ano比netstat能显示更多的信息,是升级版本,plus版本

    2022年10月21日

发表回复

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

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