【操作系统】第五章——虚拟内存技术

一、起因

🌏 1、为什么提出虚拟内存的概念?

程序规模的增长远大于存储器容量的增长速度,为了让更多的程序跑在优先的内存里。
请添加图片描述
🌏 2、我们知道硬盘的容量很大,那么能不能把硬盘的容量用上呢?

将不常用的数据放到硬盘里,常用的代码、数据放到内存中,通过这种方式来实现一种虚拟内存的感觉。

需要CPUMMU(内存管理单元)、操作系统内核协同在一起才能完成。

请添加图片描述
但是受内存的性质影响,不能满足掉电之后还能保存数据。

🌏 3、在计算机系统中,尤其是在多道程序运行的环境下,可能还会出现内存不够用的情况,怎么办呢?

(1)手动覆盖技术:

程序员自己编写相应的功能,同时需要编程语言的支持,把常用的代码放到内存中来,不常用的放到硬盘上去,这种成为覆盖技术。【可以在很小的内存下跑一些比较大的软件】

(2)自动交换技术:

把当时不在运行的程序暂时从内存中换到硬盘中去,把当前的内存空出来,使当前运行的程序有更大的内存去使用。

整个过程由操作系统来完成,但是以为每次要导出整个程序,当应用这个程序时,还要把整个程序导回来,如果程序的占用的空间比较大,那么代价也是比较大的。

(3)虚拟内存技术

把程序中的一部分数据来进行导入和导出,这就是我们所要研究的虚拟内存技术。

基于分段、分页这种硬件支持的技术,加上操作系统的管理就可以实现这种虚拟内存的技术。就可以以页为粒度或以段为粒度来进入导入导出,从而更有效的使用有限的物理空间。


二、覆盖技术

🌊 1、覆盖技术有什么意义?

在多道管理程序系统中,覆盖技术与分区存储管理相配合,可以在较小的内存中运行较大的程序。【这个较小和较大是相对于早些年的电脑内存而言】

🌊 2、覆盖技术实现的原理是什么?

首先程序员要根据程序自身的逻辑结构,将其划分为若干功能上相对独立的程序模块

(1)必要部分(常用功能)的代码和数据常驻内存

一定要有一块常驻内存的代码和数据,它负责决定在某个时间段把相应的函数、数据导入或导出内存

(2)可选部分(不常用的功能)在其他程序模块中实现,平时放在外存中,在需要的时候才会装入内存

  • 那么如何体现出覆盖呢?

不存在调用关系的模块不必同时装入内存,根据指定的覆盖规则其中某些模块共享一个分区,可以相互覆盖。

🌊 3、我们可以通过案例来分析这个过程
请添加图片描述
(1)左侧是五个程序的内存占用和调用关系情况,右侧是指定的覆盖规则

(2)A是常用程序,通过A来调用其他程序,所以它常驻内存

(3)对于B和C属于不存在调用关系的模块,它俩共享一块分区,分区的大小是使用这个分区的程序的最大空间决定的。【D E F 同理】

(4)当A调用B程序,就会将B程序从硬盘加载到内存中(此处为覆盖区0),如果A又要调用C程序,首先要对B中的数据导入到硬盘中(代码是只读的,其占用的空间直接释放就行),然后将C模块从硬盘加载到这个分区即可,此时A就可以调用C了。【A先调用B再调用C的流程

(5)可以采用不同的覆盖规则,只要满足所属一块分区的模块没有调用关系即可。

在这里插入图片描述
采用这种覆盖方式,相对于这个程序会更节省空间

  • 总结:

在串行的过程中,调用谁就将谁加载到内存中,逻辑上他们共享一个空间,但是实际上只是使用这个空间的时间不同。

🌊 4、那么覆盖技术有缺点吗?

(1)由程序员来把一个大的程序划分为若干个小的功能模块,并确定各 个模块之间的覆盖关系,费时费力,增加了编程的复杂度。
在这里插入图片描述

(2)覆盖模块从外存装入内存,实际上是以时间延长来换取空间节省。


三、交换技术

☀️ 1、交换技术的目标是什么?

多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源

☀️ 2、交换技术实现的原理是什么?

(1)可以将暂时不能运行的程序运送到外存,从而获得空闲内存空间【当有需要的时候】

(2)主要涉及换出、换入两个操作,属于内存管理的一个重要组成部分

换出: 操作系统把一个进程的完整地址空间的内容保存到外存中
换入:将外存中某个进程的地址空间读取到内存中

(3)这是早起Unix操作系统采用的一种技术,以整个应用程序为最小交换单位,但是程序比较大也就导致了开销比较大【交换的过程也比较慢,要尽量减少换入、换出的次数】
请添加图片描述
☀️ 3、交换技术在实现的时候也存在一些问题

(1)什么时候需要发生交换?

只当内存空间不够或有不够的危险时换出

(2)对于外存中用作交换区的大小有什么要求?

这个交换区要足够大要满足存放所有用户进程的所有内存映像的拷贝

(3)程序换入的时候可能原来的地址空间已经被占用了,那么如何保证程序在新位置正常运行呢?

采用一种动态地址映射的方法,通过一种页表记录虚拟地址和物理地址的映射,虚拟地址是不变的,物理地址改变仍然可以保证程序正常执行。

☀️ 4、覆盖技术与交换技术的对比

两者之间从粒度大小和实现方式方面都有很大的区别。

  • 覆盖:

覆盖只能发生在那些相互之间没有调用关系的程序模块之间, 因此程序员必须给出程序内的各个模块之间的逻辑覆盖结构。

  • 交换:

交换技术是以在内存中的程序大小为单位来进行的,它不需要 程序员给出各个模块之间的逻辑覆盖结构。换言之,交换发生 在内存中程序与管理程序或操作系统之间,而覆盖则发生在运 行程序的内部。


四、虚存技术

🌔 1、虚存技术的目标是什么?【前提:程序要具有局部性】

操作系统将不常用的部分内存暂存到外存,将要处理器访问的数据从外存装入内存 【虚拟内存 = 内存 + 外存】

在这里插入图片描述
🌔 2、什么是程序的局部性呢?

  • 总体来说就是程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限与一定区域

  • 如果具体一点,可以分为一下三个角度而言

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

🌔 3、虚拟存储有哪些特征?

(1)不连续性 >> 物理内存分配不连续、虚拟地址空间使用不连续
(2)大用户空间 >> 提供给用户的虚拟内存可大于实际的物理内存
(3)部分交换 >> 虚拟内存只对部分虚拟地址空间进行调入和调出

  • 完成这些需要软件和硬件的支持:
    • 硬件(MMU/TLB/Page Table): 页式或段式存储中的硬件地址转换机制、硬件异常
    • 软件(OS):内存中建立页表或段表、管理内存和外存页面或段的换入和换出

🌔 4、虚拟页式存储管理是怎么实现的呢?

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

  • 请求调页(按需分页):在处理器需要访问某数据时,才把数据从外存调入内存
  • 页面置换:把不常用页换出,要使用的页换入

在这里插入图片描述

(2)实现思路:

  • 装载用户程序的一部分到内存中,保证程序运行
  • 当用户程序在运行中发现有需要的代码或数据不存在内存时,则向系统发出缺页异常请求
  • 操作系统在处理缺页异常时,将外存中相应的页面调入内存,使得用户程序能继续运行
  • 当内存快用完时,操作系统把部分页从内存调出到外存

🌔 5、缺页异常是如何进程处理的呢?

(1)CPU读内存单元,在TLB中根据其虚拟地址匹配物理地址,未命中,去读页表【未命中>>因为现在是内存中没有需要数据的情况】
(2)犹豫页表项的存在位为0,CPU产生PageFault异常【页表项】
请添加图片描述

(3)操作系统来处理此异常,查找到保存在外存中对应的应用的页面内容
(4)根据有无空闲物理页帧,也分为两种情况:

  • 有,则把外存中的页面内容换入到某空闲物理页帧中
  • 没有,则通过置换算法释放/换出某些物理页帧到外存,再把外存中的页面内容换入到某空闲物理页帧中

(5)修改页表项,建立虚拟页到物理页帧的映射,存在位置(页表项那块)修改为1
(6)操作系统返回到应用程序,让处理器重新执行Page Fault 异常的读内存单元指令

🌔 6、采用虚拟存储技术对于外存是如何管理的呢?【应能方便地找到在外存中的页面内容】

  • 交换空间(磁盘/文件形态):采用特殊格式存储未被映射的页面

    • 磁盘分区:一般是扇区地址
    • 在存在位为0的页表项中保存外存的页地址
  • 磁盘上的文件(代码或数据)

    • 地址空间中的逻辑段表示中有对应的文件位置 如:MemorySet::MapArea

    • 代码段:可执行二进制文件

    • 动态加载的共享库程序段:动态调用的库文件

🌔 7、虚拟存储技术的性能:

有效存储访问时间 = 内存访问时间 * (1 - p) + 磁盘访问时间 * p (1 +q)

  • p为缺页率、q为回写该类
  • 内存访问见识:10ns,磁盘访问时间:5ms
  • EAT = 10(1 - p) + 5000000p(1 + q)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bow.贾斯汀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值