一、定义

内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存,虚拟内存在硬盘上的存在形式就是 PAGEFILE.SYS这个页面文件。

【百度百科】虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。

二、虚拟内存的工作方式

虚拟存储器是由硬件和操作系统自动实现存储信息调度和管理的。它的工作过程包括6个步骤: [3]

  1. 中央处理器访问主存的逻辑地址分解成组号a和组内地址b,并对组号a进行地址变换,即将逻辑组号a作为索引,查地址变换表,以确定该组信息是否存放在主存内。
  2. 如该组号已在主存内,则转而执行④;如果该组号不在主存内,则检查主存中是否有空闲区,如果没有,便将某个暂时不用的组调出送往辅存,以便将这组信息调入主存。
  3. 从辅存读出所要的组,并送到主存空闲区,然后将那个空闲的物理组号a和逻辑组号a登录在地址变换表中。
  4. 从地址变换表读出与逻辑组号a对应的物理组号a。
  5. 从物理组号a和组内字节地址b得到物理地址。
  6. 根据物理地址从主存中存取必要的信息。

三、虚拟内存的调度方式

调度方式有分页式、段式、段页式3种。页式调度是将逻辑和物理地址空间都分成固定大小的页。主存按页顺序编号,而每个独立编址的程序空间有自己的页号顺序,通过调度辅存中程序的各页可以离散装入主存中不同的页面位置,并可据表一一对应检索。页式调度的优点是页内零头小,页表对程序员来说是透明的,地址变换快,调入操作简单;缺点是各页不是程序的独立模块,不便于实现程序和数据的保护。段式调度是按程序的逻辑结构划分地址空间,段的长度是随意的,并且允许伸长,它的优点是消除了内存零头,易于实现存储保护,便于程序动态装配;缺点是调入操作复杂。将这两种方法结合起来便构成段页式调度。在段页式调度中把物理空间分成页,程序按模块分段,每个段再分成与物理空间页同样小的页面。段页式调度综合了段式和页式的优点。其缺点是增加了硬件成本,软件也较复杂。大型通用计算机系统多数采用段页式调度。

1.页式调度

在页式虚拟存储系统中,虚拟空间被分成大小相等的页,称为逻辑页或虚页。主存空间也被分成同样大小的页,称为物理页或实页。相应地,虚拟地址分为两个字段:高位字段为虚页号,低位字段为页内地址。实存地址也分为两个字段:高位字段为实页号,低位字段为页内地址。同时,页的大小都取2的整数幂个字。

通过页表可以把虚拟地址转换成物理地址。每个程序设置一张页表,在页表中,对应每一个虚页号都有一个条目,条目内容至少包含该虚页所在的主存页面地址(实页号),用它作为实存地址的高位字段;实页号与虚拟地址的页内地址相拼接,就产生完整的实存地址,据此访问主存。

2.段式调度

页面是主存物理空间中划分出来的等长的固定区域。分页方式的优点是页长固定,因而便于构造页表、易于管理,且不存在外碎片。但分页方式的缺点是页长与程序的逻辑大小不相关。例如,某个时刻一个子程序可能有一部分在主存中,另一部分则在辅存中。这不利于编程时的独立性,并给换入/换出处理、存储保护和存储共享等操作造成麻烦。

另一种划分可寻址的存储空间的方法称为分段。段是按照程序的自然分界划分的、长度可以动态改变的区域。通常,程序员把子程序、操作数和常数等不同类型的数据划分到不同的段中,并且每个程序可以有多个相同类型的段。

在段式虚拟存储系统中,虚拟地址由段号和段内地址组成,虚拟地址到实存地址的变换通过段表来实现。每个程序设置一个段表,段表的每一个表项对应一个段,每个表项至少包括三个字段:有效位(指明该段是否已经调入主存)、段起址(该段在实存中的首地址)和段长(记录该段的实际长度)。

3.段页式调度

段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。

首先,实存被等分成页。在段页式虚拟存储器中,把程序按逻辑结构分段以后,再把每段按照实存的页的大小分页,程序按页进行调入和调出操作,但它又可按段实现共享和保护。因此,它可以兼有页式和段式系统的优点。它的缺点是在地址映像过程中需要多次查表,虚拟地址转换成物理地址是通过一个段表和一组页表来进行定位的。段表中的每个表目对应一个段,每个表目有一个指向该段的页表的起始地址(页号)及该段的控制保护信页表指明该段各页在主存中的位置以及是否已装入、已修改等标志。

四、虚拟内存的调度方式

虚拟存储器地址变换基本上有3种形虚拟存储器工作过程式:全联想变换、直接变换和组联想变换。任何逻辑空间页面能够变换到物理空间任何页面位置的方式称为全联想变换。每个逻辑空间页面只能变换到物理空间一个特定页面的方式称为直接变换。组联想变换是指各组之间是直接变换,而组内各页间则是全联想变换。替换规则用来确定替换主存中哪一部分,以便腾空部分主存,存放来自辅存要调入的那部分内容。常见的替换算法有4种。

  1. 随机算法:用软件或硬件随机数产生器确定替换的页面。
  2. 先进先出:先调入主存的页面先替换。
  3. 近期最少使用算法(LRU,Least Recently Used):替换最长时间不用的页面。
  4. 最优算法:替换最长时间以后才使用的页面。这是理想化的算法,只能作为衡量其他各种算法优劣的标准。

虚拟存储器的效率是系统性能评价的重要内容,它与主存容量、页面大小、命中率,程序局部性和替换算法等因素有关。

五、虚拟内存的作用

虚拟内存提供了三个重要的能力: 缓存内存管理内存保护

  1. 将主存视为一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据
  2. 为每个进程提供了一致的地址空间,简化内存管理
  3. 保护了每个进程的地址空间不被其他进程破坏

六、总结

  1. 调度问题:决定哪些程序和数据应被调入主存。
  2. 地址映射问题:在访问主存时把虚地址变为主存物理地址(这一过程称为内地址变换);在访问辅存时把虚地址变成辅存的物理地址(这一过程称为外地址变换),以便换页。此外还要解决主存分配、存储保护与程序再定位等问题。
  3. 替换问题:决定哪些程序和数据应被调出主存。
  4. 更新问题:确保主存与辅存的一致性。

在操作系统的控制下,硬件和系统软件为用户解决了上述问题,从而使应用程序的编程大大简化。


我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!

参考文章

  1. https://baike.baidu.com/item/虚拟内存/101812?fr=aladdin
  2. https://www.jianshu.com/p/baf3a13c47db

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

  1. 操作系统学习---虚拟内存

    1.虚拟内存的基本思想: 每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称作一页或页面.每一页有连续的地址范围.这些页被映射到物理内存,但并不是所有的页都在内存中才能运行程序.当程序引 ...

  2. android tv的冷启动,YunOS智能电视操作系统——10秒快速冷启动开机

    原标题:YunOS智能电视操作系统--10秒快速冷启动开机 10月14日消息,YunOS和阿里数娱今天上午于杭州举行的云栖大会上正式发布了首个符合ID⊃2;物联网国际标准的操作系统--YunOS fo ...

  3. 红旗linux 桌面10 下载,想要红旗桌面操作系统10(RedFlag Desktop Linux10)的请联系红旗官方...

    当前红旗桌面操作系统 10(RedFlag Desktop Linux 10)已经正式推出,如果有需要下载或者安装光盘的用户建议联系红旗官方,以获知获取RedFlag Desktop Linux 10 ...

  4. 操作系统面试——虚拟内存

    操作系统面试--虚拟内存 文章目录 操作系统面试--虚拟内存 一.是什么? 二.怎么办? 三.怎么找物理地址? 一.是什么? 1.首先内存中无法同时运行两个程序.比如第一个程序内容会擦掉第二个程序存放 ...

  5. oracle 操作系统升级,学习笔记:Oracle升级 linux操作系统10.2.0.1 升级至 10.2.0.3详细过程...

    天萃荷净 记录一次用户现场Oracle 10G数据库升级的过程,Linux操作环境 FOR 10.2.0.1 to 10.2.0.3的版本升级过程 数据库版本linux 32位(10.2.0.1升级到 ...

  6. linux系统10个最常用命令,Linux操作系统10条最常用的基础操作命令

    Linux操作系统10条最常用的基础操作命令 玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常 ...

  7. 操作系统:虚拟内存的定义及实现方式

    传统存储管理方式的特征 各种内存管理策略都是为了同时将多个进程保存在内存中以便允许多道程序设计. 传统的内存管理策略它们都具有以下两个共同的特征: 1) 一次性 作业必须一次性全部装入内存后,方能开始 ...

  8. 详解操作系统中虚拟内存与物理内存的关系

    点击链接: 一文理解虚拟内存.物理内存.内存分配.内存管理 - 知乎 目录 一.虚拟内存与物理内存 1.1 虚拟内存 1.2 虚拟内存与物理内存 二.C/C++中虚拟内存分配模型 2.1 C语言中内存 ...

  9. 为什么操作系统需要虚拟内存

    操作系统中的 CPU 和主内存(Main memory)都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的 CPU 和内存资源,操作系统会使用 CPU 调度器分配 CPU 时间并引入虚拟内存系统 ...

  10. 【操作系统】虚拟内存

    3.5 虚拟内存的概念.特征以及虚拟内存的实现 传统存储管理方式的特征 上一节所讨论的各种内存管理策略都是为了同时将多个进程保存在内存中以便允许多道程序设计.它们都具有以下两个共同的特征: 1) 一次 ...

最新文章

  1. 中科大5名博士生凌晨2点处置实验室漏水,被重奖12万元
  2. sqlserver 新建只读权限用户
  3. 如何写windbg高级脚本---以访问文件的windbg脚本为例说明
  4. Spring MVC 多选框 绑定 Entity 中的 list 属性
  5. 掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地中篇
  6. mysql数据库主从同步状态正常,无异常报错,数据不能同步
  7. Linux配置 DNS and BIND服务配置详解--缓存服务器配置 正反向解析配置
  8. postgis数据库优化_国内首个 Serverless 数据库来了,技术架构全揭秘!
  9. python中函数的可变参数_Python中函数的参数定义和可变参数
  10. PJzhang:经典子域名爆破工具subdomainsbrute
  11. Exploit 代码用于攻击中?GitHub 马上删除
  12. PHP合并2个数字键数组的值
  13. ABP框架 配置权限、本地语言文件、左侧菜单项
  14. Face Recognition 人脸识别该如何测试
  15. SpringBoot系列
  16. texstudio设置暗黑主题
  17. 【PS功能学习】04:祖传抠图技法
  18. uniapp:在HBuilderX里使用夜神模拟器
  19. 5个免费的项目管理工具7款最流行的在线项目管理工具
  20. 四大门户免费企业邮箱用户端基础参数对比

热门文章

  1. spring mvc 和ajax异步交互完整实例
  2. 搜索框中“请输入搜索keyword”
  3. SQL Server-SQL事务处理(Stransaction)
  4. Facebook热门应用被曝向第三方提供用户信息
  5. RPC Over HTTPS 访问Exchange 邮箱
  6. Go实现Raft第一篇:介绍
  7. SpringCloud Sentinel 熔断降级、热点参数限流、与系统自适应限流介绍与配置
  8. 分布式事务实践 解决数据一致性 分布式系统
  9. Java企业面试算法新得体会之5字符串问题24问
  10. 深入解析 Go 中 Slice 底层实现