操作系统第三章——内存管理重点知识

本文深入探讨了内存管理的各个方面,包括内存的作用、程序的编译、链接和装入过程,以及各种内存分配策略如静态链接、动态链接和装入方式。详细阐述了内存管理的功能,如地址变换、覆盖技术、交换技术、连续分配和非连续分配管理。重点讨论了分页和分段存储管理,以及虚拟内存的局部性原理、特征和请求分页管理。此外,还涵盖了页面置换算法、缺页中断机构和页面分配、置换策略,以及解决内存抖动问题的重要性。
摘要由CSDN通过智能技术生成

内存

什么是内存?有何作用?

内存指的是计算机的内存储器。内存可存放数据。程序执行前需要先放到内存中才能被CPU处理,为了缓和CPU与硬盘之间的速度矛盾。

将用户程序变为可在内存中执行的程序的步骤?

1、编译:由编译程序将用户源代码编译成若干目标模块。
2、链接:由链接程序将编译后形成的一组目标模块及所需的库函数链接在一起,形成一个完整的装入模块。
3、装入:由装入程序将装入模块装入内存中运行。

程序的链接方式有哪些?

1、静态链接:在程序运行之前,先把各个目标模块及所需库链接为一个完整的可执行程序,以后不再拆开。
2、装入时动态链接:将应用程序编译后所得到的一组目标模块在装入内存时采用边装入边链接的方式
3、运行时动态链接:直到程序运行过程中需要一些模块时,才对这些模块进行链接,便于修改更新

程序的装入方式有哪些

1、绝对装入,在编译时就知道程序将要放到内存的哪个位置,编译程序产生绝对地址的目标代码,装入程序按照装入模块中的地址,将程序和数据装入内存。这种装入不适合多道程序环境。
2、可重定位装入,根据内存情况,将装入模块装入到内存的适当位置,地址变换,即逻辑地址变换为物理地址,通常在装入时一次完成,之后不再改变。
3、动态运行时装入,允许程序运行时在内存中移动位置,把装入模块装入到内存后的所有地址都是逻辑地址,在程序执行过程中每当访问到相应指令或数据时,才将逻辑地址转换为物理地址。

内存管理

内存管理具有哪些功能?

1、内存的分配与回收。包括实施内存的分配,回收系统或用户释放的内存空间。
2、地址变换。提供地址变换功能,将逻辑地址转换为物理地址
3、扩充内存。借助于虚拟存储技术和其它覆盖技术,为用户提供比内存空间大的地址空间,从逻辑上扩充内存
4、内存保护。保证进入内存的各进程在各自的存储空间内运行,互不干扰

覆盖技术和交换技术

覆盖技术的思想是说将程序分为多个段,常用的段常驻内存,不常用的段在需要的时候调入内存。内存中分为一个固定区和若干个覆盖区,需要常驻内存的段放在固定区中,调入后就不再调出,除非运行结束。不常用的段放在覆盖区,需要用到时调入内存,用不到时调出内存。

交换技术的设计思想是,内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备条件的进程换入内存。整个过程就是进程在内存与磁盘间动态调度。

覆盖技术与交换技术的区别

1、与覆盖技术相比,交换技术不要求程序员给出的程序段之间的覆盖结构
2、交换技术主要在进程或作业之间进行,覆盖技术主要在同一个进程或作业中进行
3、覆盖技术只能覆盖与覆盖程序段无关的程序段,交换技术的交换进程由换出和换入两个过程组成。

连续分配管理方式

连续分配管理是内存空间分配与回收的一种方式,连续分配是指为用户进程分配的必须是一个连续的内存空间,它又包括单一连续分配、固定分区分配和动态分区分配三种方式

在单一连续分配方式中,内存被分为系统区和用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。内存中只能有一道用户程序,用户程序独占整个用户区空间。这种方式的优点是简单、无外部碎片,可以采用覆盖技术,不需要额外的技术支持。缺点是只能用于单用户、单任务的操作系统,有内部碎片,存储器利用率极低。

固定分区分配是将用户空间划分为若干个固定大小的分区,每个分区只装入一道作业。当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环
在划分分区时,有两种不同的方法,一是分区大小相等,用于利用一台计算机控制多个相同对象的场合,缺乏灵活性。二是分区大小不等,划分为含有多个较小的分区,适量中等分区以及少量大分区。

动态分区分配又称为可变分区分配。这种分配方式不会预先划分内存分区,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统分区的大小和数目是可变的

动态分区分配算法

一共有四种,分别是首次适应算法、最佳适应算法、最坏适应算法、邻近适应算法

首次适应算法是空闲分区以地址递增的次序链接,分配内存时顺序查找,找到第一个能满足大小的空闲分区。综合看性能最好,算法开销小

最佳适应算法是空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。优点是会有更多大分区被保留下来,缺点是会产生很多小碎片,开销大。

最坏适应算法是空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑出最大的分区。优点是可以减少小碎片,缺点是大分区容易用完。

邻近适应算法是由首次适应算法演变而成,分配内存时从上次查找结束的位置开始继续查找。优点是不用每次从低地址开始查找,算法开销小,缺点是高地址大分区容易被用完

非连续分配管理方式

非连续分配管理方式有分页管理和分段管理以及段页式管理。分页管理将进程逻辑地址空间分成若干页,各个页面离散地放到各个内存块中。逻辑地址分为页号+页偏移量。分段管理将进程逻辑地址空间按照程序自身的逻辑关系划分为若干个段,每段从0开始编址。每个段从0开始编址。每个段在内存中占据连续空间,段之间可以不相邻,把逻辑地址结构分为段号+段内地址。段页式管理是分段+分页的结合,将进程按逻辑模块分段,再将各段分页

分页存储管理中逻辑地址转换为物理地址的过程

单级页表有两种。一种是利用基本地址变换机构,一种是利用具有快表的地址变换机构

利用基本地址变换机构
1、根据逻辑地址算出页号、页内偏移量
2、对页号做合法性检查,主要是与页表寄存器中的页表长度对比
3、如果页号合法,再根据页号和页表寄存器中的页表起始地址查询页表找到对应页表项
4、根据页表项中记录的内存块号、页内偏移量得到最终的物理地址

具有块表的地址变换机构
1、算页号、页内偏移量
2、检查页号合法性
3、查快表。若命中,可以知道页面存放的内存块号,根据内存块号与页面偏移量得到物理地址
4、没命中快表则查页表,找到页面存放的内存块号,并且将页表项复制到快表中
5、根据内存块号与页内偏移量得到物理地址

两级页表
1、将长的页表分页,逻辑地址结构分为一级页号+二级页号+页内偏移量
2、从进程PCB中读出页表起始地址,根据一级页号查页表找到下一级页表在内存中存放的位置
3、再根据二级页号查表,找到最终要访问的内存块号
4、结合页内偏移量得到物理地址

分段存储管理中地址变换过程

1、由逻辑地址得到段号、段内地址
2、段号与段表寄存器中的段长度比较,检查是否越界
3、由段表起始地址、段号去段表找到对应段表项
4、根据段表中记录的段长、检查段内地址是否越界
5、由段表中的基址+段内地址得到最终的物理地址

分段、分页管理有什么区别

目的来看
页是信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的。
段是信息的逻辑单位。分段的主要目的是更好地满足用户需求。一个段通常包含着一组术语一个逻辑模块的信息。分段对用户是可见的,用户编程时需要显式地给出段名

大小来看
页的大小固定而且由系统决定。段的长度却不固定,决定于用户编写的程序。

地址空间来看
分页的用户进程地址空间是一维的,一个符号即可表示地址,分段的用户进程地址空间是二维的,标识一个地址时,既要给出段名,也要给出段内地址

分段比分页更容易实现信息的共享和保护

段页式管理中地址变换的过程

1、由逻辑地址得到段号、页号、页内偏移量
2、段号与段表寄存器中的段长度比较,检查是否越界
3、由段表起始地址、段号找到对应段表项
4、根据段表中记录的页表长度,检查页号是否越界
5、由段表中的页表地址、页号得到查询页表,找到相应页表项
6、由页面存放的内存块号、页内偏移量得到最终的物理地址

虚拟内存

局部性原理

CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
局部性分为时间局部性和空间局部性。
时间局部性是说:如果执行了程序中的某条指令,那么不久后这条指令很可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问,因为程序中存在大量的循环。

空间局部性是说:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。因为很多数据在内存中是连续存放的,并且程序的指令也是顺序地在内存中存放的。
总结来说,如果一个内存位置被重复的使用,那就是有了时间局部性,如果一个内存位置被使用了,很快这个位置的附近位置也被使用了,这就有了空间局部性。

虚拟内存概念

计算机中存储器的层次结构自底向上依次是外存、内存、高速缓存、寄存器。基于局部性原理,在程序装入时,可以将程序很快会用到的部分装入内存,暂时用不到的部分留在外存,
在程序执行过程中,当所访问的信息不在内存时,操作系统再将所需信息从外存调入内存,如果内存空间不够,操作系统会将内存中暂时用不到的信息换到外存,整个过程在操作系统的管理下,用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存。

虚拟内存的特征

虚拟内存主要有三个特征:
1、多次性。无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存
2、对换性。在作业运作时无需一直常驻内存,而是允许在作业运行过程中,将作业换入、换出。
3、虚拟性。从逻辑上扩充了内存的容量,使用户看到的内存容量远大于实际的容量

请求分页管理方式

请求分页存储管理与基本分页存储管理的主要区别

在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
如果内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到内存

缺页中断机构

在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。此时缺页的进程阻塞,放入阻塞队列,调页完成后将其唤醒,放回就绪队列。
调页过程分两种情况
如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。
如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,如果该页面在内存期间被修改过,则要将其写回内存。未修改过的页面不用写回外存。

地址变换机构与基本分页不同的地方

找到页表项时需要检查页面是否在内存中,如果页面不在内存中,需要请求调页,如果内存空间不够,还需要换出页面,页面调入内存后,需要修改相应页表项

页面置换算法

页面置换算法常见的有最佳置换算法、先进先出置换算法、最近最久未使用置换算法、时钟置换算法、改进型时钟置换算法

最佳置换算法就是每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。但实际上,只有在进程执行过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的。

先进先出置换算法是每次选择淘汰的页面是最早进入内存的页面。实现方法是把调入内存的页面根据调入先后顺序排成一个队列,需要换出页面时选择队头页面即可。队列的最大长度取决于系统为进程分配了多少个内存块

最近最久未使用置换算法每次淘汰的页面是最近最久未使用的页面。实现方法是赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t,当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面。

时钟置换算法又称最近未使用算法。为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置为1,当需要淘汰一个页面时,只需检查页的访问位。如果是0,就选择该页换出;如果是1,则将它置为0,暂不换出,继续检查下一页面,若第一轮扫描中所有页面都是1,则将这些页面的访问一次置为0后,再进行第二轮扫描。
改进型时钟置换算法,主要思想是避免I/O操作。增加一个修改位,如果被淘汰的页面没有被修改过就不需要执行I/O操作写回外村。只有被淘汰的页面被修改过时,才需要写回外存,优先淘汰最近没访问,而且没修改的页面

页面分配、置换策略

分配策略有固定分配和可变分配
固定分配是指操作系统为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。
可变分配是指先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少

置换策略有局部置换和全局置换
局部置换是指发生缺页时只能选进程自己的物理块进行置换
全局置换是指可以将操作系统保留的空闲物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再分配给缺页进程

抖动现象

刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,这种频繁的页面调度行为称为抖动。产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值