文章目录
第四章 存储器管理
3.1.1、内存的基础知识
1、进程运行的原理–指令
2、相对地址和绝对地址
3、编译、链接、装入概念
4、链接的三种方式
1、静态链接:在程序运行之前,的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
2、装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
3、运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。
5、装入的三种方式
1、绝对装入
绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。
2、静态重定位
静态重定位:又称可重定位装入。编译、链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。可根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对地址进行“重定位”,将逻辑地址变换为物理地址(地址变换是在装入时一次完成的)。
3、动态重定位
动态重定位:又称动态运行时装入。编译、链接后的装入模块的地址都是从o开始的。装入程序把装入模块装入内存后,并不会立即把逻辑地址转换为物理地址,而是把地址转换推迟到程序真正要执行时才进行。因此装入内存后所有的地址依然是逻辑地址。这种方式需要一个重定位寄存器的支持。
6、总结
3.1.2、内存管理的概念
操作系统作为系统资源的管理者,当然也需要对内存进行管理,要管些什么呢?
1、操作系统负责内存空间的分配与回收
2、操作系统需要提供某种技术从逻辑上对内存空间进行扩充
3、操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换
4、内存保护
5、总结
3.1.3、覆盖与交换
1、覆盖技术
2、交换技术
3、总结
3.1.4、连续分配管理方式
1、单一连续分配
2、固定分区分配方式
分区说明表
3、动态分区分配
问题1:系统要用什么样的数据结构记录内存的使用情况?
问题2:当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?
问题3:如何进行分区的分配与回收操作?
分配
分配情况1:进程所需空间小于空闲区空间
空闲分区数量不变,更改对应分区的分区大小
和起始地址
分配情况2:进程所需空间刚好等于空闲区空间
空闲分区数量减一
回收
回收情况1:回收区的后面有一个相邻的空闲分区
把两个空闲分区进行合并,更改对应分区的分区大小
和起始地址
回收情况2:回收区的前面有一个相邻的空闲分区
与回收情况1类似
回收情况3:回收区的前、后各有一个相邻的空闲分区
三合一
回收情况4:回收区的前、后都没有相邻的空闲分区
4、内部碎片、外部碎片
5、总结
3.1.5、动态分区分配算法
1、首次适应算法
算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
如何实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
2、最佳适应算法
算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区。
如何实现:空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
3、最坏适应算法
又称最大适应算法(Largest Fit)
算法思想:为了解决最佳适应算法的问题――即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。
如何实现:空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
4、邻近适应算法
算法思想:首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。
如何实现:空闲分区以地址递增的顺序排列(可排成一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
5、总结
首次适应算法和邻近适应算法不需要对分区表或分区链进行重新排序
最佳适应算法和最坏适应算法需要对分区表或分区链进行重新排序
3.1.6、基本分页存储管理
1、知识总览
2、分页存储管理的基本概念
基本分页存储管理的思想:把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分
思考:如何实现地址的转换
手动计算页号、页内偏移量的方法:
计算机内计算页号、页内偏移量的方法:
结论:如果每个页面大小为2kB,用二进制数表示逻辑地址,则末尾K位即为页内偏移量,其余部分就是页号
因此,如果让每个页面的大小为2的整数幂,计算机就可以很方便地得出一个逻辑地址对应的页号和页内偏移量。
3、逻辑地址结构
4、页表
5、总结
3.1.7、基本地址变换机构
例题
对页表项大小的进一步探讨
总结
3.1.8、具有快表的地址变换机构
1、局部性原理
2、什么是快表(TLB)
快表,又称联想寄存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常称为慢表。
3、总结
3.1.9、两级页表
1、单级页表存在的问题
问题一:页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。
问题二:没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。
2、两级页表的原理、地址结构
解决问题一
解决问题二