虚拟存储

虚拟存储为解决日益增长的内存需要,有以下几种解决办法:1.覆盖:将程序划分成几个模块,将没有调用关系的模块(即不会同时运行的模块)分成一组,其中每组所占的内存大小为组内所需内存最大的模块的内存,然后一组内

大家好,又见面了,我是你们的朋友全栈君。

为解决日益增长的内存需要,有以下几种解决办法:

1.覆盖:

 将程序划分成几个模块,将没有调用关系的模块(即不会同时运行的模块)分成一组,其中每组所占的内存大小为组内所需内存最大的模块的内存,然后一组内的模块可以进行替换,这样可以减小程序所占内存大小。

    <span role="heading" aria-level="2">虚拟存储

 示例:

   <span role="heading" aria-level="2">虚拟存储

 有两种分组方法:

  1)A一组,B,C一组,D,E,F一组。所需空间为20+50+40=110K

  2)A一组,B,E,F一组,C,D一组。所需空间为20+50+30=100K

  所以第二种方法比较好。

2.交换:

  把当前在内存里的且处于非运行状态的进程移到外存中,然后就空出内存中的区域给运行状态的进程使用。不考虑进程的空间大于内存总空间的情况。

    <span role="heading" aria-level="2">虚拟存储

  覆盖和交换的特点:

    <span role="heading" aria-level="2">虚拟存储

3.虚拟存储:

 1)局部性原理:

  就是说 一段时间内 访问的数据是在一个小区域内的,且一个数据的一次访问和下次访问的间隔很短,对于跳转指令,两次跳转的内存地址很可能相同,这就算是局部性原理。

  因为局部性原理的存在,使得在内存中的数据的命中率较高,从而虚拟存储能获得较好的性能,所以虚拟存储才得以实现。

    <span role="heading" aria-level="2">虚拟存储

   2)虚拟存储概念:

  把目前用不到的进程快暂移到外存。与交换不同的是,交换是把整个进程都移出内存,而虚拟存储是把进程的部分模块移出去,且在最开始加载的 时候也是把进程的部分模块加载进内存,而不是整个进程都加载进去。

    <span role="heading" aria-level="2">虚拟存储

      <span role="heading" aria-level="2">虚拟存储

3)虚拟页式存储管理:

 就是在之前的非连续内存管理中的页式存储的基础上,可以根据需要把内存中的页帧移到外存,也可以把要外存上要运行的页帧移到内存中来。

   为此在页表中加入了几个标志位:

   驻留位是说逻辑页在内存中有没有对应的页帧,根据此来确定是否发生缺页中断。

 修改位是说对应的物理页帧有没有进行过修改,这是在页面调度把此页调度到外存时用的,如果进行过修改就得把此页帧写入外存中来进行更 新,否则直接把这页从内存中移除然后修改页表中的驻留位为0就行了。

 保护位是说该页是只读啊,可读可写啊,还是可执行等。 

 访问位是说这个页面近期有没有被访问过,用于页面置换算法的。

    <span role="heading" aria-level="2">虚拟存储

    <span role="heading" aria-level="2">虚拟存储

    <span role="heading" aria-level="2">虚拟存储

    <span role="heading" aria-level="2">虚拟存储

    <span role="heading" aria-level="2">虚拟存储

    <span role="heading" aria-level="2">虚拟存储

  4)缺页中断的处理请求:

      <span role="heading" aria-level="2">虚拟存储

    

      

 

   

 

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

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

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

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

(0)
blank

相关推荐

  • 大话无线通讯基础之:WIFI和5G信道划分

    大话无线通讯基础之:WIFI和5G信道划分目前主流的无线WIFI网络设备802.11a/b/g/n/ac:各种协议的数据传输率:80211.a协议支持的数据传输率:6、9、12、18、24、36、48和54Mbps80211.b协议支持的数据传输率:1、2、5.5和11Mbps80211.g协议支持的数据传输率:6、9、12、18、24、36、48和54Mbps;可以降级到1、2、5.5…

  • idea2021.02激活码(注册激活)

    (idea2021.02激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • verilog语言转vhdl语言_vhdl转换为verilog

    verilog语言转vhdl语言_vhdl转换为verilog1.下载后先运行X-HDL-4.2.1-Setup.exe文件,选择安装路径,注意路径中不要有中文。2.运行crack_xhdl_4.2.1.exe文件,选择刚刚你安装XHDL的路径下的\bin文件夹,点击next—finish,出现success代表激活成功教程成功。3.可能会要求你重启电脑,这时候同意重启就好了。4.重启之后运行X-HDL。5.可以选择VHDL转Verilog或Verilog转…

  • matlab做图像_matlab语言基础

    matlab做图像_matlab语言基础注:读取图像的路径自己设置。图像文件的查询%imfinfo()用于获取一张图片的具体信息info=imfinfo(‘E:\a_matlab_file\picture\longmao.jpg’);disp(info);图像的读取img_route=’E:\a_matlab_file\picture\***.jpg’;A=imread(img_route);set(0,’de…

  • 编译器指令重排和CPU指令重排_十进制调整指令DA怎么用

    编译器指令重排和CPU指令重排_十进制调整指令DA怎么用这个知识点也是很多人说不清道不明的地方,感觉都知道,说又说不出来。为什么会这样呢?因为这几个字,很容易被当成动词去理解,其实正确的理解是当成名词,即指令重排现象。那什么时候会产生指令重排现象呢?两个阶段:1、编译期;2、运行期。编译期指令重排解释型语言是在运行期间执行编译+运行动作,所以运行效率较编译型语言低。Java既可以作为解释型语言去用,也可以作为编译型语言。但是主流的做法是当成编译型语言在…

  • git拉取代码如何解决冲突_git拉取代码如何解决冲「建议收藏」

    git拉取代码如何解决冲突_git拉取代码如何解决冲「建议收藏」在使用gitpull代码时,经常会碰到有冲突的情况,提示如下信息:Yourbranchisbehind’origin/master’by123commits,andcanbefast-forwarded.(use”gitpull”toupdateyourlocalbranch)Please,commityourchangesorstashthem…

发表回复

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

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