【操作系统-chapter3】内存管理

导读:本篇文章讲解 【操作系统-chapter3】内存管理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

文章目录

1. 内存管理的基本概念

1.1 程序从编写到运行

程序编写到运行要经历四个步骤:编写、编译、链接、装入
在这里插入图片描述

1.1.1 三种链接

在这里插入图片描述

1.1.2 三种装入

* 装入:指将模块加载到内存。
	* 分类:(地址映射的时间和方式不同,导致模块装入的方式不同,主要要如下三类)
		1. 绝对装入/静态装入   (单道程序处理阶段)
			* 预先知道程序放在内存某个固定的位置A,则在编译时,就将逻辑地址转为物理地址,装入的时直接将程序放到A处。
		2. 静态重定位装入,又叫可重定向装入   (批处理操作系统)
			* 根据算法策略装入到内存某个位置,在装入时将逻辑地址转为物理地址。若没有足够空间,则放弃;一但作业加载到内存,则整个运行期间
			  就不能在内存中移动,也不能再申请内存空间。
		3. 动态重定位态装入,又叫运行时装入       (现在操作系统) 
			* 作业运行过程中执行到一条访存指令时,需要动态申请分配内存,再将其逻辑地址转为物理地址,由硬件实现。
			* 注意:具体动态重定位是在程序运行期间发生,而不是装入时发生。

在这里插入图片描述
在这里插入图片描述

注意:由于可重定位装入使得程序在运行期间不允许移动,所以可以结合固定分区分配使用。
在这里插入图片描述

注意:重定位寄存器又叫基址寄存器。便于程序在内存中浮动。想详细了解见计算机组成原理第4章,基址寻址。

1.1.3 小结

在这里插入图片描述

1.2 内存管理的概念

在这里插入图片描述
接下来,1.31.41.51.6将分别解决这四个问题。

1.3 内存空间的分配与回收

  • 内存空间的分配与回收
    1. 连续分配:进程一次全部装入内存。为用户进程分配的必须是一个连续的内存空间
    2. 非连续分配:进程的一部分装入内存。为用户进程分配的可以是一些分散的内存空间

1.3.1 连续分配管理方式

1.3.1.1 单一连续分配

在这里插入图片描述

注意:内存分为系统区和用户区,所谓的内存空间分配与回收针对的是用户区。一般系统区在内存的低地址部分,存放与操作系统相关数据;用户区由于存放用户进程相关数据。

1.3.1.2 固定分区分配

在这里插入图片描述
在这里插入图片描述

1.3.1.3 动态分区分配

在这里插入图片描述

注意:动态分区分配可能有外部碎片,外部碎片多可以通过紧凑技术将外部碎片合并。

1.3.1.3.1 使用的数据结构

在这里插入图片描述

1.3.1.3.2 分区的选择(首次、最佳、最坏、邻近适应算法)
* 有如下四种分配算法
	1. 首次适应算法(Fist Fit)
		* 从`低地址`开始查找,找到第一个满足大小的空闲分区。
		* 缺点:低地址会留下很多外部碎片。
		* 优点:实现简单,算法开销小
	2. 最佳适应算法(Best Fit)
		* 空闲分区`按容量递增排序`, 顺序查找,找到第一个大小能满足要求的空闲分区。
		* 缺点:会产生很多外部碎片,算法开销大
		* 优点:有更多的大分区,更能满足大进程需求
	3. 最坏适应算法(Worst Fit)
		* 与最佳适应算法相反。空闲分区`按容量递减排序` ,顺序查找,找到第一个大小能满足要求的空闲分区。
		* 优点:解决了最佳适应算法的缺点,能够减少外部碎片的产生。
		* 缺点:当“大进程”到来时,容易没有足够的空间分配给它。
	4. 邻近适应算法(Next Fit)
		* 和首次适应算法很像,都是从低地址开始查找,但是每次是从上次结束的位置开始查找。【可排成一个循环链表】
		* 优点:算法开销小
		* 缺点:当“大进程”到来时,容易没有足够的空间分配给它。

	* 注意:综合来看,首次适应算法反而最好。

注意:以上的算法不只是适用于动态分区分配,也适用于固定分区分配和单一连续分配。

1.3.1.3.3 如何进行分区的分配与回收

为进程分配空间(以空闲分配表为例子):
在这里插入图片描述
进程空间的回收:
在这里插入图片描述

1.3.1.4 小结

在这里插入图片描述

1.3.2 非连续分配管理方式

1.3.2.1 分页式存储管理

页式存储:将内存空间分成一个个大小相等的块,每个块被称为“页框=页帧=内存块=物理块=物理页面”。每一个页框都有一个编号,即“页框号”,从0开始。

进程也会分为与页框相等的一个个块,叫做“页面”,每个“页面”都有一个编号,叫做“页面号”,从0开始。

操作系统以页框为单位为各个进程分配内存空间,进程的页面被放到一个页框中【可以连续也可以离散】

注意:最后一个页面可能小于页框的大小,会造成内部碎片。

在这里插入图片描述

1.3.2.1.1 分页式存储的待解决的两个问题(页表项长度和地址转换)

在这里插入图片描述

注意:

  1. 页表项长度:指一个页表项占多大空间
  2. 页表长度:指页表中有多少个页表项
  3. 页面大小:指一个页面占多大空间。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:

  1. 判断是否越界是是<,没有等于,因为下标从0开始。
  2. 记住页表寄存器,里面有页表在内存中的起始地址页表长度两个部分。当进程被调入内存时,进程的PCB会将页表的信息复制给页表寄存器。
  3. 页式管理中地址是一维的,即只需要知道逻辑地址就可以得到物理地址。
  4. 页表一般是放在连续的内存块中。故一般要对页表分级。
  5. 注意一定要判断页号是否合法
  6. 以上两次访问了内存。

在这里插入图片描述

1.3.2.1.2 快表

快表:又称联想寄存器(TLB),TLB不是在内存中,它是一个高速缓存,由硬件管理,所以访问快表比访问页表要快很多。

注意:TLB不是Cache,因为Cache中可能会有其他各种数据的副本,而TLB中只有部分页表项的副本。

快表功能:用来存放最近访问的页表项的副本,加速地址转换的速度。

在这里插入图片描述

注意: 如果快表命中,则这次地址转换只需要访问1次内存。

在这里插入图片描述
由于程序的局部性原理,快表的命中率一般都很高。

1.3.2.1.3 两级页表
1.3.2.1.3.1 单级页表的两个问题

在这里插入图片描述

1.3.2.1.3.2 两级页表的原理

首先,解决页表过长的问题:
在这里插入图片描述
可以看到,如果只使用一级页表,该页表需要连续的占用内存的2^10个页框,非常的占内存。要是每个页表只占一个页框的大小就好了,其实这可以通过多级页表实现。

上面的那个例子,有20位作为页号,每个页框只能存放2^10个页表项,则可以采用二级目录。
在这里插入图片描述
接下来,我们讨论第二个问题:并不需要让整个页面常驻内存。

解决方法是,我们对每级页表加一个标志字段,标志其对应的内存块号中的数据是否被调入内存。如果已经在内存中,则直接使用;如果不在内存中,就需要引发缺页中断,让OS进入内核态进行管理,将我们需要的数据赶紧装入内存。
在这里插入图片描述

1.3.2.1.3.3 典型例题

在这里插入图片描述

注意:

  1. n级页表,访问内存次数是n+1次。
  2. 注意页表的划分是根据逻辑地址而不是物理地址。如果题目说系统为32为实地址,48为虚地址,则应该用48去看分为几级页表。
1.3.2.1.3 小结

在这里插入图片描述
在这里插入图片描述

1.3.2.2 分段式存储管理

1.3.2.2.1 什么是分段(类似于分页)

分段式存储:以段为单位进行分配,每个段在内存中占连续空间,但各段之间可以不相邻。
在这里插入图片描述

1.3.2.2.2 什么是段表(类似于页表)

在这里插入图片描述

1.3.2.2.3 如何实现地址转换

在这里插入图片描述

注意:以上两次检查出现异常都叫越界中断

1.3.2.2.4 分段、分页管理的对比

在这里插入图片描述

1.3.2.2.5 小结

在这里插入图片描述

1.3.2.3 段页式存储管理

1.3.2.3.1 分页分段管理的最大优缺点

在这里插入图片描述

1.3.2.3.2 段页式管理(进程先分段再分块)

在这里插入图片描述

注意:段页式的地址结构是二维的。

1.3.2.3.3 段表、页表

在这里插入图片描述

注意:

  1. 一个进程对应一个段表,每个段表项对应一个页表,所以,一个进程对应多个页表。
  2. 段页式的段表与段式的段表字段不同。前者是段号、页表长度、页表存放块号,后者是段号、段长、段基址
  3. 段页式的页表与页式的页表字段相同,都是页号、内存块号
1.3.2.3.4 地址转换

在这里插入图片描述

1.3.2.3.5 小结

在这里插入图片描述

1.4 内存空间的扩展(逻辑空间的扩展)

1.4.1 覆盖技术

在这里插入图片描述
在这里插入图片描述

注意:覆盖技术是只对同一个进程的不同程序段进行覆盖。

1.4.2 交换技术

其实,交换技术我们并不陌生,在第二章的进程调度中,我们学过中级调度,而中级调度的实现主要使用了交换技术【中级调度主要采用了交换技术,事实上,中级调度需要做的事情要多】。
交换技术:内存空间紧张时,OS将内存中的某些进程暂时换出到外存,把外存中就绪挂起的进程换入内存。
在这里插入图片描述

1.4.3 虚拟存储技术

2

1.4.4 小结

在这里插入图片描述

1.5 地址转换

地址转换的不同,导致了模块的装入方式不同。

* 三种情况
	1. 绝对方式或静态方式     (单道程序处理阶段)
	2. 静态重定位方式   (批处理操作系统)
	3. 动态重定位方式   (现在操作系统)

1.6 内存保护

内存中有很多进程,还有操作系统内核进程。其他进程不能访问操作系统内核进程的数据,进程间也不能直接访问对方的内存数据。要达到这样的目的,我们必须对内存进行保护。主要有两种方法:

  1. 设置一对上下界寄存器
  2. 设置重定位寄存器和界地址寄存器

在这里插入图片描述

1.7 小结

在这里插入图片描述
在这里插入图片描述

2. 虚拟存储技术

2.1 虚拟内存的基本概念

2.1.1 传统存储管理的缺点

在这里插入图片描述

2.1.2 虚拟技术可行性依据-程序的局部性原理

  1. 时间局部性原理:正在执行的指令,等会还可能用到。
  2. 空间局部性原理:正在执行的指令的周围指令,等会可能用到。

2.1.3 虚拟内存的定义和特征

在这里插入图片描述

2.1.4 虚拟技术的实现

虚拟内存技术中,允许一个作业多次调入内存。如果使用连续分配方式,会很不方便。因此,虚拟内存的实现需要建立在非连续分配的内存管理基础之上。

  • 虚拟内存的实现
    1. 请求分页存储管理
    2. 请求段式存储管理
    3. 请求段页式存储管理

虚拟技术面临两个大的问题:

  1. 请求调页/段功能:当访问信息不在内存时,OS如何将所需信息从外存调入到内存。
  2. 页面置换/段置换:若内存空间不够,OS通过如何将暂时不用的信息换出到外存。

2.1.5 小结

在这里插入图片描述

2.2 请求分页管理方式

2.2.1 页表机制

在这里插入图片描述

2.2.2 缺页中断机制

在这里插入图片描述

注意:

  1. 缺页中断是在访问目标页面却未调入内存而产生的,因此属于内中断中的故障【可以挽救】。
  2. 一条指令期间可能产生多次缺页中断。比如copy A to B

2.2.3 地址变换机制

在这里插入图片描述
在这里插入图片描述

注意:快表中有的页表项,其一定在内存中。删除页表项时,会同时删除快表中对应的项。

小结:
在这里插入图片描述

2.2.4 页面置换算法

算法目标:追求更少的缺页率。

发生缺页中断未必发生页面置换,比如,刚开始的时候的缺页就不需要页面置换。

2.2.4.1 最佳页面置换算法(OPT)

在这里插入图片描述

注意:OPT算法需要预先知道页面的接下来访问的是那个页面,实际上这是不可能实现的,所以OPT算法是无法实现的。

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

在这里插入图片描述

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

在这里插入图片描述

2.2.4.4 时钟置换算法(CLOCK)

在这里插入图片描述

注意:当访问位全为1时,会经过两轮扫描。

在这里插入图片描述

注意:最多会经过四轮扫描。

2.2.4.5 小结

在这里插入图片描述

注意:

  1. 在页面置换算法中,所有算法都可能导致抖动。
  2. 只有FIFO算法会产生Belady异常。(Belady异常:所分配的物理块数增大,但是缺页故障数不减反而增加的异常。)

2.3 页面分配策略

2.3.1 驻留集

驻留集:指请求分页存储管理中给进程分配的物理块的集合。

2.3.2 页面分配、置换策略

* 页面分配、置换策略
	1. 固定分配局部替换
	2. 可边分区全局替换
	3. 可边分区局部替换

在这里插入图片描述

2.3.3 调入页面的时机

在这里插入图片描述

2.3.4 从何处调页

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.3.5 “抖动”现象

抖动:刚刚换出的页面马上要换入内存,刚刚换入的页面马上又要换出,这种频繁的页面调度行为叫做“抖动”。

发生抖动的原因:OS分配给进程的物理块不够,即页面替换算法不合理。但是,所用的页面替换算法都有可能导致”抖动“

所以,解决抖动的方法就是分配给进程更多的内存块。可以增加内存容量,或者撤销部分进程;与CPU速度、用户优先级、磁盘等非内存没关系。

2.3.6 工作集

在这里插入图片描述
工作集的求法:
在这里插入图片描述

2.3.7 小结

在这里插入图片描述

3. 补充

1. “基址”都是起始地址的意思。比如:段基址表示段式存储中某段的起始地址。
	”重定位“指将作业的逻辑地址转为内存中的物理地址。
	“页面失效“、”页故障“都是指的”发生缺页“

2. 判断:在虚拟系统中,只有磁盘空间够大,作业就能有任意大的编址空间。
	错。编址空间的大小取决于硬件的访存能,一般由地址总线宽度决定。

3. 判断:实现虚拟内存管理必须有相应硬件的支持。
	正确。实际上不只是需要硬件的支持,还需要相关软件的支持。

4. 在使用交换技术时,若一个进程正在( ),则不能交换出主存。
	A. 创建	B.I/O操作		C.处于临界段		D.死锁。
	选B。处于创建态的进程可以调度到就绪挂起;只要不是内核级的临界区都可以发生挂起;死锁的解除三个方法中,剥夺资源就是挂起。
	I/O操作时不能,因为I/O数据将被新的进程占用,导致错误。

5. 判断:内存保护需要OS和硬件合作完成。
	正确。虽然内存管理是OS的事情,但是出于安全性和效率的角度,必须由硬件实现,OS协作完成。

6. 覆盖数据应用于“单一连续分配”和“固定分区分配”。其他的不选。

7. 判断:动态重定位是在作业的( )中进行的。
	A装入过程。		B.执行过程
	选B。

8. 下面的存储管理方案中,( )方式可以采用静态重定位。
	A. 固定分区分配		B. 可变分区分配		C.页式		D.段式
	选A。静态重定位指的是程序放入内存后位置不再改变,满足条件的是A。

9. 段式存储更任意按照逻辑模块实现信息的共享和保护。而这是页式的缺点。

10. 选填:采用分页或分段存储后,提供给用户的物理地址空间___(段大/页大/一样大/无法确定) 
	一样大。因为不知道段表或者页表的大小,总的空间-段表或页表空间 = 提供给用户的物理地址空间。

11. 选填:页表的起始地址存放于__(寄存器/内存)
	寄存器。好好看看页表查询流程图。

12. 对重定位存储管理方式中,应( )
	A. 在整个系统中设置一个重定位寄存器。
	B. 为每道程序设置一个重定位寄存器。
	C.为每道程序和数据都设置一个重定位寄存器。
	选A.因为程序数目是未知的。

13. 有利于程序的动态链接的是__(段式/页式/可变分区/固定分区)
		段式。因为程序的编译后,模块是按照逻辑划分的,以上只有段式与逻辑挂钩。

14. 可重入程序是通过减少对换数量方法来改善系统性能的。

15. 操作系统实现连续分配管理比实现非连续分配管理代价要下。(没有段表/页表)

16. OS采用分页存储管理,则( )
	①每个进程拥有一张页表,且进程的页表驻留在内存中。
	②每个进程拥有一张页表,只有执行的进程的页表驻留在内存中。
	选①。进程被创建时,会创建其PCB,当进程不执行时,页表信息放在PCB中,而PCB是常驻内存的。
	当进程执行时,页表的起始地址和页表长度会从PCB加载到页表寄存器中。
	另外,非虚拟存储技术中,进程一旦加载到内存会一直驻留在内存中。

17. 段页式用分段方法来分配和管理用户地址空间,用分页方法来管理物理存储空间。但它的开销比段式和页式的都要大,而这些都比连续分配管理开销更大。
	(段页,先分段,再分页,页是底层,所以是页式管理物理空间)

18. 虚拟存储与非虚拟存储的主要区别:非虚拟存储中,必须将作业全部装入内存后才能运行且运行过程中必须一直驻留内存。而虚拟存储不必将作
	业全部装入内存且运行过程中不必一直驻留在内存。

19. 判断:影响磁盘访问时间的主要因素通常不是页面大小,所以使用时优先考虑较大的页面。
	错。因为结合大页面和小页面的效率,取一个合适的页面大小。

20. 对内存的访问是以字节为单位,对内存的管理与分配是以存储器的具体方式不同而不同,比如段式、页式。

21. 页面内一定连续,页面间不一定连续。同理,段内一定连续,段间不一定连续。

22. 判断:页式存储方式可以使用静态重定位。
	错误。因为静态重定位是要求有一片连续的且能存放整个程序的空间,而页式存储是离散的存放程序。
	动态重定位可以实现程序的部分装入,用来支持虚拟技术。

23. 虚拟存储容量既不受内存限制,又不受外存限制,而是受CPU寻址范围,也就是地址总线的限制。

24. 若用户进程发生缺页,操作系统可能执行( )
	①处理越界		②置换页		③分配内存
	答案:②③  处理越界是由硬件完成的,与OS没关系。

25. 以下最容易产生内部碎片的算法是( )
	A.首次适应算法		B.最坏适应算法		C.最佳适应算法		D.循环首次适应算法
	选C。

26. 虚拟存储技术并未实际扩充内存、外存物理容量。而是采用对换技术扩充逻辑空间。
	虚拟存储扩充了内存。(没有表明是逻辑空间还是物理空间,则这种说法是正确的)

27. 导致LRU算法实现起来耗费高的原因是( )
	A.需要硬件的特殊支持	B.需要特殊的中断处理程序		C.需要在页表中标明特殊的页类型		D.需要对所以的页面进行排序
	选D。LRU算法需要查询最久未适应的那个页面,这涉及排序,对置换算法而言,开销太大。而排序的依据是在页表项中新加一个LRU字段,按照这个排序
	A是耗费高的结果,D才是耗费高的原因。

28. 虚拟存储系统的页表项中,决定是否会发生页故障的是( )
	A.合法位		B.修改位		C.页类型		D.保护码
	选A。

29. 在请求分页存储管理中,若采用FIFO页面淘汰算法,则当可供分配的页帧数增加时,缺页中断的次数( )
	A.减少		B.增加		C.无影响		D.可能增加也可能减少。
	选D。因为FIOU可能出现Belady异常。

30. 在进程运行时,若其工作集页面都在( )中,则能快速有效的运行,否则会出现抖动现象。
	A. 主存储器		B.虚拟存储器
	选A。虚拟存储器就是使用了虚拟技术的存储器,而虚拟技术的实现有外存和内存,所以虚拟存储器指的是内存和外存的结合,如果页面在外存中是不行的,所以B错。

31. 判断:让页表常驻内存能够加快地址转换速度。
	正确。页表常驻内存能够省去将一些不在内存中的页表加载到内存所花时间。

32. 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84600.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!