虚拟存储

虚拟存储为解决日益增长的内存需要,有以下几种解决办法: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)


相关推荐

  • layoutSubviews 和 drawRect

    layoutSubviews 和 drawRect转自http://justsee.iteye.com/blog/1886463UIView的setNeedsDisplay和setNeedsLayout方法。首先两个方法都是异步执行的。setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到UIGraphicsGetCurrentContext,就可以画画了。而setNeedsLayout会默认调用lay

  • 微信小程序40029 错误解决方法

    微信小程序40029 错误解决方法首先报40029错误的方式有多个,但是错误原因应该只有一个。1:openid和当前小程序不对应,或者AppSecret秘钥和当前小程序不对应的。2:当前小程序能正确获取到token,但是在code还没有失效时,另一个小程序也用这个小程序的openid或者AppSecret秘钥去请求token。这个时候也会报40029,说到底还是第一个错误,只是触发的方式不同。解决办法也很简单,…

  • ToStringBuilder 学习

    ToStringBuilder 学习一、简介与引入1、ToStringBuilder、HashCodeBuilder、EqualsBuilder、ToStringStyle、ReflectionToStringBuilder、CompareToBuilder等这些类都是位于commons-lang.jar下面的,所以要使用这些类一定要导入commons-lang.jar。2、为什么要使用ToStringBuilder?…

    2022年10月31日
  • python数组求和_python数组求和

    python数组求和_python数组求和广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!作者:dyq666,zhihu.compeopledyq666本专题主要介绍哈希表和指针两种方法来解决该类问题,从两个数之和引申到三个数之和,再从四个数之和的问题上思考如何构建出一种通用的代码(可以解决n个数之和)。本文主要内容是通过001问题来初步了解数组求和的两种常用方法。0…

  • apache StopWatch基本使用

    apache StopWatch基本使用转载自:http://blog.csdn.net/eg366/article/details/11835191pom:[html] viewplaincopydependency>      groupId>commons-langgroupId>      artifactId>commons-langarti

  • 玩转电源设计,8个优选逆变电源参考方案大合辑

    玩转电源设计,8个优选逆变电源参考方案大合辑利用晶闸管电路把直流电转变成交流电,这种对应于整流的逆向过程,定义为逆变。例如:应用晶闸管的电力机车,当下坡时使直流电动机作为发电机制动运行,机车的位能转变成电能,反送到交流电网中去。又如运转着的直流电动机,要使它迅速制动,也可让电动机作发电机运行,把电动机的动能转变为电能,反送到电网中去。1、基于STM32单片机SPWM逆变电源设计功能描述:单片机采用:STM32单片机(型号:STM32F030F4P6)输出:正弦波频率:可调;幅值:可调;SPWM逆变原理:单片机SPWM驱动H桥+后级滤

发表回复

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

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