存储管理1-分区管理,伙伴系统

来源:互联网 发布:如何成为淘宝分销商 编辑:程序博客网 时间:2024/05/16 00:56

本文为笔记总结

多道程序存储管理:


分区程序管理:分为系统区,用户区(再分为若干分区)


一 固定分区存储管理(分区大小个数确定不变);

管理:内存分配表:记录分区号,起始地址,空间大小,状态及占用进程名

特点:简单,开销小,内部碎片浪费,分区总数固定,缺乏内存保护;程序大小不超过分区大小


二 可变分区管理

从用户区动态创建,不预先分区;

最后会形成占用区与空闲区相间布局,

管理:分区表(已占用,空闲分区表)

      分区链(表):起始地址递增顺序

特点:灵活,无内部碎片,有外部碎片


分区分配算法:

1.首次适应分配算法:顺序查找空闲分区表,选择第一个满足空间要求的分区,一部分分给作业,剩余部分仍为空闲分区。性能最好

2下次适应分配算法:第二个进程从第一个进程落脚分区开始查找,到达结尾返回开头;使得空闲分区更均匀,性能略逊

3.最佳适应分配算法:找到满足作业空间要求的最小空闲分区,外部碎片会非常零散;

性能最差

4.最坏适应分配算法:满足作业空间需求的最大空闲分区进行分割,外部碎片不会太小,有利于中小进程

 

分区回收:

将上下邻空闲区(如果有的话)合并,合并或插入空闲分区表;

 

碎片问题:

分区回收解决了一部分,

内存紧缩技术:另外所有进程占用空间尽可能往地址一端移动(如低端),高端形成新的空闲大分区;花费时间长注意地址重定位问题;

 

地址重定位:地址映射---逻辑地址转化为物理地址

物理地址:内存地址,绝对地址,实地址;只有通过物理地址,才可对内存单元进行直接访问;

逻辑地址:相对地址,虚地址;编译后目标代码,首地址为0;

还有后面的虚拟地址,注意区分;

 

静态重定位:程序装入内存时,直接对代码修改,完成转换;简单,无需硬件支持,缺点:装入内存,不可移动;

动态重定位:程序装入内存时,不修改,运行访问内存单元时,进行地址转换;由硬件完成(设置基地址寄存器,装入进程的分区起始地址,访问内存时,相对地址加之)

 

存储保护:

上下界寄存器保护模式

基址寄存器+限长寄存器

 

三 伙伴系统:

对固定,可变分区的折中;

已分配,空闲分区,大小均是2的k次方;

找到或分割得到满足进程要求空间的最小分区(和伙伴分区),分区满足pow(2,i-1)<k<=pow(2,i)

合并时,伙伴分区空闲,一直合并下去;

特点:存在内部碎片,外部碎片极少;搜索空闲块速度快,找到满足要求的第一个即可;合并简单