操作系统原理第九章:虚拟内存

vuecil3+版本下,兼容ie等不支持es6的低版本浏览器 *综上,完成兼容性涉及到的配置的文件有,对应在页面中查看代码,就不单独附代码了:main.js。 阅读详情

1 虚拟内存的背景

无论是分页还是分段,程序运行的基本要求就是必须全部放入内存后方可运行,如果进程大于内存的容量或者内存中同时运行多个进程,那么进程就无法执行了,解决这个问题有两种方法,即覆盖和动态加载,但是这两种工作都是由程序员手动来做而且实现很复杂。

上面的问题究其本质就是内存不够用了,那么很容易想到的就是扩充内存,可以从物理上扩充内存容量,但是是受限的,如32位操作系统支持的内存最大为4GB,64位操作系统支持的内存最大为128GB,并且购买内存也较为昂贵。那么是否可以从逻辑上扩充内存容量呢?答案是可以的,本文内容就是讲解如何从逻辑上扩充内存。


常规的存储方式具有如下特征:

  • 一次性:作业在运行前需要一次性的全部装入内存;
  • 驻留性:作业装入内存后,便一直驻留在内存中,直到作业结束。

正是由于一次性和驻留性,使得程序中暂时不用的数据占用了大量的内存空间,从而需要运行的作业无法装入内存。那么一次性和驻留性是必需的吗?人们对程序做了很多的研究发现程序在执行过程中其实不是要运行所有部分:

  • 程序通常有处理异常错误的代码,很少执行
  • 数组、链表和表通常分配了比实际需要更多的内存
  • 程序的某些选项或特点可能很少使用
  • 即使需要完整的程序,也并不是同时需要所有的程序

通过上述四个特点,我们可以发现程序运行时往往只运行了一部分,这个特点我们叫做局部性原理。

1.1 局部性原理

局部性原理的定义是在一段时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域内。出现局部性原理有如下原因:

  • 程序在执行时,除了少部分的转移和过程调用指令外,大多数仍是顺序执行的;
  • 子程序调用将会使程序的执行由一部分内存区域转至另一部分区域,也就是说程序只是从一个局部跳跃到另一个局部而已;
  • 程序中存在许多循环结构,循环体中的指令被多次执行;
  • 程序中还包括许多对数据结构的处理,如对连续的存储空间——数组的访问,往往局限于很小的范围内。

因此我们说程序是具有局部性的,局部性主要体现在两个方面:

  • 时间局部性: 如果程序中的某条指令一旦执行,则不久的将来该指令可能再次被执行;如果某个存储单元被访问,则不久以后该存储单元可能再次被访问;产生时间局限性的典型原因是在程序中存在着大量的循环操作;
  • 空间局部性: 一旦程序访问了某个存储单元,则在不久的将来,其附近的存储单元也最有可能被访问。 即程序在一段时间内所访问的地址,可能集中在一定的范围内,其典型原因是程序是顺序执行的。

1.2 虚拟内存

虚拟内存是一种允许进程部分装入内存就可以执行的技术,它基于的原理就是局部性原理,因为程序具有局部性,所以只需要把当前需要执行的程序内容装入内存即可,这个时候用户看到的逻辑地址空间就比物理地址空间大,要实现这个功能就必须允许页面能够被换入和换出。

如下图,虚拟内存virtual memory显然是比实际内存physical memory大的,只需要把当前要执行的部分装入内存即可;用memory map来映射当前哪些部分是要装入内存的,类似页表,当运行到某个位置的时候就可以查询它在内存还是在外存;当要运行新的程序时或当前内存不足时就要和外存进行页面的换入和换出:
在这里插入图片描述
虚拟内存具有如下特征:

  • 离散性:在内存分配时采用离散的分配方式,是虚拟存储器的最基本的特征;
  • 多次性:一个作业被分成多次调入内存运行,即在作业运行时没有必要将其全部装入,只须将当前要运行的那部分程序和数据装入内存即可。是虚拟存储器最重要的特征;
  • 对换性:作业运行过程中信息在内存和外存的对换区之间换进、换出;
  • 虚拟性:从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。

2 请求调页

实现虚拟存储器要解决如下三个问题 :

  • 程序部分运行可以吗? 是可以的,依照程序局部性原理,取出要用的页,然后装入内存即可;
  • 发现程序不在内存时,如何将其装入后继续运行? 用请求调页技术,当发生缺页时,产生缺页中断,将外存上的页调入内存;
  • 内存无空间时怎么办? 用页面置换,将部分页面换出内存。

2.1 页面调入策略

为能使进程运行,事先需将一部分要执行的程序和数据调入内存,有两种调页的策略:

  • 预调页策略:主动的页面调入策略,即把那些预计很快会被访问的程序或数据所在的页面,预先调入内存;这个策略的性能取决于预测的准确率,预测的准确率不高(50%),主要用于进程的首次调入。也有的系统将预调页策略用于请求调页。
  • 请求调页策略:当进程在运行中发生缺页时,由系统将缺页调入内存;目前虚拟存储器系统大多采用此策略;但在调页时须花费较大的系统开销,如需频繁启动磁盘I/O。

请求调页只有在一个页需要的时候才把它换入内存,这是请求调页的好处,或者说是虚拟内存的好处。它需要需要很少的I/O,需要很少的内存,能够快速响应,并且可以支持多用户。当需要某个页的时候判断它是否在内存中是需要进行查阅的,通常存在一个bit位表示它是不是在内存,若不在内存中就要调入内存。


在具体实现的时候需要对进程页表的修改,也需要缺页中断的支持。请求分页的页表机制是在纯分页的页表机制上形成的,由于只将应用程序的一部分调入内存,还有一部分仍在磁盘上,故需在页表中再增加若干项,供程序(数据)在换进、换出时参考。在请求分页系统中的每个页表项如下图所示:
在这里插入图片描述
其中增加的各字段说明如下:

  • 状态位(存在位P) :用于指示该页是否已调入内存,供程序访问时参考;
  • 访问字段A:用于记录本页在一段时间内被访问的次数,或最近已有多长时间未被访问,提供给置换算法选择换出页面时参考;
  • 修改位M:表示该页在调入内存后是否被修改过。由于内存中的每一页都在外存上保留一份副本,因此,若未被修改,在置换该页时就不需将该页写回到外存上,以减少系统的开销和启动磁盘的次数;若已被修改,则必须将该页重写到外存上,以保证外存中所保留的始终是最新副本;
  • 外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时使用。

完成页面调页还需要缺页中断机构的支持,在请求分页系统中,每当所要访问的页面不在内存时,便要产生一缺页中断,请求操作系统将所缺页调入内存。与一般中断的主要区别在于:

  • 缺页中断在指令执行期间产生和处理中断信号,而一般中断在一条指令执行完后检查和处理中断信号;
  • 缺页中断返回到该指令的开始重新执行该指令,而一般中断返回到该指令的下一条指令执行;
  • 一条指令在执行期间,可能产生多次缺页中断;

下图是缺页中断的处理过程,现在要加载一个程序 M,❶首先要查询页表,发现该页在页表中是 i (invalid),表示不在内存,❷这个时候就产生一个缺页中断,❸操作系统就会根据在页表中指向的外存的地址找到它,❹随后从外存放入内存,放入的时候要找一个空闲页,一旦放进去了以后,❺页表就要更新,此时中断就结束了,❻接着就要返回到这个程序重新执行:
在这里插入图片描述
上面整个过程主要是执行以下三个操作:

  • 处理缺页中断;
  • 从磁盘读入所需的页;
  • 重新开始被中断的进程。

其中最大的一部分时间开销为第二步,即从磁盘读入所需的页,因此我们希望减少读入的次数,也就是降低缺页率。

缺页率 = 访问内存次数 / 不成功访问次数

3 页面置换

随着装入内存的程序越来越多,内存可能会有装满的情况下,这个时候如果来了新的程序想要进入内存,就必须执行页面置换,将内存中暂不使用的程序先从内存调出到外存。

如下图的两个用户程序,其中用户程序1需要载入程序M,用户程序2需要载入程序B,而此时M载入到内存后,内存已经满了,程序B再要装入内存已经没有位置了,所以此时要将现在内存中的某个程序置换出去。
在这里插入图片描述
现在置换有如下几种方法:

  • 终止用户进程:一旦终止用户进程,进程就会释放内存空间,那么内存就腾出位置来了,这种方法的代价是比较大的;
  • 交换进程:中级调度,释放其所有帧,降低多道程序的度,这种方法的代价也是比较大的,因为是以整个进程为单位,进行的 I/O 操作开销较大;
  • 页面置换:以页为单位做交换,这种方法的开销相比是最小的。

页面置换的执行步骤如下:

  • 找到页面在磁盘中的位置,找到之后便要把它读入内存,就要找到一个空闲的帧;
  • 若有空闲的帧遍可以直接装入,若没有空闲的帧就要选择一个页调换出去,同时修改页表,再把页面装入内存;

页面置换过程如下图所示,❶牺牲当前内存中的某个页, 置换到外存上,❷修改页表标志位,❸将页面置换进内存中,❹更新页表:
在这里插入图片描述
可以发现在页面置换过程中,需要两个页面传输,一个换出,一个换入。但是有时候只需要一次置换就可以,因为有些程序在内存中并没有被修改过,所以它不需要换到外存去更新数据,只用牺牲它,将新调入的程序覆盖它即可,这里用到的方法就是前面提到的修改位。

页面置换的总的流程图如下图所示,图中的快表指的是联想寄存器:
在这里插入图片描述

4 页面置换算法

在进程运行过程中,如果发生缺页, , 而内存中又无空闲块时可以将内存中的某一页换到磁盘的对换区。那么到底选择调出哪一个页,可以根据页面置换算法来确定,置换算法的好坏将直接影响系统的性能,不适当的算法可能会导致进程发生 “抖动” (Thrashing) 。

抖动 (Thrashing):如果进程分配到的帧数量小于计算机体系结构所要求的最小数量,那么必须暂停进行执行。并将其置换出去,使其所有分配帧空闲。这么做的原因就是如果进程没有这些必需的帧,那么很快会出现缺页,此时需置换某个页,然而,其所有页都在使用,置换出去的页立刻又需要置换进来,因此,会不断的产生缺页。这种频繁的调页行为称作抖动 (Thrashing),也叫颠簸。

页面置换最大的问题就是到底换哪一个页,若换出的某个页很快就又要用到又要换进来,这样的效率是很低的,所以我们希望我们换出的页是今后很长一段时间内不再用到的页,这样就能降低系统的缺页率,我们来衡量一个页面置换算法的好坏主要是通过缺页率的大小,从理论上讲 , 应将那些以后不再被访问的页面换出,或把那些在较长时间内不会再被访问的页面换出,在实际的过程中有很多的置换算法能够接近理论目标,为什么说是理论上的,因为我们人是不知道哪些页面是要换的。

我们通过运行一个内存访问的特殊序列(访问序列),计算这个序列的缺页次数来评估算法。这个序列我们假定为 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1,后面讨论算法时都会用到这个序列。

4.1 最佳算法(OPT, optimal)

最佳算法中被置换的页将是之后最长时间不被使用的页,其置换过程如下:
在这里插入图片描述
上述过程的缺页次数是 9 9 9,置换次数是 6 6 6。这个算法的缺点就是在实际过程中,我们并不知道这个内存访问序列,尤其是在多道批处理系统中,更是无法预测,所以最佳算法只是理论上最优的算法,现实中是无法实现的,我们通常用它来衡量其他算法的性能。

4.2 先进先出置换算法(FIFO)

先进先出置换算法中是按照内存先来先得,先进来的先出去这种方式来选择置换的页,其置换过程如下:
在这里插入图片描述
上述过程的缺页次数是 15 15 15,置换次数是 12 12 12。这个算法的性能几乎是比最佳算法差了一倍了,导致性能不好的原因是刚刚换出去的页,很可能又要被换进来,于是增加了缺页率,因此有了下面第三种置换算法。

4.3 最近最久未使用置换算法(LRU)

虽然并不知道页面未来的使用情况,但是可以使用离过去最近的情况作为不远将来的近似,可以选择最近最少使用的页进行置换,其置换过程如下:
在这里插入图片描述
上述过程的缺页次数是 12 12 12,置换次数是 9 9 9。这个算法的性能显然比先进先出置换算法要好,但是实现LRU算法需要硬件支持,记录物理页的使用情况。

但是实际上可能没有足够的硬件支持,所以就有了LRU的近似算法,如基于访问位的算法,二次机会算法。

  • 访问位算法:每个页都与一个位相关联,初始值为0,每当这个页被访问的时候就把这个页置位1,所以在选择置换的页时就可以看这个访问位,看谁是未被访问过的。但是这个算法有不足的地方就在于我们并不知道这个置换顺序,因为有可能有的页时很久都没有使用过的,有的页只是最近未被使用过的,理论上来说很久未被使用的页大概率以后不会再使用了,而最近未使用的页很可能再被使用欧冠。
  • 二次机会算法 (clock算法):同样它也需要访问位的支持,它会把所有的页组成一个环,同样未被访问时,访问位置0,访问位就置1,在要置换时,我们以顺时针的方向遍历这个环来寻找访问位为0的页换出去,若找到访问位为1的页,就把它置位0,代表着给它一次机会,这也是二次机会算法名字的由来。如果所有页的访问位都为1,则此算法退化为FIFO算法。二次机会算法执行过程如下图所示:
    在这里插入图片描述

5 帧(页)分配

前面提到每个进程要运行则必须给它分配一定的内存空间,它才能把需要的内容放到内存去执行,那么如何给进程分配内存空间呢?首先我们要保证给它分配的空间是能够让它正常的运行的,即保证进程正常运行所需的最小物理块数,若系统为某进程所分配的物理块数少于此值时,进程将无法正常运行(频繁发生缺页),这个数目取决于指令的格式、功能和寻址方式。

具体分配多个页,有如下的分配方式:

  • 平均分配:比如有100个页,和5个进程,则每个进程分给20个页;
  • 按比例分配:根据每个进程的大小比例来分配;
  • 优先分配:根据优先级而不是大小来使用比率分配策略。

如果进程 P i P_i Pi​ 产生了一个缺页,我们知道这个时候需要使用页面替换算法来替换一个页面,所替换页面的位置分为如下两种:

  • 全局替换:进程在所有的页中选择一个替换页面;一个进程可以从另一个进程中获得页面;
  • 局部替换:每个进程只从属于它自己的页中选择。

所以当进行全局置换的时候,进程所分配的页数是可以变化的,因为它占用了其他进程的页,因此使用全局置换可能造成其他进程的运行错误;当进行局部置换的时候,进程所分配的页数是固定不变的,因为它只在自己所属的范围内置换。

Python批量注册脚本开发详细 开发一个Python批量注册脚本需要考虑多个方面,包括目标网站的注册流程、验证码处理、请求发送、数据存储等。以下是一个详细的开发流程和代码示例,用于实现基本的批量注册功能。 阅读详情

相关推荐

图像评价之计算PSNR、SSIM、MSE、LPIPS和NIQE评价指标

如果代码对你的研究有所帮助,请为该仓库点上小星星。

书山有路,学海无涯! 2645

操作系统的局部性原理

局部性原理:一个良好的计算机程序 常常具有良好的局部性,也就是说,它们倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。 局部性的两种不同的形式:时间局部性和空间局部性 时间局部性 时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。强调数据的重复访问。   利用时间局部性,缓存在现代程序系统中扮演...

菜鸡工坊 6037

PADS VX2.7学习记录05-PADS Layout设计文件Gerber等输出整理

在“PDF Document”栏中,依次选中除REF-TOP和REF-BOT之外的文件,单击图标,将其余PDF Document文件进行删除,如图所示。然后单击【生成PDF】按钮,即可创建一份PDF格式的位号图。

tianpu2320959696的博客 1025

内存管理两部曲之物理内存管理

内存管理总览领券网 https://www.cps3.cn/ 先笼统地总结下内存管理到底是干啥的,下面这段话摘自《现代操作系统 - 第 3 版》: 内存管理的任务就是有效地管理内存,即记录哪些内存是正确使用的,哪些内存是空闲的,在进程需要时为其分配内存,在进程使用完后释放内存。 众所周知,当前计算机都是基于冯·偌依曼存储程序式的计算机,程序和数据在运行和使用时都需要存放在内存中。 设计操作系统的重要目标之一就是提高计算机资源的利用率,而随着多核 CPU 的盛行,多道程序设计技术大行其道。因此,必须合.

weixin_48967543的博客 237

Arnold Denoise流程

参考:https://support.solidangle.com/display/ARP/Removing+Noise+Workflow Arnold生来不是一个以单帧渲染速度见长的渲染器,但这并不能作为一个简单场景渲染时间长达几个小时的借口。 个人认为高品质生产级渲染结果中,Unbiased renderer在渲染时最耗计算时间的其实就是降噪,以至于降噪专门成了一门灯光师必备的技术

机器猫的CG空间 5084

中国裁判文书网案例批量爬取

本文介绍了某法院网站数据采集的技术研究过程,主要包含JS逆向分析和数据解密方法。通过开发者工具分析发现页面数据经过加密处理,重点研究了ciphertext等加密参数的生成逻辑。文章详细记录了定位加密函数、扣取加密代码、解密数据处理的全流程,并验证了解密方法的有效性。研究过程中强调了技术使用的法律边界,明确声明仅用于合法技术研究,禁止任何非法数据爬取行为。最终实现了加密数据的成功解密,并解释了各请求参数的作用,为后续数据清洗和存储奠定了基础。

2303_80825459的博客 816

《计算机操作系统》——5. 虚拟存储器

从逻辑上实现对内存容量的扩充 5.1 虚拟存储器概述 作业很大,要求的内存空间>内存总容量 ⇒ 作业无法全部被装载 ⇒ 作业无法运行 大量作业运行 ⇒ 内存空间>内存总容量 ⇒ 将少数作业装入内存先运行 ⇒ 其他大量的作业留在外存上存储 5.1.1 常规存储管理方式的特征和局部性原理 1. 特征 一次性 驻留性 2. 局部性原理 时间局限性:某指令可能再次执行(循环) 空间局限性:一段时间内访问的地址集中在一定范围内 3. 虚拟存储器的基本工作情况 部分装入,请求调入,置换功能 (运行

weixin_45012798的博客 2443

cadence——MOS晶体管I-V特性曲线仿真

MOS晶体管I-V特性曲线仿真 目标:使用cadence绘制晶体管的I-V特性曲线(dc仿真) 流程: 新建原理图,将MOS管的栅极电压设为变量Vg,漏极电压设为变量Vd 打开ADEL,点击Variables——Copy From Cellview添加变量;并选择dc仿真,对Vd进行扫描 以Vg作为参变量进行仿真,点击Tools——Parametric Analysis进行设置 选择漏极电流作为输出,进行仿真即可得到I-V特性曲线 ...

skycmq的博客 1万+

大话局部性原理

局部性原理在计算机科学多领域的具体体现以及优化程序的策略

qq_53162179的博客 4696

Arduino智能小灯DIY:人体感应+光线感应+蓝牙控制全攻略(附完整代码)

本文提供了一份完整的Arduino智能小灯DIY制作指南。项目融合了人体感应、光线感应与蓝牙控制三大功能,通过详细的硬件清单、电路连接图、核心逻辑讲解及附带的完整代码,手把手教你打造一个能自动感知环境与人、并支持手机远程控制的智能照明装置,是入门智能家居和物联网开发的绝佳实践。

java5的博客 1094

一、两电平IGBT整流器

电压源换流器(Voltage source converter,VSC)连接交流主网和直流电网,起到交直流网络连接、功率输送和电能变换的作用。采用电压控制手段可维持直流电压的稳定;或采用功率控制手段保证系统功率输出达到预期。VSC的三相电压平衡方程如式(1)所示:式中,igx和ugx分别表示主网三相电流与电压(x=a,b,c);ucx表示换流器VSC 交流输出电压;Rg表示交流主网等效电阻;Lg表示交流主网等效电感。

TUCHACHINA的博客 4159

操作系统基础(十一)局部性原理

  什么是 局部性 ?这是一个常用的计算机术语,是指处理器在访问某些数据时短时间内存在重复访问,某些数据或者位置访问的概率极大,大多数时间只访问局部的数据。   基于局部性原理,计算机处理器在设计时做了各种优化,比如现代CPU的多级Cache、分支预测…… 有良好局部性的程序比局部性差的程序运行得更快。虽然局部性一词源于计算机设计,但在当今分布式系统、互联网技术里也不乏局部性,比如像用redis这种memcache来减轻后端的压力,CDN做素材分发减少带宽占用率……   局部性原理表现在以下两个方面: 时

jinyangjie的博客 3571

算法 | 基于MATLAB的增量式SVD技术综述:实现方法、代码示例与应用实践

效率提升:较传统SVD降低计算复杂度从On3O(n^3)On3至On2O(n^2)On2实时性:支持毫秒级动态数据更新资源友好:内存占用降低60%-80%[5]

尘世冰封的专栏 486

操作系统原理第九章 虚拟内存

本科生操作系统原理学习记录 学习记录全家桶 第九章 虚拟内存9.1 虚拟内存技术写时复制 Copy-on-Write9.2 虚拟内存的实现请求分页缺页中断缺页中断的处理过程(期末考试)内中断,软中断请求分页的性能(期末考试)9.3 页面置换页面置换算法FIFO先进先出算法OPT最优置换算法LRU最近最少使用算法二次机会算法9.4 系统颠簸9.4.1 页框分配9.4.2 颠簸9.5 内核内存分配伙伴系统9.6 其他因素9.6.1 预调页9.6.2 页面尺寸选择9.6.3 TLB范围 代码必须转入内存才能运行

weixin_45788387的博客 692

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

CSAPP:第九章 虚拟内存

CSAPP:第九章 虚拟内存 关键点:虚拟内存、物理内存 9.1 物理地址和虚拟地址9.2 地址空间9.3 虚拟内存作为缓存的公工具 9.1 物理地址和虚拟地址   计算机的主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址(PA)。第一个地址为0,接下来为1,再接下来为2,依次类推。CPU访问内存的最自然方式就是使用物理地址。我们把这种方式称...

weixin_30732487的博客 291

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

第9章现代操作系统虚拟内存技术:原理、实现与优化策略

现代操作系统虚拟内存技术摘要 本章深入探讨了现代计算机系统中的虚拟内存技术,从硬件基础到操作系统实现。虚拟内存通过创建统一的地址空间抽象,实现了程序逻辑地址与物理内存地址的分离,为应用程序提供了看似无限的连续地址空间。 核心内容: 硬件基础与控制架构 基于内存访问的时间局部性和空间局部性原理 分页系统实现(固定大小页/页帧映射) 分段系统原理(逻辑段管理) 段页式内存管理(结合分段和分页优势) 内存保护与共享机制 操作系统虚拟内存管理 页面调度策略(请求调页/预取调页) 页面置换算法(FIFO、LRU、时钟

小宝哥Code的专栏 873

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【操作系统概念】 第9章:虚拟内存管理

第8章讨论了计算机系统的各种内存管理策略。所有这些策略都有相同的目标:同时将多个进程保存在内存中,以便允许多道程序。然而,这些策略都倾向于要求每个进程再执行之前应完全处于内存中。虚拟内存技术允许执行进程不必完全处于内存。这种方案的一个主要优点是,程序可以大于物理内存。此外,虚拟内存将内存抽象成一个巨大的、统一的存储数组,进而实现了用户看到的逻辑内存与物理内存的分离。这种技术使得程序员不在担忧内存容量的限制。虚拟内存还允许进程轻松共享文件和实现共享内存。此外,他为创建进程提供了有效的机制。

zzzzzyliu的博客 1210

操作系统概念(高等教育出版社,第七版)复习——第九章:虚拟内存

第九章 虚拟内存 局部性原理 时间局部性: 如果程序的某条指令一旦执行,则不久后该指令可能再次执行(e.g. 循环结构)。 如果某个数据结构被访问,则不久以后该数据结构可能再次被访问;(e.g. 数组+循环结构)。 空间局部性: 一旦程序访问了某个存储单元,不久之后,其附近的存储单元也被访问(顺序性)(数组、循环)。 虚拟存储器 虚拟存储器指的是仅把作业的一部分装入内存便可运行作业

我的博客 1060

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

虚拟内存背景按需调页基本概念按需调页的性能写时拷贝页面置换基本页置换FIFO页置换最优置换(OPT或MIN)LRU页置换(最近最少使用) 背景 研究发现在很多情况下并不需要将整个程序放到内存中。 程序通常有处理异常错误条件的代码,由于这些错误很少发生,所以这些代码几乎不执行。 数组、链表和表通常分配了比实际所需要的更多的内存。 程序的某些选项或功能可能很少使用。 虚拟内存(virtual memory)将用户逻辑内存和物理内存分开。这在现有物理内存有限的情况下,为程序员提供了巨大的虚拟内存。 除了将逻

人间烟火的博客 731

第九章 虚拟内存

虚拟内存:只需要将正在运行的程序的一部分加载到内存中进行执行虚拟内存将用户的逻辑内存与物理内存分开逻辑(或虚拟)地址空间可以大于物理地址空间允许由多个进程共享物理地址空间实现更快的进程创建fork()怎么样?虚拟内存可以通过以下方式实现: Demand paging (请求调页,按需调页,请求页式管理) Demand segmentation(请求段式管理)

weixin_53254469的博客 561

[csapp] 第九章 虚拟内存

为了更有效的管理内存并且少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟内存(VM)。虚拟内存提供了三个重要的能力:1.将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保留活动区域,并根据需要在磁盘和主存间来回传送数据。2.为每个进程提供了一致的地址空间,从而简化内存管理。3.它保护了每个进程的地址空间不被其他进程破坏。这一章从两个角度来看虚拟内存。前一部分描述虚拟内存是如何工作的,后一部分描述的是应用程序如何使用和管理虚拟内存。

m0_51460756的博客 531

《操作系统精髓与设计原理》学习笔记

文章目录置顶第一章:计算机系统概述1. 基本构成2. 指令分类3. 中断中断的分类多个中断4. 内存层次板上存储器板外存储器离线存储器5. 高速缓存6. 多处理器和多核多处理器多核二者区别第二章:操作系统概述1. Linux主要内核组件2. Windows和Android先不整理,以后需要再学第三章:进程1. 进程介绍进程的两个基本元素进程控制块(PCB)2. 进程状态经典5状态挂起态3. 操作系...

LvPartner的博客 3708

《深入理解计算机系统》第九章——虚拟内存

虚拟内存一、物理和虚拟寻址二、地址空间三、虚拟内存作为缓存的工具四、虚拟内存作为内存管理的工具五、虚拟内存作为内存保护的工具六、地址翻译七、Linux 内存系统八、内存映射九、动态内存分配十、垃圾收集十一、C程序中常见的与内存有关的错误 一、物理和虚拟寻址 二、地址空间 三、虚拟内存作为缓存的工具 四、虚拟内存作为内存管理的工具 五、虚拟内存作为内存保护的工具 六、地址翻译 七、Linux 内存系统 八、内存映射 九、动态内存分配 十、垃圾收集 十一、C程序中常见的与内存有关的错误 ...........

yelvens的博客 2443

第九章 虚拟内存管理

思维导图 虚拟内存 背景: 解决的办法: 常规存储器的特征 一次性和驻留性是必要的吗? 局部性原理(locality of reference) 出现局部性规律的原因: 局部性表现为: ...

weixin_30904593的博客 181

为什么都说虚拟内存了保护内存?

同时,由于虚拟地址的存在,应用程序无需关心物理内存的具体位置和大小,从而降低了编程的复杂性和出错的可能性。每个进程都认为自己是在独占使用整个系统的存储资源,但实际上这些地址空间是虚拟的,并且被操作系统管理以确保各个进程之间的隔离。:虚拟内存通过设置内存的访问权限,解决了内存的安全访问问题。这种机制不仅提高了内存的使用效率,也通过减少对物理内存的直接访问来降低对物理内存的损耗和破坏。每个进程运行在自己的虚拟内存地址空间中,互不干扰,从而实现了进程的隔离和内存的保护。

catchmewhenifall的博客 1151

深入理解计算机系统-第九章:虚拟内存(上)

深入理解计算机系统-第九章:虚拟内存(上) ​ 早期的计算机系统直接通过物理地址在内存中寻找到对应数据。 ​ 现代处理器使用虚拟寻址的形式,CPU通过虚拟地址来访问主存,这个虚拟地址会被先转换成适当的物理地址。地址的翻译是CPU硬件和操作系统合作完成的。 ​ VM系统将虚拟内存分割成虚拟页,对应的物理内存分割为物理页。 ​ 虚拟页面的集合分为下列三个不相交子集 未分配页 已经缓存在物理内存的页的页 已经分配但是还没有缓存在物理内存的页 通过虚拟内存寻址 ​ 我们需要一个方法来判定一个虚拟页是否被缓存在

qq_44774850的博客 359
上一篇: 操作系统原理第八章:内存管理
下一篇: 操作系统原理第十章:文件系统
syzdev
博客等级 码龄9年 852粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值