存储管理

存储管理的概念

  • 功能:内存的分配与回收;地址转换;信息的共享与保护;内存扩充
  • 存储分配的方式:静态分配—在一个作业装入内存时必须分配其要求的全部存储量;一旦装入内存后,在其退出系统之前,它一直占据这分配给它的全部存储空间。动态分配—可以根据需要动态地增加分配存储空间
  • 重定位:地址重定位完成的是将相对地址(逻辑地址)转换为内存的绝对地址(物理地址)
    • 静态重定位:在程序装入后且运行之前,一次性将需要的转换的逻辑地址转换为物理地址;
    • 动态重定位:在程序执行期间每次内存之前进行重定位

分区存储管理

固定分区

  • 分区划分:分区大小相等;分区大小不等
  • 内存分配:分区说明表(分区号,分区大小,分区起始地址及状态等),作业表(作业号,作业大小,作业占用分区号等)
  • 地址转换:可采用静态定位方式或动态定位方式

可变分区

  • 当一个新的作业要求装入时,必须找到一个足够大的空闲区,如果找到的空闲区大于作业需要量,则作业装入前把这个空闲区分成两部分,一部分配给作业使用,另一部分又成为一个较小的空闲区。当一个作业运行结束撤离时,它归还的区域如果与其他空闲区相邻,则应该合成一个较大的空闲区,以利于大作业的装入。
  • 内存分配表:一张是分配区表,另一张是未分配区表
  • 地址转换:采用动态定位方式,作业程序和数据的地址转换是硬件完成的

分配和释放算法

分配算法:由于实施内存分配时,内存中的空闲区不止一个,所以在作业申请内存空间时,需要在其中选择一个来实施分配。

  • 首次适应算法(first fit):要求空闲区按地址大小递增的次序排列,在分配时,从未分配区表开始位置顺序查找,直到找到第一个能满足其大小要求的空闲区为止。
  • 循环首次适应算法(next fit):其实在首次适应算法的基础上变形的,在分配内存空间时,从上次找到的空闲区的下一个空闲区开始查找。
  • 最佳适应算法(best fit):要求空闲区按容量大小递增的次序排列,从未分配区表开始位置顺序查找,直到找到第一个能满足其大小要求的空闲区。
  • 最坏适应算法(worst fit):要求空闲区按容量大小递减的次序排列,先检查未分配区表中的第一个空闲区,若地一个空闲区小于作业多要求的大小,则分配失败,总是挑选满足作业要求的最大的分区分配给作业。

释放算法:当作业执行结束时,应回收已使用完毕的分区。系统根据回收分区的大小及首地址,在未分配区表中检查是否有邻接的空闲区,如有相邻空闲区则合并成为一个大的空闲区。

覆盖和交换技术

覆盖:按自身逻辑把程序分成几个功能上相对独立的模块,不会同时执行的模块可以共享同一块内存区域,按时间先后运行(分时)。

交换:指把内存中暂时不能运行的进程或暂时不用的程序和数据换出到外存,以腾出足够的内存空间。

覆盖和交换的区别:覆盖技术要求编程人员提供一个清楚的覆盖结构,即程序员要把一个程序划分成不同的程序段,并规定程序段的执行和覆盖顺序。交换技术不要求编程人员给出程序段之间的覆盖结构,它主要是在进程或作业之间进行,而覆盖技术则主要是在同一个作业或进程之间进行。交换技术的运用,可以在较小的存储空间中运行较多的作业或进程;覆盖技术的运用,可以在较小的存储空间中运行比其容量大的作业或进程。

页式存储管理

基本概念

  • 页框(块号):把内存空间划分为大小相等的若干存储区域,将物理内存划分为页框
  • 页面(页号):程序逻辑地址空间按页框大小分为若干片,不足一页的部分补为一页
  • 页表:表明页面和页框的对应关系,由页号和块号构成

页面转换

  • 逻辑地址=页号*页面长度+页内地址
    • 页号=逻辑地址/页面长度
    • 页内地址=逻辑地址%页面长度

虚拟存储管理

基本概念

  • 程序局部性原理:指CPU对指令和数据的存取在时间上、空间和顺序上往往集中在一定的范围内。
  • 虚拟存储器:是操作系统对物理内存的逻辑扩充。基于程序运行的局部性原理,将程序中正在使用的部分放在内存,而其余部分放在磁盘,如果CPU需要访问不在内存的程序和数据,则系统自动将这部分信息装入内存。

页面置换算法

在需要调入页面且内存已满时,确定将要换出页面的算法。(访问不成功:缺页和置换)

  • 最佳置换算法(OPT):选择永不使用的或者在最长时间内不再被访问的页面进行置换。
  • 先进先出置换算法(FIFO):选择最先进入内存的页面进行置换,即选择在内存中驻留时间最久的页面进行淘汰。
  • 最近最久未使用置换算法(LRU):选择最近一段时间内最长时间没有被访问过的吗页面进行置换。
    • 用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。当数组空间已满时,将时间戳最大的数据项淘汰。
posted @ 2020-07-27 18:12  Littlejiajia  阅读(358)  评论(0编辑  收藏  举报