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

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

第五章 存储器管理

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组合成物理地址

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值