存储器管理

存储器是计算机系统的重要组成部分,是一种宝贵且紧俏的资源,如何对它进行管理,会影响到存储器的利用率以及系统性能。存储器管理讨论的主要对象是对内存的管理方法以及有效利用。
存储器管理研究的主要内容分为3个方面:
1. 取,研究将哪段程序从辅存调入主存,一般有请调和预调之分。请调是按照需要来确定调入主存的程序段;预调是根据某种策略,预测并调入即将使用的某段程序到主存。
2. 放,研究将“取”来的程序段按何种方式存放在主存的什么地方。
3. 替换,研究将哪段程序暂时从主存移到辅存以腾出主存空间供其他程序段使用。
在这3个方面中,“放”是存储器管理的基础。目前“放”的技术可分为两类:
1. 连续的“放”,即运行的程序必须存放在主存的一片连续的空间中。如:单一连续分配、固定分区分配、可变分区分配;
2. 不连续的“放”,即运行的程序可以放在主存的多个不相邻的块中。如:页式管理、段式管理和段页式管理。
存储器的层次
CPU不能直接存取外存上的信息,必须将程序和数据存到内存才能执行和访问。但是,内外存之间可以相互传递数据。因此,以文件的方式存储在外存上的程序,在执行或存取程序和数据,将它们放到内存。外存的运行速度低于内存的存取速度。
为了进一步提高运算速度和增强处理能力,可采用高速缓冲存储器来存放程序和数据。高速缓存器是由硬件寄存器构成的,因而其存取速度相当快,CPU可以直接存取其中的信息。
用户程序的处理过程
系统对用户程序的处理分为以下几个阶段:
1. 编译。由编译程序将用户源代码编译成若干个目标模块。
2. 链接。由链接程序将编译后下形成的目标代码以及他们所需的库函数链接在一起,形成一个装入模块。
3. 装入。由装入程序将装入模块装入内存。
内存管理中的相关概念
1. 逻辑地址是一个操作数在逻辑地址空间中的地址。逻辑地址空间是程序及数据所构成的空间,从0开始编址。
2. 物理地址时一个操作数加载内存后的地址,相对于内存0地址编址。
3. 重定位是指将一个操作数的逻辑地址转换为物理地址。
目标程序装入内存的方式
程序只有装入内存后才能运行。装入方式分为3类:
1. 绝对装入方式。在编译时,如果知道程序将驻留在内存什么位置,那么编译程序将产生绝对地址的目标代码。
2. 可重定位装入方式。在程序执行之前,由操作系统的重定位装入程序完成。重定位程序根据装入程序的内存起始地址,直接修改所涉及的逻辑地址,将内存的起始地址加上逻辑地址得到正确的内存地址。
3. 动态运行时的装入方式是在程序执行期间进行的。该转换一般有专门的硬件结构来完成,通常采用一个重定位寄存器,每次进行存储访问时,将取出的逻辑地址加上重定位寄存器的内容,形成正确的内存地址,该方法一般用于多道程序环境中。
目标程序链接
链接程序的功能是将经过编译或汇编后得到的一组目标模块以及他们所需的库函数装配成一个完整的装入模块。实现链接的方式有3种:
1. 静态连接。事先进行链接,以后不再拆开的方式成为静态连接。
2. 装入时动态链接。用户源程序经编译后得到目标模块,在装入内存时边装入边链接,即在装入一个目标模块书,若发生一个外部模块调用,装入程序将去寻找相应的外部目标模块,并将它装入内存。
3. 运行时动态链接。可将某些目标模块的链接推迟到执行时才进行,即在执行过程中,若发现一个被调用模块尚未装入内存时,由OS去找该模块,将它装入内存,并把它链接到调用模块上。
连续分配存储管理方式
连续分配是指为一个用户程序分配一个连续的内存空间,包括单道程序的连续分配和多道程序的连续分配。连续分配又称为分区分配方式,包括固定分区、动态分区和动态重定位分区3种。
单道程序的连续分配
单道程序的连续分配是一种简单的存储分配方式,只能用于单用户、单任务的操作系统。在这种存储管理方式中,内存分为系统区和用户区两个分区。
1. 系统区。系统区仅供操作系统使用,一般驻留在低地址部分,其中包括中断向量。中断向量使操作系统核心部分的功能模块加载内存的起始地址,该地址在系统调用时被使用。
2. 用户区。操作系统所占区域以外的全部内存空间。为了避免用户程序执行时访问了操作系统所占空间,应将用户程序的执行严格控制在用户区域,称之为存储保护,保护措施主要是由硬件实现。硬件提供界地址寄存器和越界检查机构,将操作系统所在空间的下界a存放在界地址寄存器中,用户程序执行时,没访问一次主存,越界检查机构便将访问主存的地址和界地址寄存器的值进行比较,若出界则报 地址错误。
固定分区分配方式
固定分区管理方式比较简单,操作系统在启动时划分好分区的打下和个数,在程序运行期间,整个系统中的分区不在变化。
一旦一个区域分配给某个作业后,它所剩余空间变不能再用,成为内存的内碎片;一个作业加载内存时,如果内存中分区的长度小于作业程序的长度,则该程序无法嵌入,此时成该分区为外碎片。内、外碎片之和构成了存储空间总的浪费。
由于一个区域最多只能放一个作业,所以区域的个数也是能并发执行的作业的最大道数,把这种管理方法称为MFT,即道数固定的多道程序设计管理方法。
固定式分区管理方式的另一个问题是如何划分区域,划分几个区域、每个区域占据多大的空间。
动态分区分配
可变式分区管理根据实际需要动态地分隔内存,当有些作业运行完毕并释放了其所占用的空间时,只要可能,便将那些较小的自由空间合并成较大的空间。这种管理方法下,内存区域的个数、各区域的大小、装入内存的作业的道数都随时间而变化,所以该管理方法又被称为MVT,即具有可变道数的多道程序设计。
动态分区分配需要解决的问题有分区分配中所用的数据结构;分区的分配算法;分区的分配与回收操作。
1. 分区分配中的数据结构。常用的数据结构由空闲分区表和空闲分区链。
2. 分区分配算法。按照一定的分配算法,从空闲表或空闲分区链中选一个分区分配给该作业,常用的有3种分配算法:
首次适应算法:通常要求自由块按起始地址从低到高排序,当需要分配空间时,从头开始查找,直到找到一个符合要求的自由块。
最后适应算法:从内存最高地址开始查找,找到第一个满足要求的内存块,进行分配。
最佳适应算法:要求自由块从小到大的顺序排序。分配从头开始查找,即从小端到大端的方向查找,直到找到一个满足要求的自由块。
最坏适应算法:分配空间时从大到小查找,因此,找到的自由块当前所有空闲自由块中最大的。
分区分配和回收
动态分区存储管理方式中,主要操作是分配和回收内存。
1. 分配内存。系统利用内存分配算法,从空闲表中找到所需的分区,将分配的首地址返回给调用者。
2. 回收内存。回收分区的主要工作是首先检查是否有邻接的空闲区,如有则合并,是指成为一个连续的空闲区,避免形成许多离散的小分区;之后,修改有关的分区描述信息。
可重定位分区
1. 紧凑。在连续分配方式中,必须把一个系统程序或用户程序装入到连续的内存空间中,如果系统中存在若干个小的分区,每个小分区都不能满足待装入程序的要求,该程序就不能装入内存,但个空闲分区之和大于要装入的程序。可采用的方法是将内存中的作业进行移动,使它们相邻,使原来许多分散的小分区可以拼接成大的分区,称为“紧凑”。由于经过紧凑的用户程序在内存中的位置发生了变化,若不对程序中的数据地址进行修改变化,程序无法执行,因此必须进行重定位。
2. 动态重定位。在该方式中,将程序中的相对地址转换为物理地址的工作推迟到程序指令执行时进行,这必须获得硬件地址变换机构的支持,即在系统增加一个重定位寄存器,用它来装入程序在内存中的起始地址。程序在执行时,真正访问的内存地址是由程序中的逻辑地址与重定位寄存器中程序加载内存的起始地址相加而形成的。地址变换过程是在程序执行期间随着对每条指令和数据访问而进行的,故称为动态重定位。
3. 动态重定位分区分配算法。动态重定位分区分配算法与动态分区分配算法基本相同,差别仅在于增加了“紧凑”功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值