存储管理是操作系统的重要组成部分,它负责管理计算机系统的重要资源主存储器。由于任何程序、数据必须占用主存空间后才能执行,因此存储管理直接影响系统的性能
1 存储器的层次结构
1.1 多层结构的存储器系统
可执行寄存器
-
计算机系统的存储层次中,寄存器和主存又被称为可执行存储器。
-
操作系统负责对可执行存储器的管理,进程对可执行存储器是可直接访问的,
-
而设备和文件管理则负责根据用户的需求,提供对辅存的管理机制。
-
但对辅存的访问是需借助I/O设备。
主存储器
主存储器简称内存或主存,是计算机系统中的主要部件,用于保存进程运行时的程序和数据,也称为可执行存储器。分为用户区和系统区。
寄存器
字长32位或64位,寄存器具有和处理器相同的速度,因此系统对寄存器的访问速度最快,完全能和CPU协调工作
高速缓存
高速缓存介于寄存器和存储器之间,主要用于备份主存中较常用的数据,以减少处理机对主存的访问次数,由此可大大提高程序的执行速度
磁盘缓存
磁盘缓存主要暂时存放频繁使用的一部分磁盘数据和信息,以减少访问磁盘的次数。磁盘缓存并不是实际存在的存储器,而是依托内存存在,分为写缓存和读缓存
1.2 存储器管理功能
主要任务:为多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及能从逻辑上扩充内存。
那么我们来回顾下存储器管理的主要功能都有哪些?
功能:内存分配〈为每道程序分配内存空间,允许运行着的程序申请附加的内存空间)
内存保护〈确保每到用户程序都只在自己的内存空间内运行,彼此互不干扰)地址映射〈将地址空间中的逻辑地址转换为内存空间中与之对应的物理地址)内存扩充〈从逻辑上扩充内存容量,使更多的用户程序能并发运行)
2 程序的装入和链接
- 物理地址
- 物理地址空间:物理地址的集合;一维的线性空间。可供用户重复使用多次的资源
- 逻辑地址
- 逻辑地址空间:逻辑地址所形成的地址范围;可能是线性的,也可能是多维的
2.1 程序的链接
用户程序在运行时需要先装入内存,再将其变为一个可执行的程序,通常程序运行时需要经过以下几个步骤:
-
编译:由编译程序对用户源程序进行编译,形成若干个目标模块;
-
链接:由链接程序将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完成的装入模块;
-
装入:由装入程序将装入模块装入内存
2.1.1 静态链接方式
在程序运行之前先将各目标模块及它们所需的库函数链接成一个完整的装配模块,以后不再拆开。装配时,需要
对相对地址进行修改、变换外部调用符号
2.1.2 装入时动态链接方式
将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的链接方式。在该方式中,如果在装入一个目标模块发生了一个外部模块调用事件,则装入程序会找出相应的外部目标模块,并将它装入内存,同时修改目标模块中的相对地址。
优点:
⑴ 各目标模块分开存放,因此便于修改和更新程序
⑵ 便于实现对目标模块的共享
2.1.3 运行时动态链接方式
采用边运行边链接的链接方式,及将对某些模块链接推迟到程序执行时才进行。在该方式中,如果在程序执行过程中发现一个被调用模块尚未装入内存,则立即由OS去找到该模块,并装入内存链接到调用者模块上。
因此凡在执行过程中,没有被调用的模块都不会被调入内存和被链接到装入模块上,由此可加速程序的执行,节省内存空间。
2.2 程序的装入
在将程序的多个模块链接成一个完整的装入程序后,需要装入到内存中让CPU执行。
2.2.1 绝对装入方式
装入前已经确定内存装入地址
目标模块装入到事先指定的内存位置。这就要求程序中所使用地址为绝对地址
2.2.2 可重定位装入方式
装入时再确认内存装入地址,根据内存使用情况装入,并修改目标程序中指令和数据的地址
- 静态重定位:装入后不允许修改
- 动态重定位:等程序真正要执行时才将其逻辑地址通过动态计算转换成物理地址
2.2.3 重定位
将逻辑地址空间中的逻辑地址变换成内存空间中的物理地址的过程称为重定位
静态重定位:装入后不允许修改
动态重定位;程序要执行时,才将逻辑地址通过动态计算转换成物理地址。
2.2.4 动态运行时的装入方式
动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种**地址转换推迟到程序真正要执行时才进行(**动态重定位)。
由于装入内存后的所有地址都仍是相对地址,因此该方式允许程序在内存中不断移动位置,从而使内存的利用提高。
3 连续分配存储管理方式
3.1连续分配
只为一个用户程序分配一个连续的内存空间
3.1.1 单一连续分配
用这种存储管理方式时,系统会将整个用户区看成是一个分区,分配给一个用户使用,并且这个用户区只能容纳一个程序或作业。
**缺点:**内存利用率极低
3.1.2 固定分区分配
内存的用户去被分为若干个固定大小的区域,每一个区域仅装入一个作业,由此内存中存在多道同时运行的作业。
1. 划分分区的方法
⑴ 分区大小相等
将内存空间分为大小相等的区域,用于存放那些大小差不多的用户作业。 **缺点:**缺乏灵活性
⑵ 分区大小不等
将内存分为含有一些较小的分区、 一些中等的分区和一些较大的分区。
2. 内存分配
系统按分区的大小顺序建立一张分区使用表,表中记录的每个分区的起始地址、大小和状态等信息,并且每个分区的信息占用一条记录。
缺点,容易产生碎片
3.1.3 动态分区分配
分配原理:系统根据作业的实际需要,动态地为作业分配内存空间
1. 分区分配中的数据结构
⑴ 空闲分区表
用于记录每个空闲分区的信息:
分区序号、分区起始地址、
分区大小等这些表项。
每个空闲分区的信息占一个记录
(2)空闲分区链
将所有空闲的分区使用指针链接到一块(双链)
3. 分区分配操作
⑴ 分配内存
u.size**:**用户程序请求的分区大小;
**m.size:**空闲分区表(链)中每个空闲分区大小;
**size:**系统所允许的最小分区容量。
分配过程:
①查找并分配:查找过程中每次比较m.size与u.size大小。若m.size>u.size则此分区满足条件,但要判断m.size- u.size <size 若是,系统将此分区全部分配出;否则,系统从此分区中划出合适用户程序的空间分配,剩余的部分仍留在空闲分区链中;
②修改相关数据:对于剩余部分的空闲空间要修改它的相关数据,如分区起始地址、分区大小及状态等
(2) 回收内存
3.1.4 动态重定位分区分配
紧凑技术:将多个碎片空间拼接成一个较大的空间
动态重定位的实现
重定位寄存器:硬件地址变换机构, 记录程序最终被移动到的实际分区的始址,为加快CPU执行程序或指令的速度
动态重定位分区分配方式***=“*紧凑”技术+动态重定位+动态分区分配方式
固定分配产生内部碎片
动态分区分配产生外部碎片:分区大小不固定;分配时较复杂,需要设置一定的数据结构如空闲分区表或空闲分区链;可根据作业大小情况来分配
|动态分区存储管理的优缺点
**优点:**根据用户作业的实际需求分配存储空间;
**缺点:**碎片问题(外碎片),内存利用率不高,受实际内存容量限制。
| 动态重定位分区存储管理的优缺点
**优点:**解决了动态分区分配过程中所产生的“外零头”问题。消除内存碎片,提高内存利用率;
**缺点:**提高硬件成本,紧凑时花费CPU时间
3.1.5 基于顺序搜索的动态分区分配算法
-
首次适应算法
-
循环首次适应算法
-
最佳适应算法
-
最坏适应算法
3.1.6 基于索引搜索的动态分区分配算法
1. 快速适应算法(quick fit )
又称为分类搜索法,按容量大小将空闲分区分类,每类同容量的空闲分区单独设立一个空闲分区链表,同时在内存设立一张管理索引表,表项中记录每种类型的分区和空闲分区链表指针。
2.伙伴关系
3,。哈希算法
3.2 不连续分配
4 对换(Swapping)
4.1 多道程序环境下的兑换技术
1. 对换的引入
将内存中暂时不能运行的进程或暂时不用的程序和数据换出到外存上,以腾出足够的内存空间,再将已具备条件的进程或进程所需要的程序和数据换入内存。
对换包括:换入/调入操作;换出/调出操作
目的:提高内存利用率。
2. 对换的类型
-
整体对换:又称为进程对换。
-
部分对换:在对程序实施对换操作时可以是以“页”和“段”为单位的
4.2兑换空间管理
外存分配
- 文件区,保存用户文件,使用离散的分配方式,提高利用率
- 对换区,用于暂时存放和内存交换的进程,使用连续的分配方式,用来提高交换速度
5 分页存储管理方式(重点)
-
连续分配方式
单一连续/固定/ 动态/ 动态重定位分区分配
-
离散分配方式
纯分页/纯分段/ 段页式/ 请求分页/ 请求分段
-
纯分页存储管理方式(也称基本的分页存储管理方式):分页存储管理方式中,不具备页面兑换功能。种存储管理方式只有将整个作业/程序都装入内存中才能开始运行。
5.1分页存储管理的基本方式
1.页面和物理块
- 页面:程序被分为大小相等的片,编号0~n
- 物理块(页框):同页面大小相等,编号0#~n#
在给进程分配内存时,是以块为基本单位分配的。将进程中的若干个页分别装入到多个可以不相邻的物理块中
- 页面大小:一般的系统中默认为,分页大小应是2的幂,通常为512 B~8 KB
2.地址结构
重点公式
3.页表
用来连接逻辑页号和物理块号的中间关系表
4.基本的地址变换机构
页表寄存器PTR:记录进程的页表在内存中存放的起始地址和整个页表的长度。
- 页表长度:表长度
- 页表项长度:表内一项的长度
地址变换:物理地址 = 页表起始地址+页号*页表项长度
若页表全部放在主存,则要取一个数据(一条指令)至少要访问两次主存
5.快表(高速缓冲寄存器)
一个存放当前系统最近访问过的页表项的表