第五章 存储器管理
目录
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
如果对快表的访问与对内存的访问同时进行
如果由快表访问成功,需时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组合成物理地址