内容纲要

存储管理:

  • 内存储器一般分为两部分:一部分是系统区,用来存放操作系统以及一些标准子程序、例行程序等,这些是长驻内存的部分,系统区用户不能使用;另一部分称为用户区,分配给用户使用,用来存放用户的程序和数据等。
  • 内存管理的主要工作就是对内存储器中的用户区进行管理。

存储管理需要实现四大目标:

  1. 抽象:逻辑地址空间
  2. 保护:独立地址空间
  3. 共享:访问相同内存
  4. 虚拟化:更大的地址空间

逻辑地址空间:用户的源程序通常用高级语言编写,源程序通过编译或汇编后得到目标程序。目标程序使用的地址称为逻辑地址,也叫相对地址,一个用户作业的目标程序的逻辑地址集合称为该作业的逻辑地址空间。

物理地址空间:当程序运行时,它将被装入内存中的某段空间内,此时程序和数据的实际地址不可能同原来的逻辑地址一致,程序在物理内存中的实际存储单元称为物理地址,也叫绝对地址,物理地址的总体就构成了用户程序实际运行的物理地址空间。

地址转换:只有把程序和数据的逻辑地址转换为物理地址,程序才能正确运行,该过程称为地址转换或地址重定位。地址转换有静态重定位和动态重定位两种方式。

静态重定位:这种方式是在用户作业装入内存时由装入程序(装配程序)实现从逻辑地址到物理地址的转换,地址转换在作业执行前一次完成。

  • 优点:实现简单,从逻辑地址到物理地址变换不需要专门的硬件便能完成;
  • 缺点:必须为程序分配一段连续的存储空间,并且程序在执行过程中不能在内存中移动。

动态重定位:程序执行过程中,CPU在访问程序和数据之前才实现地址转换。

  • 优点:内存的使用更加灵活,容易实现内存的动态扩充和共享;
  • 缺点:实现过程中需要附加硬件支持,内存的管理也更加复杂。

存储管理的功能:

  • 虚拟存储器
  • 地址变换
  • 内外存数据传输控制
  • 内存的分配与回收
  • 内存信息的共享与保护

分区管理:给每一个内存中的进程划分一块适当大小的存储区,以连续存储各进程的程序和数据,使各进程得以并发执行。按分区的时机,分区管理可以分为固定分区和动态分区两种方法。

固定分区法:把内存固定地划分为若干个大小不等的区域。分区划分的原则由一般系统操作员或操作系统决定。例如可划分为长作业分区和短作业分区。分区一旦划分结束,在整个执行过程中每个分区的长度和内存的总分区个数将保持不变。

固定分区的分配和回收:

  • 当用户程序要装入执行时,通过请求表提出内存分配要求和所要求的内存空间大小。存储管理程序根据请求表查询分区说明表,从中找出一个满足要求的空闲分区,并将其分配给申请者。
  • 当进程执行完毕,不再需要内存资源时,管理程序将对应的分区状态置为未使用即可。

动态分区法:与固定分区法相比,动态分区法在作业执行前并不建立分区,分区的建立是在作业的处理过程中进行的,且其大小可随作业或进程对内存的要求而改变。这就改变了固定分区法中那种即使是小作业也要占据大分区的浪费现象,从而提高了内存的利用率。

动态分区法的分配和回收:

  1. 对千请求表中的要求内存长度,从可用表或自由链中寻找出合适的空闲区分配程序。
  2. 分配空闲区之后,更新可用表或自由链。
  3. 进程或作业释放内存资源时,和相邻的空闲区进行链接合并,更新可用表或自由链。

动态分区法的分配算法:

最先适应算法:要求可用表或自由链按起始地址递增的次序排列。该算法的最大特点是一旦找到大于或等于所要求内存长度的分区,则结束探索。然后,该算法从所找到的分区中划出所要求的内存长度分配给用户,并把余下的部分进行合并(如果有相邻空闲区存在)后留在可用表中,但要修改其相应的表项。

最佳适应算法:要求按从小到大的次序组成空闲区可用表或自由链。当用户作业或进程申请一个空闲区时,存储管理程序从表头开始查找,当找到第一个满足要求的空闲区时,停止查找。如果该空闲区大于请求表中的请求长度,则与最先适应算法时相同,将减去请求长度后的剩余空闲区部分留在可用表中。

最坏适应算法:要求空闲区按其大小递减的顺序组成空闲区可用表或自由链。当用户作业或进程申请一个空闲区时,先检查空闲区可用表或自由链的第一个空闲可用区的大小是否大千或等于所要求的内存长度,若可用表或自由链的第一个项长度小于所要求的,则分配失败,否则从空闲区可用表或自由链中分配相应的存储空间给用户,然后修改空闲区可用表或自由链。

覆盖技术:

  • 一个程序通常由若干个功能上独立的程序段组成,在运行时,并不是所有的程序段都同时进入内存执行。这样,我们就可以按照程序自身的逻辑结构,让不同时执行的程序段先后共享同一块内存区域,这就是覆盖技术。
  • 覆盖技术先将程序必需的部分代码和数据调入内存,其余部分先放在外存中,当要访问的程序或数据不在内存时,由操作系统负责将其从外存中调入,这就解决了在较小的内存空间中运行较大程序的问题。
覆盖技术

缺点:

  1. 覆盖技术对用户不透明,用户在编程时必须划分程序模块和确定程序模块之间的覆盖关系,增加了编程复杂度。
  2. 从外存装入覆盖文件,是以时间的延长来换取空间的节省。

交换技术:

  • 为了释放部分内存空间,由操作系统根据需要,将某些暂时不运行的进程或程序段从内存移到外存的交换区中;当内存空间富余时再给被移出的进程或程序段重新分配内存,让其进入内存,这就是交换技术,又称为“对换”或“滚进/滚出(roll-in/roll-out)。
  • 交换技术能够提高系统的性能和多道度,从内存到外存的交换为换出,从外存到内存的交换为换入。通过不断的换入、换出,使得用户看来好像内存扩大了,从而实现了内存扩充的目的。

覆盖技术和交换技术的比较:

  • 与覆盖技术相比,交换技术不要求用户给出程序段之间的逻辑覆盖结构。
  • 交换发生在进程或作业之间,而覆盖发生在同一进程或作业内。
  • 覆盖只能覆盖那些与覆盖段无关的程序段。

页:将用户进程的逻辑地址空间划分为大小相等的区,每一个区称为一页或一个页面,并对各页从0开始编号。

物理块:将物理内存也划分成与页大小相等的区,每一个区称为一个物理块(block),或称为块、页框,也同样对它们加以编号,如0块、1块等。物理块的尺寸大小通常会取2的幂次。物理块的大小由计算机硬件决定,页的大小由物理块的大小决定。

页式存储管理:在进行内存分配时,以物理块为单位进行分配,一个作业有多少页,在装入内存时就必须给它分配多少个物理块。但是,和分区式内存管理不同的是分配给作业的物理块可以是不连续的。

页式存储管理的地址转换:在页式存储管理中,进程的逻辑地址到物理地址的转换需要硬件来完成,该硬件为地址转换机构。

页式存储管理的地址转换

快表:为了提高程序的运行速度,可以将最近访问过的页的页表项信息存放在高速缓存中,高速缓存也称为“联想存储器”,其中的页表称为“快表”。

多级页表:为了能够快速查找页表页在内存中的物理块号,为这些页表页再设计一个地址索引表,即页目录表。页目录表的表项中包含每个页表页所在的内存物理块号和相关信息。这样,系统将页表分为了两级:一级为页目录表,二级为页表页。

段式存储管理:以段为单位进行内存分配,逻辑地址空间是一个二维空间,分为段号和段内偏移两部分。

段式存储管理的地址转换:

  • 将CPU给出的逻辑地址由地址转换机构分为段号和段内地址(即段内偏移);
  • 查询段表寄存器得到段表在内存的起始地址;
  • 将段号带入查询段表,得到该段在内存的起始地址和段长;
  • 将段内地址与段长比较,如果段内地址大于段长,则发出越界中断;否则合法。段在内存的起始地址与段内地址相加,就为该逻辑地址对应的内存物理地址。
  • 同样,借助于联想寄存器,在快表中保存最近使用过的段表项,可以更快地实现地址转换。
段表

最后修改日期:2020年4月11日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。