文档介绍:操作系统课程设计
题目:模拟可变分区内存管理的内存分配策略
姓名:
学号:
专业:
2008年1月1日
模拟可变分区内存管理的内存分配策略
摘要:模拟可变分区内存管理的模式下的各种内存分配策略,根据输入的各进程的信息(进程名,需要内存大小,进入内存时间,退出内存时间,发生动态申请内存的时间,动态申请的内存大小等),输出各个时间段上系统中的内存分布情况(各个空闲区位置和大小,各个进程空间的位置和大小)。
关键词:最先适配,下次适配,最优适配,最差适配,在各种策略下允许进程的动态申请内存空间。
前言
,相关算法
可变分区模式的基本工作工程:
内存分配策略
(1)最先适应算法(First Fit):从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。
优点:简单,快捷,查找次数较小。
缺点:经常把大分区分配给小作业
(2)下次适配:即顺序扫描自由块表,直至第二次找到一个足够大的自由块为止,该块即为被选中的块。
(3)最佳适应算法(Best Fit):
它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按大小从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。
优点: 总是找到与分配长度最接近的自由存储块,同时也就产生最小的剩余块。
缺点:a. 查找效率低,需要扫描整个自由块表,但在按自由块长度排序时,与最先适配一样快。
,造成空间浪费,称为外部存储碎片。
(4)最差适应算法(Best Fit):
它从全部空闲区中找出能满足作业要求的、且大小最大的空闲分区,从而使链表中的结点大小趋于均匀,适用于请求分配的内存大小范围较窄的系统。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按大小从大到小进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留小的空闲区,尽量减少小的碎片产生。
:
Windows xp平台,Visual C++。
:
声明基本的结构体跟头文件。
初始化内存状态。
读数据并申请自由块数量及各自由块长度。
对自由块进行地址排序并选择算法申请作业所需内存空间大小。
被调度的作业一直运行到完成,把完成的结果输出。
最后撤消作业,释放内存空间,以免造成空间浪费。
#include<>
#include<>
#include<>
#include <>//系统时间使用
#include <>
#include <>//清屏函数使用
#include<>
const int MAXJOB=100;//定义表最大记录数
typedef struct node{
int start; //开始地址
int length; //自由块长度
char tag[20]; //自由块状态
char time[64];//进入系统时间
}job;
job frees[MAXJOB];//定义空闲区表
int free_quantity; //空闲
job occupys[MAXJOB];//定义已分配区表
int occupy_quantity; //使用中
upy_quantity是全局变量
如图1
、模块间接口函数
void initial() //初始化函数
int readData()//读数据
void sort() //排序整理自由块
void view() //显示各空间表及各内存分配情况
void repeal() //撤消作业所占内存空间
void copyright() //显示版权信息
void main()//主函数,主要在这里选择调用算法
,也可以通过程序运行后输入的内容信息系统自动生成。
系统自动生成文本前或是手动建立文本前,选择1便会提示出错
现在我们选择2重新输入