Skip to content

(七)操作系统-主存储器管理

Published: at 14:22:12

主存储器的管理功能

主存分配

地址转换和重定位

存储保护和主存共享

存储扩充

地址映射

什么是地址映射?

首先,在多用户共享主存时,需要由系统分配主存;

一般情况下,一个作业程序分配到的存储空间和它的地址空间是不一致的;

因此作业的相应进程在处理器上运行时,所要访问的指令和数据的实际地址和地址空间中的地址是不同的;

所以,处理器在执行指令时,必须把逻辑地址转换为绝对地址后,方能访问信息。

地址映射方式

  1. 编程或编译时确定地址映射关系
    • 如果虚——实地址间的对应关系是在程序编写或者程序编译时实现的,则结果为一个不能浮动的程序模块,它必须被放在主存某一确定的地址中,而且永不会改变,因为它所包含的全部地址都是主存地址,在这种情况下,把这样一个程序装入主存,就必须在申请主存时,具体地提出申请的主存容量和主存地址,因此主存分配程序在分配时将没有什么活动余地。
  2. 静态地址映射
  3. 动态地址映射

固定分区存储管理

把主存分成若干个固定大小的存储区(又称存储块),每个存储区分给某一个作业使用,直到该作业完成后才把该存储区归还系统;

分单道作业和多道作业两种情况;

  1. 单用户、单道作业情况
  2. 多道作业情况 • 操作系统区、用户使用的分区; • 主存中分区的区数是固定不变的,每区的大小也是固定不变的; • 分给每个作业一块大于或等于作业大小的主存分区,不允许两个作业同时放于同一个分区中; • 问题:分区中常有未用的、剩下的空闲部分,即存储碎片,降低了主存的利用率; • 存储分块表:主存分区情况说明信息,存储区的使用状况信息,包括大小、位置和状态三项信息。

存储分块表

储保护功能

优点:简单,要求的硬件支持只是一对界地址寄存器,软件算法简单;

缺点:主存利用率不高。

可变分区存储管理

所谓可变分区,是指主存事先并未划分成一块块分区,而是在作业进入主存时,按该作业的大小建立分区,分给作业使用;

特点:

  1. 分区个数是可变的,每个分区的大小也是不固定的;
  2. 主存中分布着个数和大小都是变化的空闲分区或碎片,这些空闲分区有些可能相当大,而有些则相当小。

存储分配算法

最佳适应法

最先适应法

最坏适应法

三种放置策略的说明:

Untitled

碎片问题

由于各作业请求和释放主存块的结果,产生很多小的碎片,碎片的存在降低了多道的程度,造成了主存空间的大量浪费;

解决碎片问题

  1. 把程序分成几部分装入不同的分区中去,改变一直把程序作为一个连续的整体在主存中存放的要求;
    • 改善了碎片问题,但却增加了程度管理和执行的复杂性;
  2. 把小碎片集中起来使之成为一个大分区;
    • 移动各用户分区中的程序,使它们集中于主存的一端,使碎片集中于另一端,从而连成一个完整的大分区,即存储器的“紧缩”或“澄清”。

动态重定位

动态重定位:

是指程序的重定位时机不是在程序执行前进行,而是在程序执行过程中才进行地址转换,更确切地说是在每次访问主存单元前才进行地址转换;

重定位过程:

  1. 首先将用户按相对地址编址的目标程序原封不动地装入主存中分给该用户使用的分区中;
  2. 当该用户程序被调度到处理器上执行时,操作系统自动将该用户作业的起址由作业表中取出,并将分区起始地址减去用户目标程序的相对基地址,然后将其减得值装入定位寄存器中;
  3. 当处理器要访问主存时,地址转换硬件自动将程序中的相对地址与定位寄存器中的内容相加,并按相加的和作为主存绝对地址去访问数据。

采用动态重定位后,由于目标程序装入主存后不需要修改地址指针及所有与地址有关的项,因而程序可在主存中随意浮动而不影响其正确执行,从而可以方便地进行存储器紧缩,较好地解决了碎片问题。

多重分区存储管理

单对界地址管理技术:

多对界地址管理技术:

简单分页存储管理

前述固定分区和可变分区存储技术存在着一定的缺点;

分页技术思想的由来;

分页存储管理技术中的基本作法;

主存分配原则;

地址转换过程

  1. 首先将逻辑地址左边表示页号部分的页号抽取出来;
  2. 以页号作为索引查找该进程页表,找出该页存放的主存页架号;
  3. 用此页架号(二进制形式)取代逻辑地址的左边部分,并与右边的页内地址合并成相应的物理地址去访问主存。

简单分页方法的优点

  1. 它基本没有页内碎片,只是在每个进程的最后一页中,会有页内碎片;也不会有小到不可再用的页外碎片,主存的利用率高;
  2. 不管采用哪种数据结构(空闲页架表、位图、空闲页架链表等),分配和释放存储都很快;
  3. 管理简单(类似于固定分区的情况)。

简单分段存储管理

为什么需要按段分配主存

  1. 事先将用户逻辑地址空间连接成一维线性地址空间,既费时又不便于作业的执行,尤其不便于共享;
  2. 因此,人们希望按照程序模块来划分段,并按这些段来分配主存;
  3. 段,就是一组逻辑信息的集合,如子程序、数组和数据区等。

简单分段特点

分段和分页的比较