OS中的存储管理主要是指对内存的管理
是为多道程序共享内存提供支持,方便用户(编程)使用存储器,提高存储器的利用率以及从逻辑上扩充存储器
存储器的宏观认识
-寄存器:极少量的、极快速、极昂贵、易变
-Cache(CPU高速缓存):少量的、非常快速、昂贵、易变
-内存RAM:中等大小、中等速度、中等价格、易变
-磁盘: 大容量、低速、价廉、不易变
CPU可以直接访问寄存器、CPU缓存和主存储器又叫可执行(直接存取)存储器
程序的编译、链接和装入
逻辑地址:又称相对地址,用户程序经过汇编或编译后形成目标代码,目标代码的首地址通常为0,是给用户看的。
物理地址:又称绝对地址,标识程序在内存中物理单元实际位置。
程序装入内存的过程:编译(转换为二进制)->链接(修改相对地址,变换外部调用符号)->装入,先将每段程序翻译为二进制机器语言,再将不同程序段链接(组装)为一段拥有连续逻辑地址的程序,最后将程序加载到内存某个空闲的区域(此时每条代码或变量将拥有物理地址)
连续分配储存管理方式
连续分配:程序在内存中必须占用连续的一块内存空间(仅用于单道程序OS的分配方式)
离散分配:允许程序以不连续(离散)的形式装入内存
固定连续分配
OS启动时将存储空间静态的划分为若干个大小不同的区域。在用户装入及运行过程中,这些区域的大小和边界固定不变
动态分区分配(重难点)
首次适应算法(FF)
空闲分区按地址递增的次序排列
内存利用率:低址将产生一批很小的空闲区。
查找开销:总从低址开始,查找开销大。
适应性:在高址部分有一些较大的空闲分区。
循环首次适应算法(NF)
进程分配内存空间时,查找不再是每次从头开始,而是从上次找到的空闲块的下一个空闲区开始,直至找到满足的空闲分区
内存利用率:空闲区的大小变得均匀。
查找开销:相对于首次适应法减少了查找开销。
适应性:缺乏大的空闲分区。
最佳适应算法(BF)
实际效果最差
内存分配时,总选择满足请求的最小空闲分区分配给作业。为加速寻找,将空闲区按由小到大递增的顺序形成空闲分区表或空闲分区链。
内存利用率:产生"碎片"空闲分区,极难利用。
查找开销:每次都从最小的开始找,开销很大。
适应性:能够很好的留下大空闲区。
最坏适应算法 (WF)
实际效果最好
内存分配时,总选择满足请求的最大空闲分区分配给作业。为加速寻找,将空闲区按由大到小递减的顺序形成空闲区链。
内存利用率:不会产生难以利用的"碎片"分区。
查找开销:只找一下,开销极小。
适应性:对中小作业有利,对大作业不利。
#分区回收算法
-(a)将两个分区合并
-(b)将两个分区合并
-(c)将三个分区合并
-(d)为回收区单独建立一个新表项,填写回收区的起始地址和大小,并根据其起始地址将其插入空闲分区链表中的适应位置
离散分配储存管理方式
动态重定位分区分配
需要移动内存的程序,需要重定位移动后的程序,开销太大(需要移动内存中的程序 、需要重定位移动后的程序)
分页存储管理方式
基本方法
程序均匀切成一系列的页,主存均匀分成一系列的块
页和块(页框)的大小相同,一个程序的一个页面可以存放在任意一个物理页面
页/块是内存分配的最小单位
进程最后一页经常装不满一块,形成了页内碎片
地址结构
页号长度决定页数,页内地址长度决定页面大小
页表
为便于在内存中找到进程每个页面的实际物理位置,系统为每个进程建立一张页面映像表,简称页表
#页表包含以下几个表项:
-页号:登记程序地址空间的页号。
- 块号:登记相应的页所对应的内存块号
- 其它:登记与存储信息保护有关的信息。
快表
在分页式系统中,每存取一个数据或指令时需要访问两次内存,极大的降低了系统处理速度
为缩短查页表的时间,提高处理速度,系统通常使用快表(高速缓存中的页表)技术,就是将一些常用的页表表项保存在CPU内部的高速缓存中
1) 分离出页号;
2) 先查快表,查到则从快表中读出块号;
3) 未查到则访问内存中的页表获得块号;
4) 将块号和页内地址拼接得到实际物理地址
访问内存的有效时间
(1) 没有快表的情况:EAT=t+t=2t
(2) 存在快表的情况:设访问快表的时间为λ,快表的命中率为a,则: EAT=a*λ+(t+λ)(1-a)+t
两级和多级页表
现代的大多数计算机系统,逻辑地址空间很大,页表就变得非常大,要占用相当大的连续内存空间,可以采用这样两个方法来解决这一问题:
1.采用离散分配方式来存储页表,防止页表找不到连续内存空间。(多级页表)
2.只将当前需要的页表项调入内存, 其余的页表项仍驻留在磁盘上,需要时再调入。(虚拟内存)
两级页表
分页存储的优缺点
优点:解决了内存碎片问题,有效地利用了内存,使存储空间的利用率大大地提高
缺点:
(1)采用动态地址变换会增加计算机成本和降低系统的速度
(2)各种表格要占用一定容量的主存空间, 而且还要花费一部分处理机时间用来建立和管理这些表格
(3)虽然说外部碎片消除了,但每个作业的最后一页一般都有不能充分利用的页内碎片
分段存储管理方式
引入分段存储管理方式,主要是为了满足用户和程序员的下述一系列逻辑需要(方便性):
1) 方便编程 2) 信息共享3) 信息保护 4) 动态增长5) 动态链接
段表
地址变换机构
分离出段号
依据段号查段表(直接计算)
物理地址=段基址+段内位移
分页和分段的区别
页是信息的物理单位,页的大小由系统决定,分页是为了提高内存的利用率。
段则是信息的逻辑单位,段的长度是不固定的,根据信息的性质来划分,分段的目的是为了能更好地满足用户的需要。