第三章


1. 存储管理的功能

  1. 地址转换:把逻辑地址转换成物理地址
  2. 主存空间的分配和去配
  3. 主存空间的共享
  4. 存储保护:
    1. 私有主存中的信息,其所有者可读可写
    2. 公共区的共享信息,根据授权以确定相关进程的使用权限
    3. 非本进程的信息,其他进程不可读写
  5. 主存空间的扩充:
    1. 对换技术:将不占有CPU运行的进程调出主存,以提高主存使用效率
    2. 虚拟技术:根据程序执行的局部性原理,在磁盘上建立一个比实际主存空间大得多的地址空间以装入程序

2. 单连续分区存储管理

1. 单用户连续分区存储管理

操作系统占用一部分内存空间,剩下作为一个连续区分配给一个作业使用。每个进程占有物理上完全连续的存储空间。

装入程序:对作业进程进行静态地址重定位

界限寄存器:检测用户进程是否越过界限地址去访问操作系统区以实现存储保护

单一连续存储管理

2. 固定分区存储管理

基本思想:贮存用户空间被划分成数目固定不变的分区,各分区大小不等,每个分区只装入一个作业的进程,若多个分区中都有作业进程,则它们可以并发执行

管理各分区的分配和使用情况,只需要设置一张贮存分配表

分区号 起始地址 长度 占用标志
1 8KB 8KB Job1
2 16KB 16KB 0
3 32KB 16KB 0
4 48KB 16KB 0
5 64KB 32KB Job2

image-20211224095926599

3. 可变分区存储管理

可变分区存储管理按照进程主存需求大小来划分分区

主存空间的分配和去配:用于管理的数据结构可由两张表组成(已分配区表和未分配区表)

1. 分配:从未分配区表找出一个足够容纳它的空闲区,将此区分为两部分,一部分用来装入作业,成为已分配区,另一部分仍未空闲区
2. 去配:
1. 可变分区主存分配算法:
  1. 最先适配算法:从未分配区按起始地址从小到大顺序找到第一个能满足长度要求的空闲区
  2. 下次适配算法:从未分配区上次扫描结束处顺序查找直到找到第一个能满足长度要求的空闲区
  3. 最优适配算法:从为分配区表按照分区长度从小到大顺序找出第一个能满足长度要求的空闲区
  4. 最坏适配算法:从为分配区表按照分区长度从大到小顺序找出第一个能满足长度要求的空闲区
2. 地址转换与存储保护

采用动态地址重定位

设置基址寄存器和限长寄存器,基址寄存器存放分配分区的起始地址,限长寄存器存放进程所占的连续空间的长度。当逻辑地址大于限长值时,不允许访问

3. 可变分配的主存外零头

在可变分区方式中,由于进程不断的装入和撤销,导致主存中出现分散的、基本不可用的小空闲区,称之为外部碎片

当未分配区表中找不到足够大的空闲区来装入新进程时,可以把主存中的进程分区连接在一起,使分散的空闲区汇集成片,即是主存紧凑

3. 页式存储管理

基本思想:将主存划分为多个大小相等的页框,按照页框尺寸,将程序的逻辑地址划分为逻辑上的页

逻辑地址:页式存储管理中,逻辑地址可以解读成页号+地址偏移量,如下图

img

地址转换基本思路如下图

页式存储管理地址转换

地址转换:在硬件中设置联想存储器,用来存放进程最近访问的部分页表项,存储在联想存储器的页表部分也称转换后援缓冲器(translation lookside buffer, TLB)或快表

进程表:操作系统建立进程表,其中登记了每个进程的页表起始地址和长度,当进程占有CPU运行时,将从进程表送入页表控制寄存器

页表控制寄存器:包括页表基址和页表长度,存在PCB中

未命名绘图1

1. 页式虚拟存储管理

基本思想:装入进程时,把它的全部页面装入虚拟存储器,但执行时,先将部分页面装入实际主存,然后根据执行行为动态调用不在主存的页面,同时进行必要的页面调出

页式虚拟存储管理需要对进程的页表进行扩充,既需要记录进程每页的实际地址,又需要记录虚拟地址,还需要引入一系列表示,具体包括:

  1. 主存驻留表示:记录该页是否驻留在主存
  2. 写回标志:记录该页在主存中有无被修改,当该页需要从主存淘汰,且该页被修改,则需要写回磁盘
  3. 保护标志:记录该页的保护属性,供共享保护使用
  4. 引用标志:记录该页的引用情况,供页面淘汰算法使用
  5. 可移动标志:记录该页是否可以移动,正在与外设交换的页面是不能被移动的

2. 页面调度

选择淘汰页的工作称为页面调度,相应的算法称为页面调度算法

  1. 最佳置换(optimal replacement, OPT):首先淘汰以后不会访问的页,如果没有这样的页,讨论距离现在最长时间后再访问的页
  2. 先进先出(FIFO):淘汰最先调入主存的页
  3. 最近最少使用(least recently used, LRU):淘汰最近一段时间较久未被使用的页
  4. 最不常用(least frequently user, LFU):淘汰最近一段时间内访问次数较少的页
  5. 时钟(clock):采用循环队列机制构造页面队列

4. 段式存储管理

应用程序由若干程序段和数据段组成,每段都从0开始编址,有各自的名字和长度,且实现不同的功能

段式存储管理的实现基于可变分区存储管理原理,每个分段占有一个分区。再进行存储分配时,应为进入主存的进程建立段表。各段在主存中的情况可由段表来记录

段式存储管理把进程的逻辑地址空间分成很多段,提供如下形式的二位逻辑地址:$[段号 : 段内位移]$

1. 段式虚拟存储管理

基本思想:进程在装入主存时,其所有分段都存放在虚存中,进程运行时先把当前需要的一段或几段装入主存,在执行过程中访问不在主存的段时再把它动态装入

段式虚拟存储管理需要对段表进行扩充,标志位也要进行扩充,包括:

  1. 特征位:表示是否在主存或共享段
  2. 存取权限位:表示是否可执行,可读,可写
  3. 扩充位:表示段长度是否能动态扩充
  4. 标志位:表示是否被修改,是否可移动

5. 段页式存储管理

基于页式存储管理思想实现的段式存储管理,在这种模式下,每一段不必占据连续的存储空间,而是存放在不连续的主存页框中

逻辑地址结构如下:$[段号 : 页号 | 页内地址]$

未命名绘图2