1.5 存储管理

存储管理

  • 存储管理的功能
  • 分区存储管理
  • 覆盖与交换技术
  • 页式管理
  • 段式与段页式管理

存储管理的功能
存储器是计算机系统的重要资源之一。因为任何程序和数据以及各种控制用的数据结构都必须占用一定的存储空间,因为,存储管理直接影响系统的性能
存储器由内存和外存组成。内存由顺序编制的块组成,每块包含相应的物理单一。CPU要通过启动相应的输入输出设备后才能使外存和内存交换信息。

虚拟存储器

虚拟存储器是存储管理的核心概念。实验证明,在一个进程的执行过程中,其大部分程序和数据并不经常被访问。这样,存储管理系统把进程中那些不经常被访问的程序段和数据放入外存中,待需要访问它们时再将它们调入内存。
如果程序段或数据一部分在内存中,一部分在外存中,则通常由用户编写的源程序,首先要由编译程序编译成CPU可执行的目标代码。然后,链接程序把一个进程的不同进程段链接起来以完成所要求的功能。显然,对于不同的程序段,应具有不同的地址。
将进程中的目标代码、数据等虚拟地址组成的虚拟空间称为虚拟存储器。虚拟存储器不考虑物理存储器的大小和信息存放的实际位置,只规定每一个进程中互相关联信息的相对位置。与实际物理存储器数量有限,且被所有进程共享不一样,每一个进程都拥有自己的虚拟存储器,且虚拟存储器的容量是由计算机的地址结构和寻址方式确定的。
直接寻址时,如果CPU的有效地址长度为16位,则其寻址范围为0到64K在这里插入图片描述
在上图中,编译和链接主要是语言系统的设计问题,而虚拟存储器的物理存储器的变换是操作系统必须解决的问题。要实现这个变换,必须要有相应的硬件支持,并使这些硬件能够完成统一管理内存和外存之间数据和程序段自动交换的虚拟存储器功能。即,由于每个进程都拥有自己的虚存,且每个虚存的大小不受实际物理存储器限制,因此系统不可能提供足够大的内存来存放所有进程的内容,内存中只能存放那些经常被访问的程序段和数据。这就需要相当大的外部存储器,以存储那些不经常被访问或在某一段时间内不会被访问的信息。待到进程执行过程中需要这些信息时,再从外存中自动调入主存。

地址变换

内存地址的集合称为内部空间或物理地址空间。内存中,每一个存储单元都与相应的称为内存地址的编号相对应。显然,内存空间是一堆线性空间。
虚存的一堆线性空间或多堆线性空间变换到内存的唯一的一维物理线性空间所涉及的两个问题:

  1. 虚拟空间的划分问题
    虚拟空间的划分使得编译链接程序可以把不同的程序模块(它们可能是不同的高级语言编写的)链接到一个统一的虚拟空间中去。虚拟空间的划分与计算机系统结构有关。
  2. 虚拟空间中已链接和划分好的内容装入内存,并将虚拟地址映射为内存地址的问题,称之为地址重定位或地址映射。

地址映射就是要建立虚拟地址与内存地址的关系,实现地址重定位或地址映射的方法有两种:静态地址重定位和动态地址重定位
静态地址重地位是将虚拟空间程序执行之前由装配程序完成地址映射工作。
动态地址重地位是将程序执行过程中,在CPU访问内存之前,将要访问的程序或数据地址转换成内存地址。动态重定位依靠硬件地址变换机构完成。

内存的分配与回收

当进程执行结束之后,存储管理模块又要及时回收该进程所占用的内存资源,以便给其他的进程分配资源。
在设计、回收资源时,我们要考虑一下几个方面

  1. 分配结构:登记内存使用情况,供分配程序使用的表格与链表
  2. 放置策略:确定调入内存的程序和数据在内存中的位置。这是一种选择内存空闲区的策略
  3. 交换策略:在需要将某个程序段和数据调入内存时,如果内存中没有足够的空闲区,由交换策略来确定把内存中的哪些程序段和数据段调出内存,以便腾出足够的空间
  4. 调入策略:外存中的程序段和数据段什么时间按什么样的控制方式进入内存。调入策略与内外存数据流动控制方式有关
  5. 回收策略:回收策略重在回收的时机和对回收的内存空闲区和已存在的内存空闲区的调整

分区存储管理
什么是分区存储管理?
分区管理是把内存划分若干个大小不等的区域,除去操作系统占用一个区域之外,其余由多道环境下的各并发进程共享。分区管理是满足多道程序设计的一种最简单的存储管理方法

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

  • 固定分区法
    固定分区法就是把内存区固定地划分为若干个大小不等地区域。分区划分的原则由系统操作决定。系统对内存的管理和控制通过数据结构分区说明表进行,分区说明表说明各分区号、分区大小、起始地址和是否是空闲区(分区状态)。内存的分配释放、存储保护以及地址变换等都通过分区说明表进行。
    在这里插入图片描述

  • 动态分区法
    与固定分区法相比,动态分区法在作业执行前并不建立分区,分区的建立是在作业的处理过程中进行的,且其大小可随作业或进程对内存的要求而改变。
    采用动态分区法,在系统初启时,除了操作系统中常驻内存部分之外,只有一个空闲分区。随后,分配程序将该区依次划分给调度选中的作业或进程。
    在这里插入图片描述

分区的分配与回收

  • 固定分区时的分配与回收

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

  • 动态分区时的分配与回收

动态分区时的分配与回收主要解决三个问题:

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

动态分区时的分配方法从可用表或自由链中寻找空闲区的常用三种方法:最先适应法、最佳适应法、最坏适应法
最先适应法:要求可用表或自由链按起始地址递增的次序排列。该算法的最大特点是一旦找到大于或等于要求的内存长度的分区,则结束搜索。然后,该算法从所找到的分区中划出所要求的内存长度分配给用户,并把剩下的部分合并在可用表中
在这里插入图片描述

最佳适应法:要求从小到大的次序组成空闲区可用表或自由链。当用户作业或进程申请一个空闲区时,存储管理程序从表头开始查找,当找到第一个满足要求则结束搜索。然后,该算法从所找到的分区中划出所要求的内存长度分配给用户,并把剩下的部分合并在可用表中

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

覆盖与交换技术

覆盖技术
其基本思想是:一个程序并不需要一开始就把它的全部指令和数据都装入内存后执行。单CPU系统中,每一个时刻事实上只能执行一条指令。可以把程序划分若干各功能上相对独立的程序段,按照程序的逻辑结构让那些不会同时执行的程序段共享同一块内存区。通常,这些程序段都被保存在外存中,当有关程序段的先头程序段已经执行结束后,再把后续程序段调入内存覆盖前面的程序段。这使得用户看来,好像内存扩大了,从而达到了内存扩充的目的。
覆盖技术要求程序员提供一个清楚的覆盖结构。即程序员必须完成把一个程序划分成不同的程序段,并规定好它们的执行和覆盖顺序的工作

交换技术
多道程序环境或分时系统中,同时执行好几个作业或进程。但是,这些同时存在于内存中的作业或进程,有的处于执行状态或就绪状态,而有的则处于等待状态。
一般来说,等待时间比较长,如果让这些等待中的进程继续驻留内存,将会照成存储空间的浪费。因此,应该把处于等待状态的进程换出内存。
实现将等待状态的进程换出内存最常见的做法是交换。广义来说,交换是指先将内存某部分的程序或数据写入外存交换区。再从外存交换区中调入指定的程序或数据到内存来,并让其执行的一种内存扩充技术。于覆盖技术相比,交换不要求程序员给出程序段之间的覆盖结构。而且,交换主要是再进程或作业之间进行。而覆盖则主要在同一个作业或进程进行。另外,覆盖只能覆盖那些与覆盖程序段无关的程序段。
交换进程由换出和换入两个过程组成。其中换出(swapout)过程把内存中的数据和程序换到外存交换区,而换入(swapin)过程把外存交换区中的数据和程序换到内存分区中。
换出过程和换入过程都要完成与外存设备管理进程通信的任务。由交换进程发送给设备进程的信息m中应包含分区的分区号i,该分区的基址basei,长度sizei和方向及外存交换区中分区起始地址。交换进程和设备管理进程通过设备缓冲队列进行通信。
在这里插入图片描述

在换出过程swaoout(i)中,除了前5行描述所需要的控制信息之外,backupstorbasei是用来记录被换出数据和程序的起始地址以便换入时使用的。而send指令则驱动设备做相应的数据读写操作。
在这里插入图片描述

页式管理
页式管理的基本原理
分区式管理方式尽管实现方式较为简单,但存在者严重的碎片问题使得内存的利用率不高。再者,分区式管理,由于各作业或进程对于于不同的分区以及在分区内各作业或进程连续存放,进程的大小任受分区大小或内存可用空间的限制,并且分区管理不利于程序段和数据的共享。
页式管理正是为了减少碎片以及为了只在内存存放那些反复执行或即将执行的程序段或数据部分,而把那些不经常在线的程序段和数据存放于外存待执行调入,以提高内存利用率而提出的。
原理如下:

  1. 各进程的虚拟空间被划分为若干个长度相等的页。页长的划分和内存外存之间数据传输速度以及内存大小等有关。一般每个页长大约为1-4k,经过页划分之后,进程的虚地址变化为页号p与页内地址w组成

  2. 除了将进程的虚拟空间划分大小相等的页之外,页式管理还把内存空间也按页的大小划分为片或页面。这些页面为系统中的任一进程所共享。从而与分页管理不同,分页管理时,用户进程在内存空间内除了在每个页面内地址连续之外,每个页面之间不再连续

静态页式管理
静态页面管理方法是在作业或进程开始执行之前,把该作业或进程的程序段和数据全部装入内存的各个页面中,并通过页表和硬件地址变换机构实现虚拟地址到内存物理地址的地址映射
动态页式管理
动态页式管理是在静态的基础上发展起来的,分为请求式和预调入式
二者都是先只装入经常执行和调用的工作区部分,其他的动态调入。而二者区别就在调入方式上,请求式是当需要的执行某条指令发现不在内存,系统将外存中相应的页面调入内存。预调入方式是,系统对那些在外存的页进行调入顺序计算,估计出调入的顺序

段式管理
段式虚存空间
段式管理把一个进程的虚地址空间设计成二位结构,即段号s与段内相对地址w。与页式管理式不一样的是,页式管理中,被划分的页号按顺序编号递增排序,属于一维空间,而段式管理中的段号与段号之间无顺序关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值