什么是虚拟内存?它有什么作用?它跟实际内存有什么区别和联系?

虚拟内存用硬盘空间做内存来弥补计算机RAM空间的缺乏。当实际RAM满时(实际上,在RAM满之前),虚拟内存就在硬盘上创建了。当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件上。这个过程对应用是隐藏的,应用把虚拟内存和实际内存看作是一样的。 每个运行在WindowsNT下的应用被分配到4GB的属于自己的虚拟地址空间(2GB给应用,2GB给操作系统)。 使用虚拟内存存在这样的问题,那就是读写硬盘的速度大大慢于读写实际RAM的速度。这就是当NT系统在没有足够的内存时程序运行慢的原因。 虚拟内存是文件数据交叉链接的活动文件。是WINDOWS目录下的一个"WIN386.SWP"文件,这个文件会不断地扩大和自动缩小。 就速度方面而言,CPU的L1和L2缓存速度最快,内存次之,硬盘再次之。但是虚拟内存使用的是硬盘的空间,为什么我们要使用速度最慢的硬盘来做为虚拟内存呢?因为电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致我们只有可怜的256M/512M内存消耗殆尽。而硬盘空间动辄几十G上百G,为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用… 手动设置虚拟内存 在默认状态下,是让系统管理虚拟内存的,但是系统默认设置的管理方式通常比较保守,在自动调节时会造成页面文件不连续,而降低读写效率,工作效率就显得不高,于是经常会出现“内存不足”这样的提示。

虚拟存储的需求背景

程序规模的增长速度远远大于存储器容量的增长速度

虚拟存储需求

计算机系统时常出现内存空间不够用时

1、覆盖(overlay)应用程序手动把需要的指令和数据保存在内存中
2、交换(swapping)操作系统自动把暂时不能执行的程序保存到外存中
3、虚拟存储 在有限容量的内存中,以页为单位自动装入更多更大的程序

覆盖技术

目标:在较小的可用内存中运行较大的程序
方法:
依据程序逻辑结构,将程序划分为若干功能相对独立的模块;将不会同时执行的模块共享同一块内存区域
必要部分(常用功能)的代码和数据常驻内存
可选部分(不常用功能)放在其他程序模块中,只在需要用到时装入内存
不存在调用关系的模块可相互覆盖,共用同一块内存区域

覆盖技术的不足
增加编程困难需程序员划分功能模块,并确定模块间的覆盖关系,增加了编程的复杂度;
增加执行时间,从外存装入覆盖模块,以时间换空间

交换技术

目标:增加正在运行或需要运行的程序的内存
实现方法:
可将暂时不能运行的程序放到外存
换入换出的基本单位(整个进程的地址空间)
换出(swap out)把一个进程的整个地址空间保存到外存
换入(swap in)将外存中某进程的地址空间读入到内存

交换技术面临的问题

交换时机:何时需要发生交换,只当内存空间不够或有不够的可能时换出

交换区大小:存放所有用户进程的所有内存映像的拷贝

程序换入时的重定位:换出后再换入时要放 在原处吗?
采用动态地址映射的方法

覆盖与交换的比较

覆盖
只能发生在没有调用关系的模块间
程序员须给出模块间的逻辑覆盖结构
发生在运行程序的内部模块间

交换
以进程为单位
不需要模块间的逻辑覆盖结构
发生在内存进程间

虚拟存储技术的目标

只把部分程序放到内存中,从而运行比物理内存大的程序,由操作系统自动完成,无需程序员的干涉实现进程在内存与外存之间的交换,从而获得更多的空闲内存空间。

在内存和外存之间只交换进程的部分内容

局部性原理(principle of locality)

程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域

时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内
空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内
分支局部性:一条跳转指令的两次执行,很可能跳到相同的内存位置

局部性原理的意义:
从理论上来说,虚拟存储技术是能够实现的,而且可取得满意的效果

虚拟存储的基本概念

思路:将不常用的部分内存块暂存到外存

原理:
装载程序时,只将当前指令执行需要的部分页面或段装入内存
指令执行中需要的指令或数据不在内存(称为缺页或缺段)时,处理器通知操作系统将相应的页面或段调入内存
操作系统将内存中暂时不用的页面或段保存到外存

实现方式:
虚拟页式存储
虚拟段式存储

虚拟存储的基本特征

*不连续性
物理内存分配非连续
虚拟地址空间使用非连续

*大用户空间
提供给用户的虚拟内存可大于实际的物理内存

*部分交换
虚拟存储只对部分虚拟地址空间进行调入和调出

虚拟存储的支持技术

*硬件
页式或短时存储中的地址转换机制

*操作系统
管理内存和外存间页面或段的换入和换出

虚拟页式存储管理

在页式存储管理的基础上,增加请求调页和页面置换

思路:
当用户程序要装载到内存运行时,只装入部分页面,就启动程序运行
进程在运行中发现有需要的代码或数据不在内存时,则向系统发出缺页异常请求
操作系统在处理缺页异常时,将外存中相应的页面调入内存,使得进程能继续运行

虚拟页式存储中的地址转换

虚拟页式存储中的页表项结构


驻留位:表示该页是否在内存

  • 1表示该页位于内存中,该页表项是有效的,可以使用
  • 0表示该页当前在外存中,访向该页表项将导致缺页异常

修改位:表示在内存中的该页是否被修改过

  • 回收该物理页面时,据此判断是否要把它的内容写回外存

访向位:表示该页面是否被访问过(读或写)

  • 用于页面置换算法

保护位:表示该页的允许访向方式

  • 只读、可读写、可执行等

缺页异常(缺页中断)的处理流程

A 在内存中有空闲物理页面时,分配一物理页帧f,转第E步;
B.依据页面置换算法选择将被替换的物理页帧f,对应逻辑页q
C.如q被修改过,则把它写回外存;
D.修改q的页表项中驻留位置为0;
E.将需要访问的页p装入到物理页面f
F.修改p的页表项驻留位为1,物理页帧号为f;
G.重新执行产生缺页的指令

虚拟页式存储中的外存管理

在何处保存未被映射的页?

  • 应能方便地找到在外存中的页面内容
  • 交换空间(磁盘或者文件)采用特殊格式存储未被映射的页面

虚拟页式存储中的外存选择

  • 代码段:可执行二进制文件
  • 动态加载的共享库程序段:动态调用的库文件
  • 其它段:交换空间

操作系统 - 虚拟内存相关推荐

  1. 操作系统——虚拟内存

    文章目录 前言 一.虚拟内存的基本概念 二.请求分页管理方式 1.页表机制 2.缺页中断机构 3.地址变换 三.页面置换算法 1.最佳置换算法(OPT) 2.先进先出置换算法(FIFO) 3.最近最久 ...

  2. 操作系统-虚拟内存、虚拟地址空间机制

    文章目录 操作系统-虚拟内存 先引入问题 问题1 问题2 设计原则-局部性原理 虚拟内存有哪些特征? 虚拟内存技术的实现 请求分页存储管理 页表机制 缺页中断机构 地址变换机构 小结 操作系统-虚拟内 ...

  3. 操作系统 虚拟内存技术

    前言 本文介绍操作系统里的虚拟内存技术,它是目前最常用的内存扩充技术. 本文先介绍了虚拟内存的概念, 再介绍如何实现虚拟内存,只以请求分页管理方式为例来表示如何实现: 再比较各种页面置换算法,用以确定 ...

  4. 操作系统-虚拟内存技术

    操作系统-王道老师 第三章-虚拟内存 目录: 1.虚拟内存的基本概念     1.1 传统存储管理方式的特征和缺点     1.2 局部性原理     1.3 虚拟内存的定义和特征     1.4 如 ...

  5. 操作系统——虚拟内存技术

    概要 传统存储管理方式缺点 一次性和驻留性 局部性原理 时间局部性原理和空间局部性原理 虚拟内存技术概要 最近需要用的数据调入内存,不需要用的数据调出内存就可以实现虚拟内存技术,注意虚拟内存的最大容量 ...

  6. 操作系统虚拟内存管理

    这里写目录标题 虚拟内存简介 虚拟内存概念 虚拟内存的容量 虚拟内存的优点 虚拟内存的缺点 如何实现虚拟内存(请求分页.请求分段.请求段页式) 请求分页存储管理方式 页表机制 缺页中断机构 地址变换机 ...

  7. 计算机操作系统虚拟内存管理

    从逻辑上进行内存的扩充 具有请求调入和置换功能 传统存储管理方式的特征 上一节所讨论的各种内存管理策略都是为了同时将多个进程保存在内存中以便允许多道程序设计.它们都具有以下两个共同的特征: 1) 一次 ...

  8. 计算机操作系统——虚拟内存与物理内存

    虚拟内存与物理内存 如何管理内存? 当多个程序同时运行时,如何让多个应用程序共同使用物理内存资源?有两种简单的方法: 使某一个应用程序独占所有的内存资源.一个程序要运行就将另一个程序的内存数据转存到硬 ...

  9. 操作系统虚拟内存的基本概念(内存空间的扩充)

    一.虚拟内存的基本概念 (一)传统存储管理方式的特征.缺点 一次性[可用虚拟存储技术解决问题] :作业必须一次性全部装入内存后才能开始运行.这会造成两个问题: ①作业很大时,不能全部装入内存,导致大作 ...

最新文章

  1. 关于日常使用的命令解读:ifconfig
  2. Iframe高度自适应(兼容IE/Firefox、同域/跨域)
  3. [攻防世界 pwn]——level3
  4. MVC3 Razor学习资料汇总(ScottGu的博客截至2011-02-15动态)
  5. 远程屏幕传输“差异截图”的问题。
  6. LeetCode—33. 搜索旋转排序数组
  7. Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for...
  8. Directx 9在vs2008 里面的环境配置
  9. VUE学习(二):修改下拉框样式
  10. mysql两个库相互同步_实现两个Mysql数据库之间同步的方案
  11. VS之sonar插件安装
  12. 第11集丨Promise.reject
  13. U校园大学生必备答案
  14. 海豚选房获中视银宗基金300万元天使轮融资,专注司法拍房
  15. FMI飞马网 | AI人工智能:54份行业重磅报告汇总(附下载)
  16. 魔兽世界会流行多久?
  17. 阿里云大数据分析师职业认证
  18. 计算机网络_选择题(一)
  19. 学计算机的3个奋斗目标,我的学习方法和奋斗目标
  20. 【深度学习】Pytorch chunk函数

热门文章

  1. 如何用命令ping计算机型号,怎么修改cmd中ping命令的数据包大小?
  2. 关于学习生活看法的维度
  3. Doo Prime 提供高达 1000 倍杠杆,助您撬动无限机遇
  4. windows与ubuntu共享文件夹
  5. Android 高德地图绘制线、添加图钉、添加线段纹理
  6. 狗年出生的宝宝取名的五大方法介绍,快来为你的宝宝起名吧
  7. 萧乾升:4.17黄金白银TD实时最新策略,名师在线解套
  8. 在Word中输入带圈的数字字符
  9. 【SSH】MyEclipse卸载干净的方法
  10. 为什么我的Android Studio没有Android SDK选项