zoukankan      html  css  js  c++  java
  • 虚拟存储

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

    1.覆盖:

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

        

     示例:

       

     有两种分组方法:

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

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

      所以第二种方法比较好。

    2.交换:

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

        

      覆盖和交换的特点:

        

    3.虚拟存储:

     1)局部性原理:

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

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

        

       2)虚拟存储概念:

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

        

          

    3)虚拟页式存储管理:

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

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

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

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

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

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

        

        

        

        

        

        

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

          

        

          

       

  • 相关阅读:
    数据库索引的作用和优势缺点
    Python 新浪微博元素 (Word, Screen Name)词汇多样性
    解决Myeclipse在port占用,导致tomcat无法启动。(Linux)
    linux命名管道通信过程
    Lua环境搭建之使用EditPlus搭建Lua开发环境
    详解LUA开发工具及其环境配置
    UltraEdit配置python和lua环境
    Lua学习笔记
    Linux 安装ibus极点五笔输入法备忘录
    win2k/xp查看当前进程
  • 原文地址:https://www.cnblogs.com/kkkkkk/p/5521258.html
Copyright © 2011-2022 走看看