操作系统概念(第九章) 虚拟内存

背景

第八章所介绍的内存管理算法都是基于一个基本要求:执行指令必须在物理内存中,满足这一要求的第一种方法是整个进程放在内存中。动态载入能帮助减轻这一限制,但是它需要程序员特别小心地做一些额外的工作。

指令必须都在物理内存内的这一限制,似乎是必须和合理的,但也是不幸的,因为这使得程序的大小被限制在物理内存的大小内。事实上,研究实际程序会发现,许多情况下并不需要将整个程序放到内存中。即使在需要完整程序的时候,也并不是同时需要所有的程序。

因此运行一个部分在内存中的程序不仅有利于系统,还有利于用户。

虚拟内存(virtual memory)将用户逻辑内存和物理内存分开。这在现有物理内存有限的情况下,为程序员提供了巨大的虚拟内存。

进程的虚拟地址空间就是进程如何在内存中存放的逻辑(或虚拟)视图。通常,该视图为进程从某一个逻辑地址(如地址0)开始,连续存放。

根据第八章,物理地址可以按页幁来组织,且分配给进程的物理页帧也可能不是连续的。这就需要内存管理单元(MMU)将逻辑页映射到内存的物理页帧。

如上图显示,运行随着动态内存的分配,堆可向上生长。类似地,还允许随着子程序的不断调用,栈可以向下生长。堆与栈之间的巨大空白空间(或hole)为虚拟地址的一部分,只有在堆与栈生长的时候,才需要实际的物理页。包括空白的虚拟地址空间成为稀地址空间,采用稀地址空间的优点是:随着程序的执行,栈或者堆段的生长或需要载入动态链接库(或共享对象)时,这些空白可以填充。

除了将逻辑内存与物理内存分开,虚拟内存也允许文件和内存通过共享页而为两个或者多个进程所共享,这样带来了如下的有点:

  • 通过将共享对象映射到虚拟地址空间,系统库可为多个进程所共享。虽然每个进程都认为共享库是其虚拟地址空间的一部分,而共享库所用的物理内存的实际页是为所有进程所共享。通常,库是按制度方式来链接每个进程的空间的。
  • 类似的,虚拟内存允许进程共享内存。两个或者多个进程之间可以通过使用共享内存来相互通信。虚拟内存允许一个进程创建内存区域,以便与其他进程进行共享。共享该内存区域的进程认为它是其虚拟地址空间的一部分,而事实上这部分是共享的。

  • 虚拟内存可允许在用系统调用fork()创建进程期间共享页,从而加快进程的创建。
时间: 2024-10-01 07:20:18

操作系统概念(第九章) 虚拟内存的相关文章

操作系统思考 第九章 线程

第九章 线程 作者:Allen B. Downey 原文:Chapter 9 Threads 译者:飞龙 协议:CC BY-NC-SA 4.0 当我在2.3节提到线程的时候,我说过线程就是一种进程.现在我会更仔细地解释它. 当你创建进程时,操作系统会创建一块新的地址空间,它包含text段.static段.和堆区.它也会创建新的"执行线程",这包括程序计数器和其它硬件状态,以及运行时栈. 我们目前为止看到的进程都是"单线程"的,也就是说每个地址空间中只运行一个执行线程

第九章 虚拟内存

物理地址和虚拟地址: 计算机的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一个唯一的物理地址(PA).第一个字节地址为0,接下来为1,再接下来为2,依次类推.CPU访问内存的最自然方式就是使用物理地址.我们把这种方式称为物理寻址.如图所示. 现代处理器使用一种称为虚拟地址的寻址方式.使用虚拟寻址,CPU通过生成一个虚拟地址(VA)来访问主存,这个虚拟地址在被送到内存之前先准换成适当的物理地址.将一个虚拟地址转换成物理地址的任务叫做地址翻译.CPU上通过内存管理单元这个专用硬

第九章 虚拟内存管理

思维导图 虚拟内存 背景: 解决的办法: 常规存储器的特征 一次性和驻留性是必要的吗? 局部性原理(locality of reference) 出现局部性规律的原因: 局部性表现为: 虚拟内存 示意图: 虚拟存储器的特征 请求调页 实现虚拟存储器要解决: 页面调入策略 请求调页 对进程页表的修改 缺页中断的支持 请求页面中的硬件支持 其中各字段说明 缺页中断机构 示意图: 主要动作 缺页率 页面调换 页面置换算法 一般用缺页率来衡量好坏 算法种类 最佳算法 先进先出置换算法 最近最久未使用算法

操作系统思考 第三章 虚拟内存

第三章 虚拟内存 作者:Allen B. Downey 原文:Chapter 3 Virtual memory 译者:飞龙 协议:CC BY-NC-SA 4.0 3.1 简明信息理论 比特是二进制的数字,也是信息的单位.一个比特有两种可能的情况,写为0或者1.如果是两个比特,那就有四种可能的组合,00.01.10和11.通常,如果你有b个比特,你就可以表示2 ** b个值之一.一个字节是8个比特,所以它可以储存256个值之一. 从其它方面来讲,假设你想要储存字母表中的字母.字母共有26个,所以你

第九章 C语言在嵌入式中的应用

上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 [email protected]:Kevin-Dfg/[email protected]:Kevin-Dfg/Data-Structures-and-Algorithm-Analysis-in-C.git 第九章 第九章 C语言在嵌入式中的应用 C语言在嵌入式中的应用 [email protecte

第九章 虚拟存储器

第九章 虚拟存储器 虚拟存储器是计算机系统最重要的概念之一,它是对主存的一个抽象 物理和虚拟寻址 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组,每字节都有一个唯一的物理地址PA. 根据物理地址寻址的是物理寻址. 虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组. 使用虚拟寻址时,CPU通过生成一个虚拟地址VA来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址(这个过程叫做地址翻译,相关硬件为存储器管理单元MMU) 虚拟存储器作为缓存的工具

《从0到1》笔记 第九章 基础决定命运

第九章 基础决定命运----每个成功企业都是独一无二的,而要做好每个事业,有些事情在起步阶段就必须做好:----基础没有打好的初创企业是无法挽救的. 开头很特殊,它在本质上有别于之后的阶段.如美国的<独立宣言>的制定,后来的几百年都只是小修改. 公司初创时,对合伙人的选择,制度的制定,产品的方向都是基础性的,决定企业最终命运的.现在我考虑投资一家初创公司时,会考察其创立团队.技术能力和才华互补固然重要,但创始人之间的了解程度和他们合作的默契程序也同样重要.创始人在共同创业前应有深厚的交情,否则

数据库学习笔记:第九章 存储数据:磁盘和文件

第九章 数据以磁盘块为单位存储在磁盘上.块分布于一张或多张盘片的同心环形磁道上.磁道可以在盘片的单面或双面上录制. 同一直径的所有磁道的集合称为柱面. 磁盘块的大小在磁盘初始化时可以被设置成扇区大小的倍数. 每一个记录的表面都有一个磁盘头阵列.读写一块时,磁头必须定位在块头位置. 不能并行读写的主要原因是很难保证所有磁头被精确定位在相应的磁道上. 磁盘控制器是磁盘驱动器与计算机的接口. 当数据被写到扇区时,需要计算校验和并存储在扇区上,当扇区上的数据被独处时,需要再次校验和. 寻道时间是用于移动

第九章、安全管理

第九章.安全管理 内容提要: 1.理解安全控制的基本概念 2.了解SQL Server 2008的存取控制 3.掌握SQL Server 2008的安全控制实现方式 4.了解Oracle的安全管理 第一节 安全控制概述 数据库安全性不同于数据的完整性. 安全性:保护数据以防止不合法用户故意造成破坏. (确保用户被允许做其想做的事情.) 完整性:保护数据以防止合法用户无意中造成的破坏. (确保用户做的事情是正确的.) 1.数据库安全控制的目标 保护数据免受意外或故意的丢失.破坏或滥用. 2.数据库

javascript高级程序设计 第九章-- 客户端检测

javascript高级程序设计 第九章-- 客户端检测 客户端检测是javascript开发中最具争议的一个话题,由于浏览器间存在差别,通常需要根据不同浏览器的能力分别编写不同的代码.有下列常使用的客户端检测方法:能力检测:在编写代码之前先检测特定浏览器的能力.例如,脚本在调用某个函数之前,可能要先检测该函数是否存在.这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上.能力检测无法精确地检测特定的浏览器和版本.怪癖检测:怪癖实际上是浏览器中存