《操作系统》第五章 存储器管理

本文详细探讨了存储器管理的各个方面,包括存储层次结构、程序的三种装入与链接方式,重点剖析了动态分区分配的算法(首适应、循环、最佳、最坏和快速适应)及其优缺点。此外,深入讲解了分页管理(带快表)、分段管理(包括段页式)以及它们的特点和地址变换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第五章 存储器管理

1.存储器层次结构:CPU寄存器、主存、辅存

2.程序三种装入方式:程序逻辑地址到内存物理地址的映射

3.程序三种链接方式:把相关模块整合成为一个整体

4.内存连续分配方式

4.1单一连续分配:单任务单个分区

在这里插入图片描述

4.2固定分区分配:分区大小固定,每个分区装入一个程序

在这里插入图片描述

⑴、首次适应算法(FF):按序选择第一个满足要求的内存区
⑵、最佳适应算法(BF):仅当与程序大小相当的分区空闲时才予分配态分区分配:根据程序大小分配空间,易产生碎片

有A、B、C、D、E五个作业,大小分别为7K,24K,20K,40K,90K。A、B两作业先分别装入内存区1、3运行,C、D、E处于后备队列

在这里插入图片描述
在这里插入图片描述

4.3动态分区分配:根据程序大小分配空间,易产生碎片

4.3.1分配所用的数据结构:

在这里插入图片描述

4.3.2回收操作

回收操作:三种相邻情况的回收

在这里插入图片描述

4.3.3分配算法:首适应、循环、最佳、最坏、快速适应
4.3.3.1首次适应算法(FF)

按序选择第一个满足要求的内存区
优点:保留高地址部分的大空闲区
缺点:低地址存在很多小的、无法利用的空闲分区,且查找时间较长

举例:现有F(32K)加入

在这里插入图片描述

4.3.3.2循环首次适应算法(CF)

从上次找到空闲分区的下一个分区开始,按序选择第一个满足要求的内存区

优点:空闲分区在内存中均匀分布,查找时间少
缺点:缺乏大的空闲分区

举例:现有F(32K)加入(假设上一次加入的作业为D)

在这里插入图片描述

4.3.3.3最佳适应算法(BF)

在整个空闲空闲分区中查找大小与用户程序大小最相近的空闲分区
为了加快查找速度,将空闲分区链表从小到大排列

优点:提高了内存使用效率,保留大的空闲区
缺点:存在许多很小的、无法利用的空闲分区

举例:现有F(32K)加入

在这里插入图片描述

4.3.4动态分区分配特性

优点:可以按照用户进程实际大小,动态地分配内存空间,提高内存的使用效率
缺点:不管采用何种算法,都必将产生小的、不可利用的空闲分区(碎片)

5.基本分页管理:非连续分配,离散分布在内存不同位置

5.1.页面与物理块

5.1.1页与块的关系

页是程序逻辑空间上的划分
块是内存物理地址上的划分
两者大小相等,通过页表一一对应

5.1.2页面大小(L)

为了提高内存使用效率,页面不能太大(尽量减少进程最后一个页面的空闲空间)
为了提高内存分配效率及换进/换出效率,页面不能太小
页面大小L一般选择2的次幂,如29(512Bytes)-212(4KBytes)之间

5.2分页的地址结构:页号+页内地址

在这里插入图片描述

页号P: P = A/L
页内地址d: d = A%L
如A=2170B,L=1KB,则P=2,d=122

页面大小L一般选择2的次幂的好处,计算机方便计算

如 0000 0000 0000 0000 0000 0100 0000 0010 :页号为2,页内地址为2

5.3页表:记录每个页对应的物理块

在这里插入图片描述
在这里插入图片描述

5.4分页地址变换过程

将逻辑地址分为页号与页内地址
如果页号大于页表长度,越界错误
页表始址与页号和页表项长度的乘积相加,得页表(内存中)中位置
从页表中相应位置,得到物理块号送入物理地址寄存器的内存物理块字段中
将逻辑地址的页内地址部分送入物理地址寄存器的块内地址字段中

在这里插入图片描述

注意区分以下三个长度:

页面长度:指一个页面占的内存空间,也就是逻辑地址中可以表示的最大页内地址(页内偏移量)
页表长度:指页表存放页面的最大数量
页表项长度:页表项指页号(隐含)+块号的表项,页表项长度就是指存储该项所用的内存

在这里插入图片描述

5.5带快表的分页

5.5.1地址变换过程

将逻辑地址分为页号与页内地址
如果页号大于页表长度,越界错误
将页号送入快表中进行并行查找,如果从快表中找到所需页号,则将快表中对应的物理块号送物理地址寄存器
页表始址与页号和页表项长度的乘积相加,得页表(内存中)中位置
从页表中相应位置,得到物理块号送入物理地址寄存器的内存物理块字段中
将逻辑地址的页内地址部分送入物理地址寄存器的块内地址字段中

在这里插入图片描述

5.5.2快表有效访问时间计算

快表访问时间为20ns,内存访问时间为100ns
如果由快表访问成功,需时120ns,否则为220ns

#### 5.5.2快表有效访问时间计算

如果对快表的访问与对内存的访问同时进行
如果由快表访问成功,需时120ns,否则为200ns

在这里插入图片描述

5.6两级页表与多级页表:对页表本身采用分页管理

一级页表存在的问题:
当逻辑地址空间非常大(232-264)时,页表将变得非常大
如每个页面大小为4KB,逻辑地址空间为232时,需要220(即1M)页表项,每个页表项占用4个字节,每个进程共需要4MB页表(连续内存空间)

采用两级页表
将页表以离散方式放入内存

采用外层页表、页表和页内地址三层结构

在这里插入图片描述

例:有一基本分页存储管理系统,内存块大小为512Bytes,(页表存放于一块中),每个块号占用4个Bytes,如果页表也以离散方式放在内存中,求采用一级页表和两级页表,系统能支持文件的逻辑空间最多为多少?假如逻辑地址为12345H,求页内地址和外层页号。

每个内存块号占4Bytes,即每个页表项占4B
每个内存块大小为512Bytes,
每个内存块可放下最多512/4=128个页表项
采用一级页表能支持文件的逻辑空间最多为:128x512=64KBytes
采用二级页表能支持文件的逻辑空间最多为:128x128x512=8MBytes

512占用9bits,即页内地址占9bits
128占7bits,即外层页内地址占7bits
12345H=0001,0010,0011,0100,0101b
页内地址=后9bits=1,0100,0101b=145H
外层页号=(9+7)bits以上地址=0001b=1H

在这里插入图片描述

当逻辑地址空间非常巨大(如264)时,页表将变得非常巨大
如每个页面大小为4KB,逻辑地址空间为264时,需要252(即4096G)页表项,每个页表项占用8个字节,每个进程共需要32768GB页表
必须分成更多级,如四级等

6.基本分段管理:分段是具有逻辑意义的分隔

6.1分段目的

从内存管理的角度看,分段可以提高内存分配效率
从用户角度看,分段可以达到以下目的:方便编程、分段共享、分段保护、动态链接、动态增长

6.2段表

在这里插入图片描述

6.3分段地址变换过程

将逻辑地址分为段号与段内地址
如果段号大于段表长度,越界错误
段表始址与段号和段表项长度的乘积相加,得段表中位置
从段表中相应位置,得到段的首址及段的长度
如段内地址大于段长度,越界错误
将段的内存首址与段内地址相加,得内存物理地址

在这里插入图片描述

6.4带快表的分段

为了访问段内数据,必须两次访问内存。同样可以采用快表,将段表放入快表中
由于进程中,段的数目远比页的数目少,因此,所需要的段也比页面少,因此,访问快表的命中率也比较高,因此,采用快表的分段地址变换,一般仅比常规内存访问慢10%-15%

6.5页与段的区别

页是信息的物理单位(满足系统管理的需要) 段是信息的逻辑单位(满足用户的需要)
页的大小固定(由系统决定)      段的大小不固定(由用户决定)
分页的作业(进程)地址是一维的    分段的作业(进程)地址是二维的

7.段页式管理:先分段后分页

7.1段页式的引入

由于段是由用户按编程需要设定的,因此其大小不固定
段需要连续分配内存空间,因此,同样存在连续分配存储管理方式中存在的缺点
结合段与页式管理的优点,既节省内存空间,提高内存分配的效率,又兼顾用户编程的需要
在这里插入图片描述

7.2段页式的组成

在这里插入图片描述

在这里插入图片描述

7.3段页式地址变换过程

将逻辑地址分为段号、段内页号和页内地址
如果段号大于段表长度,越界错误
将段表始址与段号相加,得段表中位置
从段表中相应位置,得到该段页表的首址
将段内页号与页表首址相加,得页表中位置
从页表中相应位置,得到物理块号p
将块号p与页内地址d组合成物理地址

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值