操作系统内存管理。
操作系统内存管理1。
内存管理方法内存管理主要包括虚拟地址、地址转换、内存分配和恢复、内存扩展、内存共享和保护功能。
2.连续分配存储管理模式连续分配是指为用户程序分配连续的内存空间。
连续分配包括单个连续存储管理和分区存储管理。
2.1单一连续存储管理在此管理模式中,内存分为两个区域:
系统区域和用户区域。
应用程序被加载到用户区域,并且可以使用用户区域中的所有空间。
它的特点是简单,适用于单用户和单任务操作系统。
Cp/m和低于2.0的dos就是这样被采用的。
这种方法的最大优点是易于管理。
然而,仍然存在一些问题和不足,如为需要较少内存空间的程序浪费内存;
所有程序都被加载,所以很少使用的程序部分也占用一定的内存。
2.2分区存储管理为了支持多通道程序系统和分时系统,并支持多个程序的并发执行,引入了分区存储管理。
分区存储管理是将内存分成大小相等或不等的分区。
操作系统占用一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。
分区存储管理可以支持并发,但是共享内存分区很困难。
分区存储管理带来了两个新问题:
内部碎片和外部碎片。
内部片段是被占用的分区中未使用的空间,而外部片段是空闲分区(通常是小空闲分区),难以在被占用的分区之间使用。
为了实现分区存储管理,操作系统应该维护的数据结构
是分区表或分区链表。
表中的每个条目通常包括每个分区的起始地址、大小和状态(是否已分配)。
分区存储管理中常用的一种技术是内存压缩。
2 . 2 . 1 nxed partition。
固定分区的特征是将内存划分成几个固定大小的连续分区。
分区大小可以相等:
此方法仅适用于多个相同程序的并发执行(处理多个相同类型的对象)。
分区大小也可能不同:
有许多小分区、中等分区和少量大分区。
根据程序的大小,分配适当大小的当前空闲分区。
优势:
易于实现,成本低。
有两个主要缺点:
内部碎片造成的浪费;
分区的总数是固定的,限制了并发程序的数量。
2.2.2动态分区动态分区的特点是动态创建分区:
加载程序时,根据其初始要求分配程序,或者在程序执行期间通过系统调用分配或更改分区大小。
与固定隔板相比,其优点是: 没有内部碎片。
然而,它引入了另一种碎片,——外层碎片。
动态分区的分区分配是为了找到某个空闲分区,其大小需要大于或等于程序的要求。
如果它大于要求,该分区被分成两个分区,其中一个分区具有要求的大小并被标记为“已占用”,而另一个分区是其余的分区并被标记为“空闲”。
分区分配的顺序通常是从内存的低端到高端。
动态分区的分区释放过程中需要注意的问题之一是将相邻的空闲分区
合并成一个大的空闲分区。
下面列出了几种常用的分区分配算法: 第一适应方法(nrst- 2。
连续分配存储管理方法连续分配是指为用户程序分配连续的内存空间。
连续分配包括单个连续存储管理和分区存储管理。
2.1单一连续存储管理在此管理模式中,内存分为两个区域:
系统区域和用户区域。
应用程序被加载到用户区域,并且可以使用用户区域中的所有空间。
它的特点是简单,适用于单用户和单任务操作系统。
Cp/m和低于2.0的dos就是这样被采用的。
这种方法的最大优点是易于管理。
然而,仍然存在一些问题和不足,如为需要较少内存空间的程序浪费内存;
所有程序都被加载,所以很少使用的程序部分也占用一定的内存。
2.2分区存储管理为了支持多通道程序系统和分时系统,并支持多个程序的并发执行,引入了分区存储管理。
分区存储管理是将内存分成大小相等或不等的分区。
操作系统占用一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。
分区存储管理可以支持并发,但是共享内存分区很困难。
分区存储管理带来了两个新问题:
内部碎片和外部碎片。
内部片段是被占用的分区中未使用的空间,而外部片段是空闲分区(通常是小空闲分区),难以在被占用的分区之间使用。
为了实现分区存储管理,操作系统应该维护的数据结构是分区表或分区链表。
表中的每个条目通常包括每个分区的起始地
址、大小和状态(是否已分配)。
分区存储管理中常用的一种技术是内存压缩。
2 . 2 . 1 nxed partition。
固定分区的特征是将内存划分成几个固定大小的连续分区。
分区大小可以相等:
此方法仅适用于多个相同程序的并发执行(处理多个相同类型的对象)。
分区大小也可能不同:
有许多小分区、中等分区和少量大分区。
根据程序的大小,分配适当大小的当前空闲分区。
优势:
易于实现,成本低。
有两个主要缺点:
内部碎片造成的浪费;
分区的总数是固定的,限制了并发程序的数量。
2.2.2动态分区动态分区的特点是动态创建分区:
加载程序时,根据其初始要求分配程序,或者在程序执行期间通过系统调用分配或更改分区大小。
与固定隔板相比,其优点是: 没有内部碎片。
然而,它引入了另一种碎片,——外层碎片。
动态分区的分区分配是为了找到某个空闲分区,其大小需要大于或等于程序的要求。
如果它大于要求,该分区被分成两个分区,其中一个分区具有要求的大小并被标记为“已占用”,而另一个分区是其余的分区并被标记为“空闲”。
分区分配的顺序通常是从内存的低端到高端。
动态分区的分区释放过程中需要注意的问题之一是将相邻的空闲分区合并成一个大的空闲分区。
下面列出了几种常用的分区分配算法:
第一种自适应方法(nrst:根据内存中分区的顺序从头开始搜索,以找到满足分配要求的第一个分区。
该算法的分配和释放时间性能更好,更大的空闲分区可以保留在内存的高端。
然而,随着低端分区的不断划分,将会产生更多的小分区,并且每次进行分配时搜索时间的成本都会增加。
下一个自适应方法(循环优先自适应算法next fit):根据内存中分区的顺序,从上次分配的分区(从最后一个{area}开始)进行搜索,找到满足分配要求的第一个分区。
该算法的分配和释放时间性能良好,因此空闲分区根据内存中分区的顺序,从上次分配的分区(从最后一个{zone}开始)中搜索,以找到满足分配要求的第一个分区。
该算法的分配和发布的时间性能良好,使得空闲点——可以单独编写和编译——可以对不同类型的段采用不同的保护——可以由段共享,包括通过动态链接共享代码。
这种方法的优点是:
源程序文件可以单独编写和编译,不同类型的段可以采用不同的保护
没有内部片段,外部片段可以通过记忆收缩来消除。
从而促进内存共享。
缺点与页面存储管理的缺点相同。
进程必须全部加载到内存中。
5.2段管理的数据结构为了实现段管理,操作系统需要以下数据结构来实现进程地址空间到物理内存空间的映射,并跟踪物理内存的使用情况,以便在加载新段时合理分配内存空间。
*流程部分表:
描述组成进程地址空间的段,这些段可以是系统段表中条目的索引。
每个段都有一个段基地址,它是段内的地址。
为系统中的每个流
程创建一个段映射表,如图所示:
系统段表:
系统的所有占用段(已经分配的段)。
自由段表:
内存中的所有空闲段都可以合并到系统段表中。
5.3段管理的地址转换图4-5段管理的地址转换在段管理系统中,整个过程的地址空间是二维的,即其逻辑地址由两部分组成:段号和段内地址。
为了完成从进程的逻辑地址到物理地址的映射,处理器将在存储器中查找段表,并从段号中获得段的第一个地址,加上段中的地址,以获得实际的物理地址(见图4-5)。
这个过程也由处理器的硬件直接完成。
当操作系统正在进行进程切换时,只需要将进程段表的第一个地址加载到处理器的特定寄存器中。
该寄存器通常称为段表地址寄存器。
6.页面和细分市场管理之间的差异页面和细分市场系统之间有许多相似之处。
例如,它们都采用离散分配方法,并且都通过地址映射机制实现地址转换。
然而,从概念上讲,两者之间有许多不同之处,主要表现在:
1)要求:
分页是信息的物理单位。
分页是实现离散分配以减少内存碎片和提高内存利用率。
换句话说,分页只是由于系统管理的需要,而不是用户的需要。
片段是信息的逻辑单位,包含一组含义相对完整的信息。
细分的目的是更好地满足用户的需求。
指令或操作数可能跨越两页之间的边界,而不是两段之间的边界。
2)尺寸:
页面大小是固定的,由系统决定。
逻辑地址分为两部分:页号和页内地址,由机器硬件实现。
段的长度不是固定的,取决于用户编写的程序。
通常,编译系统在编译源程序时根据信息的性质来划分源程序。
3)、逻辑地址表示: 页面系统地址空间是一维的,即单个线性地址空间。
程序员只需要用一个标识符来表示一个地址。
分段作业地址空间是二维的。
当程序员识别一个地址时,他们需要给出段名和段内的地址。
4)比页面大,所以分段表比页面表短,可以缩短搜索时间,提高访问速度。
单词模型。