操作系统-存储器管理

1.概述

​ 存储器管理涉及一下五个功能:

​ 1. 存储器分配,主要解决多道程序和多程序如何共享主存的问题

​ 2. 地址转换和重定位,研究各种地址变换方法及相应的地址变换机构

​ 3. 存储器保护

​ 4. 存储器扩充

​ 5. 存储器共享

地址空间:程序限定的空间叫逻辑地址空间,其中的地址叫做相对地址或逻辑地址

存储空间:存储空间是物理存储器中全部物理单元的集合所限定的空间,由字或字节组成的大大的阵列,每个字和字节有自己的编号。

地址重定位

  1. 链接

    链接就是将汇编/编译产生的一个或多个目标代码与所需要的库函数装配成一个可执行程序;链接有两种方式:静态和动态。采用静态链接时,在程序装入内存运行前,就将目标模块和库事先连接成可执行程序;动态链接分为装入和运行时两种,装入就是指将目标模块装入主存时,边装入边链接,运行就是指运行时才链接。运行时链接的效率更高

  2. 静态重定位

    在逻辑地址转换为物理地址的过程中,地址变换是在进程装入时一次完成的,以后不再改变。

    优点:是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。

    缺点:内存空间不能移动;各个用户进程很难共享内存中同一程序的副本

  3. 动态重定位

    动态运行的装入程序把转入模块装入内存之后,并不立即把装入模块的逻辑地址进行转换,而是把这

    种地址转换推迟到程序执行时才进行,装入内存后的所有地址都仍是逻辑地址。这种方式需要寄存器的支持,其中

    放有当前正在执行的程序在内存空间中的起始地址。

    优点:内存空间可以移动;各个用户进程可以共享内存中同一程序的副本。

    缺点:增加了机器成本,而且实现存储管理的软件算法比较复杂。

    1. 存储器保护

    存储器分为两部分,一是操作系统占用区,另一部分是多用户进程分享的用户占用区。保护涉及两个方面:地址越界和存取方式的保护

    1. 存储器共享
2.单用户单道程序的存储器分配

​ 单一连续区分配,整个系统资源利用率低

3.多用户多道程序存储器分配——分区分配

​ 固定式分区、可变式分区

固定式分区

​ 固定式分区是适合多到程序运行的最简单的存储器管理,把主存用户区预先划分为几个大小不等的区域,当进程到达时,选择一个合适进程要求最小的,空闲分区分给进程;没有合适的空闲分区的时候,让其等待。为了充分利用存储器,将进程按照请求空间的大小在不同分区排队等待。

​ 这种方法管理简单,但有可能出现大分区队列空闲,小分区队列拥挤的现象。当这情况出现时,会使存储器造成更大的浪费,为了充分利用存储器,系统只维护一个存储器等待队列,任何时候,只要有一个分区变为空闲,队列中的一个进程就可装入运行

可变式分区

​ 为了提高存储器的利用率,存储空间的划分推迟到装入进程时进行,当进程要求运行时,系统从空闲的存储空间划分出大小正好等于进程大小的一个存储区分配给进程,这叫做可变式分区或者动态分区,使用这种技术时,分区的大小和个数不断变化。

​ 可变式分区能改进存储器的使用效率,但是却使存储的分配和释放工作复杂了

可变式分区管理使用的数据结构

​ 1.分区说明表:由两张表格组成,一张是已分配区表,记录已分配给进程的分区情况;另一张是未分区表,记录主存空闲区的情况。

​ 2.空闲区链:记录存储空间的一个较好方法就是表格信息附加在每个已分配取和未分配区中,通常将表格信息放在每个分区的首字或尾字中。已分配的信息放在各个进程的PCB表中,空闲区的信息用空闲链表管理

分区管理的地址重定位和存储器保护

​ 固定式分区采用静态重定位,在装入的时候,上下界限两个寄存器来保护存储器,方式地址越界错误

​ 可变式分区采用动态重定位,系统会设置一个基址(重定位)寄存器,存放运行进程分配的主存区起始地址,再增设一个限长寄存器,用来存放运行程序的大小,也是起到保护作用。

分区管理的优缺点

​ 优点:实现了多道程序共享主存、实现分区管理的系统设计相对简单、实现存储器保护的手段也比较简单

​ 缺点:主存利用不够充分、没有实现主存的扩充问题