本文为笔记总结
多道程序存储管理:
分区程序管理:分为系统区,用户区(再分为若干分区)
一 固定分区存储管理(分区大小个数确定不变);
管理:内存分配表:记录分区号,起始地址,空间大小,状态及占用进程名
特点:简单,开销小,内部碎片浪费,分区总数固定,缺乏内存保护;程序大小不超过分区大小
二 可变分区管理
从用户区动态创建,不预先分区;
最后会形成占用区与空闲区相间布局,
管理:分区表(已占用,空闲分区表)
分区链(表):起始地址递增顺序
特点:灵活,无内部碎片,有外部碎片
分区分配算法:
1.首次适应分配算法:顺序查找空闲分区表,选择第一个满足空间要求的分区,一部分分给作业,剩余部分仍为空闲分区。性能最好
2下次适应分配算法:第二个进程从第一个进程落脚分区开始查找,到达结尾返回开头;使得空闲分区更均匀,性能略逊
3.最佳适应分配算法:找到满足作业空间要求的最小空闲分区,外部碎片会非常零散;
性能最差
4.最坏适应分配算法:满足作业空间需求的最大空闲分区进行分割,外部碎片不会太小,有利于中小进程
分区回收:
将上下邻空闲区(如果有的话)合并,合并或插入空闲分区表;
碎片问题:
分区回收解决了一部分,
内存紧缩技术:另外所有进程占用空间尽可能往地址一端移动(如低端),高端形成新的空闲大分区;花费时间长注意地址重定位问题;
地址重定位:地址映射---逻辑地址转化为物理地址
物理地址:内存地址,绝对地址,实地址;只有通过物理地址,才可对内存单元进行直接访问;
逻辑地址:相对地址,虚地址;编译后目标代码,首地址为0;
还有后面的虚拟地址,注意区分;
静态重定位:程序装入内存时,直接对代码修改,完成转换;简单,无需硬件支持,缺点:装入内存,不可移动;
动态重定位:程序装入内存时,不修改,运行访问内存单元时,进行地址转换;由硬件完成(设置基地址寄存器,装入进程的分区起始地址,访问内存时,相对地址加之)
存储保护:
上下界寄存器保护模式
基址寄存器+限长寄存器
三 伙伴系统:
对固定,可变分区的折中;
已分配,空闲分区,大小均是2的k次方;
找到或分割得到满足进程要求空间的最小分区(和伙伴分区),分区满足pow(2,i-1)<k<=pow(2,i)
合并时,伙伴分区空闲,一直合并下去;
特点:存在内部碎片,外部碎片极少;搜索空闲块速度快,找到满足要求的第一个即可;合并简单