目录
概述
2.基本思想
3,实现
4,特点
1.应用背景
2.基本思想
3,实现
4,特点
1.应用背景
2.基本思想
3,实现
数据结构
分配算法
4,特点
1.应用背景
2.基本思想
3,实现
概述
为了能将用户程序装入内存,必须为它分配一定大小的内存空间。连续分配方式是最早出现的一种存储器分配方式,曾被广泛应用于上世纪60~80年代的OS中,该分配方式为一个用户程序分配一个连续的内存空间,即程序中代码或数据的逻辑地址相邻,体现在内存空间分配时物理地址的相邻。连续分配方式可分为四类:单一连续分配、 固定分区分配、动态分区分配以及动态可重定位分区分配算法四种方式。
补充:
- 内零头:分配给进程,而进程未用到的内存部分;
- 外零头:未分配给进程,但因为太小而无进程能用;
一、单一连续分配
1. 应用背景
单用户系统。
在一段时间内,只有一个进程在内存。
2.基本思想
内存分为两个区域:一个供操作系统使用,一个供用户使用
3,实现
设置基址寄存器、限界寄存器,要求:逻辑地址映射为物理地址后,物理地址必须在两者之间。
4,特点
简单;适用于单任务OS
二、固定分区分配
1.应用背景
多道程序设计系统。
2.基本思想
单一连续分配中,将整块内存交给一个程序使用,显然会造成很大浪费,自然的可以想到将一整块内存区域分为若干个小块区域,来供多个程序同时使用。划分区域有两种方法:分区大小相等、分区大小不等。前者更加简单直接,后者使得存储器分配更加灵活。
(1)OS初始化阶段,将用户区划分为若于固定大小的内存区域(分区) ;
(2)每个分区可放一个程序运行;
(3)一个分区内的程序执行结束,可调入另一个程序 执行;
(4)划分为几个分区,则允许几个程序同时在内存运行;
(5)分区大小和位置可不同;
3,实现
分区说明表
4,特点
- 最早的支持多道程序设计的存储管理方案;
- 简单,现在仍在嵌入式系统中使用;
- “内零头”严重;
三、动态分区分配
1.应用背景
多道程序设计系统。
2.基本思想
(1) OS初始化阶段,将用户区划分为一个大的空白分区;
(2)每个程序运行时,划分出一个大小合适的分区;
(3)程序执行结束,其所在的分区撤消;
不难看出,由于程序交错运行,用户区中可能产生许多较小的空闲区,他们常常不能满足程序的空间需求,因而被浪费,即“外零头”(碎片)
3,实现
数据结构
空闲分区表
空闲分区链
分配算法
1)首次适应算法
- 按地址递增顺序排列空闲分区链;
- 分配内存时,总是从低地址端开始扫描空闲区;
- 找到的第一个大小合适的分区,就分割分配;
- 否则失败。
特点:
- 高址端有大空闲区概率大;
- 低址端迅速被划分,碎片出现速度快;
2)循环首次适应算法
- 按地址递增顺序排列空闲分区链;
- 设置当前指针;
- 分配内存时,从指针所指位置开始扫描空闲区;
- 找到的第一个大小合适的分区,就分割分配;
- 否则失败。
本质:CLOCK算法;
特点:
- 碎片分布均匀;
- 高址端有大空闲区概率小;
3)最佳适应算法
- 按大小递增顺序排列空闲分区链;
- 分配内存时,从链首开始扫描空闲区;
- 找到的第一个大小合适的分区,就分割分配;
- 否则失败。
特点:
- 碎片迅速出现;
- “最佳”匹配;
4)最坏适应算法
- 按大小递减顺序排列空闲分区链;
- 分配内存时,总是分配链首空闲区;
- 否则失败。
特点:
- 碎片出现最慢(分割后剩下的分区是最大的) ;
- 最坏”匹配;
4,特点
“碎片”问题
经过一段时间的分配回收后,内存中存在很多很小的空闲块。它们每一个都很小,不足以满足分配要求;但其总和满足分配要求。这些空闲块被称为碎片造成存储资源的浪费
四、动态可重定位分区分配
1.应用背景
多道程序设计系统。
2.基本思想
(1)采用动态分区分配方式;
(2)引入“紧凑”机制,合并小的碎片空闲区;
(3)使用动态地址重定位;
3,实现
与动态分区分配类似,区别在于这里使用了紧凑机制
紧凑机制会使得程序的位置发生改变,因此就需要引入重定位技术,由于程序的位置不固定,只有运行时才能确定,因此只能采用动态重定位(程序不变,运行时重定位,真正访问的内存地址是相对地址与重定位寄存器中的地址相加而形成的)