存储器管理
存储器管理功能
内存分配
存储保护
地址映射
内存扩充
程序的装入方式
1、绝对装入方式
装入模块装入内存后,程序中的逻辑地址与实际内存地址完全相同,不须对程序和数据的地址进行修改。(只适用于单道程序环境下)
2、可重定位装入方式
根据内存的当前情况,将装入模块装入到内存的合适位置。
3、动态运行时装入方式
动态运行时的装入方式,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转化推迟到程序真正要执行时才进行。
程序的链接方式
1、静态链接
在程序运行前,将目标模块所需要的库函数链接成一个完整的配装模块,以后不再拆开。
2、装入时动态链接
指将用户源程序编译后所得的一组目标模块,在装入内存时,采用边装入边链接的链接方式。
3、运行时动态链接
指对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行链接。
连续分配方式
连续分配方式,是指为一个用户程序分配一个连续的内存空间。
1、 单一连续分配
最简单的一种存储管理方式,但只能用于单用户、单任务的操作系统中。
2、 固定分区分配
将内存用户空间划分成若干个固定大小的区域。
3、动态分区分配
动态分区分配是根据进程的实际需要,动态地为之分配内存空间。
分区分配中的数据结构
1、空闲分区表
记录每个空闲分区的情况。
2、空闲分区链
在每个分区的起始部分,设置一些用于控制分区分配地消息,以及用于链接各分区所用的前向指针;
分区分配算法
1、首次适应算法
要求空闲分区链以地址递增的次序链接。
优点:优先利用内存低地址部分的内存空间。
缺点:低址部分不断划分,产生小碎片;每次查找从低址部分开始,增加了查找的开销。
2、循环首次适应算法
在分配内存空间时,从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。
优点:使内存空闲区分布均匀,减少查找的开销
缺点:缺乏大的空闲分区
3、最佳适应算法
要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。
缺点:产生许多难以利用的小空闲区。
4、最坏适应算法
要求将所有的空闲分区按其容量以从大到小的顺序形成一空闲分区链。
优点:产生碎片的几率最小
缺点:使存储器缺乏大的存储空间。
5、快速适应算法
将空闲分区根据容量大小进行分类,将相同容量的分区单独设立空闲分区链表,同时设置一张管理索引表,表项对应分区类型,并记录了该类型空闲分区链表表头的指针。
优点:查找效率高,根据进程的长度,不分割分区,因而不会产生新的碎片。
缺点:分区归还存储器时算法复杂,会造成空间的浪费。
6、伙伴系统
特点:无论是占用块或空闲块,其带下均为2的k次幂
伙伴:指的是由同一个大的空闲块分裂成的两个大小相同的存储区,这两个存储区就被称为“互相伙伴”。
在伙伴系统中,其分配和回收的时间性能取决于查找空闲分区的位置和分割、合并空闲分区所花费的时间。
7、哈希算法
4、动态可重定位分区分配
离散分配方式
分页存储管理方式(分页是由硬件完成的)
将用户程序地址空间分为若干个大小固定的页,对应的内存空间分为与页面大小相同的块或页框。
系统为每一进程建立一张页表。
页表实现了从页号到物理块号的地址映射。
地址结构
页号+位移量(页内地址)
具有快表的地址变换机构
快表依据的原理:程序执行局部性的特点
分段存储管理方式的引入(分段是由程序员完成的)
满足用户和程序员的多方面的要求:
1、方便编程
2、信息共享
3、信息保护
4、动态增长
5、动态链接
系统为进程建立一张“段表”,段表实现了从逻辑段到物理内存区的映射。
地址结构
段号+段内地址
分页和分段的主要区别
页是信息的物理单位,段是信息的逻辑单位。
页的大小固定且由系统确定,由系统把逻辑地址分为页号和页内地址,由机器硬件实现;段的长度不固定,取决于用户程序,编译程序对源程序编译时根据信息的性质划分。
分页的作业地址空间是一维的;分段的作业地址空间是二维的。
段页式存储管理方式
地址结构
短号+段内页号+页内地址