Nameless Site

But one day, you will stand before its decrepit gate,without really knowing why.

0%

主存管理

主存管理概述

引言

现代操作系统将主存区分为物理主存和逻辑主存2类。
物理主存是共享的物质基础。

主存共享方式—分片共享

  • 大小不等的区域
    ① 分区存储管理
    ② 段式存储管理
  • 大小相等的区域
    页式存储管理
  • 二者结合
    段页式存储管理

现代操作系统的主存管理必须实现主存分配、主存保护、虚拟主存等功能,即:

  1. 将逻辑地址映射为物理主存地址
  2. 在多用户之间分配物理主存
  3. 对各用户区的信息提供保护措施
  4. 扩充逻辑主存区

程序的逻辑组织

一维地址结构

  • 一个程序是一个连续、线性的地址结构;
  • 确定线性地址空间中的指令地址或操作数地址只需要一个信息。

二维地址结构

  • 一个程序由若干个分段组成,每个分段是一个连续的地址区;
  • 确定线性地址空间中的指令地址或操作数地址需要两个 信息,一是该信息所在的分段,另一个是该信息在段内的偏移量。

image-20200105085223070

主存管理功能

几个概念

  • 物理地址 (绝对地址、实地址)
    物理地址是计算机主存单元的真实地址,又称为绝对地址或实地址。
  • 主存空间
    物理地址的集合所对应的空间组成了主存空间。
  • 逻辑地址 (相对地址、虚地址)
    用户的程序地址 (指令地址或操作数地址)均为逻辑地址。
  • 程序地址空间
    用户程序所有的逻辑地址集合对应的空间。

主存管理功能

  • 地址映射——实现逻辑地址到物理主存地址的映射
  • 主存分配 ——在多用户之间分配物理主存
  • 存储保护——对各用户区的信息提供保护措施
  • 主存扩充/虚拟主存——扩充逻辑主存区

地址映射

什么是地址映射 :将程序地址空间中使用的逻辑地址变换成主存中的物理地 址的过程,称为地址映射。

地址映射的时机和类别
① 编程或编译时确定地址映射关系
在程序编写或程序编译时确定虚、实地址之间的对应关系,结果是一 个不能浮动的程序模块。
② 在程序装入时确定地址映射关系
在程序装入过程中随即进行的地址变换方式称为静态地址映射
在这种情况下,一个已开始执行的程序是无法在主存中移动的;同时,如果该程序因某种原因暂时放在辅存,若再调入主存时,还必须把它放回到主存的同一位置上。
image-20200105091248853
③ 在程序运行时确定地址映射关系 在程序执行期间,随着每条指令和数据的访问自动地连续 地进行地址映射,这种地址变换方式称为动态地址映射。
经过动态重定位的程序,可以不经过任何改变而装入主存单元。
可满足以下目标:

  1. 具有给用户程序分配一个主存区域的能力
  2. 在改变系统设备时,具有不需要重新编程和重新编辑的能力
  3. 具有在任何时刻,在主存可用空间中重新分配一个程序的能力
  4. 对于一个用户程序,具有以间断方式分配主存的能力
  5. 具有只装入用户程序的部分代码即可投入运行的能力

image-20200105091228936

静态地址映射 动态地址映射
在程序装入过程中进行地址映射 在程序执行期间进行地址映射
需软件(重定位装入程序) 需硬件地址变换机构(重定位寄存器)
需花费较多CPU时间 地址变换快
不灵活 灵活

主存分配

构造分配用的数据结构
主存资源信息块:等待队列;空闲区队列;主存分配程序

制定策略
① 分配策略 —— 在众多个请求者中选择一个请求者的原则
② 放置策略 —— 在可用资源中,选择一个空闲区的原则
③ 调入策略 —— 决定信息装入主存的时机
预调策略:预先将信息调入主存
请调策略:当需要信息时,将信息调入主存
④ 淘汰策略 —— 在主存中没有可用的空闲区 (对某一程序 而言)时,决定哪些信息从主存中移走,即确定淘汰已占用的内存区的原则。

主存分配

构造分配用的数据结构
主存资源信息块:等待队列;空闲区队列;主存分配程序

制定策略
① 分配策略 —— 在众多个请求者中选择一个请求者的原则
② 放置策略 —— 在可用资源中,选择一个空闲区的原则
③ 调入策略 —— 决定信息装入主存的时机
预调策略:预先将信息调入主存
请调策略:当需要信息时,将信息调入主存
④ 淘汰策略 —— 在主存中没有可用的空闲区 (对某一程序 而言)时,决定哪些信息从主存中移走,即确定淘汰已占 用的内存区的原则。

实施主存分配与回收

主存扩充

可行性 局部性特征

实现方法

  • 程序的全部代码和数据存放在辅存中;
  • 将程序当前执行所涉及的那部分程序代码放入主存中;
  • 程序执行时,当所需信息不在主存,由操作系统和硬件相配合来完成主存从辅存中调入信息,程序继续执行。

虚拟存储器:由操作系统和硬件相配合来完成主存和辅存之间的信息的动态调度。这样的计算机系统好像为用户提供了一个其存储容量比实际主存大得多的存储器,这个存储器称为虚拟存储器
虚拟存储器的核心

  • 逻辑地址与物理地址分开
  • 存储空间与虚地址空间分开
  • 提供地址变换机构

实现虚拟存储器的物质基础

  • 有相当容量的辅存: 足以存放应用程序的虚地址空间
  • 有一定容量的主存: 存放进入主存的多进程的信息
  • 地址变换机构

存储保护

什么是存储保护 :在多用户环境中,主存储器按区分配给各用户程序使用。 为了互不影响,必须由硬件 (软件配合)保证各用户程序只 能在给定的存储区域内活动,这种措施叫做存储保护。

实现方法

  1. 界地址保护
    1. 上下界防护 物理地址
      image-20200105091048112
    2. 基地址、限长防护 逻辑地址
      image-20200105091157055
  2. 存储键保护

分区存储管理

动态分区分配

什么是动态分区分配:在处理程序的过程中,建立分区,依用户请求的大小分配分区。

分区分配数据结构
① 主存资源信息块 (M_RIB)
② 分区描述器 (PD)
flag: 为 0 —— 空闲区
为 1 —— 已分配区
size: 分区大小
next:空闲区——自由主存队列中的勾链字
已分配区——此项为零

M_RIB

等待队列头指针
空闲区队列头指针
主存分配程序入口地址

PD

分配标志 flag
大小 size
勾链字 next

image-20200105091701189

分区的分配与回收

分区分配思路
① 寻找空闲块
依申请者所要求的主存区的大小,分区分配程序在自由主存队列中找一个满足用户需要的空闲块;
② 若找到了所需的空闲区,有两种情况
ⅰ 空闲区与要求的大小相等,将该空闲区分配并从队列中摘除;
ⅱ 空闲区大于所要求的的大小,将空闲区分为两部分:一 部分成为已分配区,建立已分配区的描述器;剩下部分 仍为空闲区。返回所分配区域的首址;
③ 否则,告之不能满足要求。

分区回收思路
① 检查释放分区 (即为回收分区)在主存中的邻接情况
若上、下邻接空闲区,则合并,成为一个连续的空闲区
② 若回收分区不与任何空闲区相邻接
建立一个新的空闲区,并加入到空闲区队列中。