最新c++动态分区分配算法模拟(操作系统课程设计)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

c++动态分区分配算法模拟(操作系统课程

设计)

课程设计

课程设计名称:操作系统课程设计

专业班级:

学生姓名:

学号:

指导教师:

课程设计时间:6月13日-——6月17日

计算机科学专业课程设计任务书

说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页

1:需求分析

(1)用C语言实现采用首次适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端的空间。

(2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:作业1申请130KB;作业2申请60KB;作业3申请100KB;作业2释放60KB;作业4申请200 KB;作业3释放100 KB;作业1释放

130 KB;作业5申请140 KB;作业6申请60 KB;作业7申请

50KB;作业6释放60 KB。采用首次适应算法进行内存块的分配和回

收,同时显示内存块分配和回收后空闲内存分区链的情况。

2:概要设计

(1)数据结构:作业队列数据结构,用于存储待处理作业;阻塞作业队列数据结构,用于存储阻塞的作业。已分配内存块的双向链表,记录当前系

统已分配的各个内存块;未分配内存块的双向链表,记录系统中剩余的

各个内存块;系统内存分配总情况的结点对象,记录系统中阻塞的作业

总数,已分配的内存块数,剩余的内存块数。

(2)主函数:对作业队列、阻塞队列、已分配内存块链表、未分配内存块链表、系统总内存分配情况结点对象进行初始化,调用分配函数或回收函

数,循环处理11个作业步。

(3)分配函数alloc():首次适应算法检索未分配的内存块链表,若找到合适的内存块,则加以判断,空闲内存块大小减去作业去请求内存块大小小于

系统额定的最小碎片值,把空闲块全部分配,否则进行分割分配,最后

显示分配的内存信息。

(4)回收函数free():首次适应算法检索已分配的内存块链表,找到要释放的内存块后,在已分配链表中删除该结点,并把该结点挂到未分配内存块

链表的结尾处,然后进行两次调整,把未分配的内存块链表调整为首地

址从小到大的排列顺序,并且物理上相邻的空闲内存块要进行合并,以

方便下次进行分配。调度分配函数,循环处理阻塞作业队列,最后显示

回收后的内存情况。

(5)调度图如下:

3:运行环境

硬件:计算机

软件:windowsXP vc++6.0

4:开发工具和编程语言

开发工具:vc++6.0

编程语言:C语言

5:详细设计

(1):数据结构模块

struct job//作业结点

{

int num;//作业编号

int state;//0表示释放,1表示申请

int length;//作业要求处理大小

};

struct yifenpei//已分配内存块结点

{

int num;//占有内存区域的作业编号

int firstadd;//内存区域的首地址

int length;//内存区域的大小

struct yifenpei*forward;

struct yifenpei*next;

};

struct weifenpei//未分配内存块结点

{

int firstadd;//空闲区域的首地址

int length;//空闲区域的大小

struct weifenpei*forward;

struct weifenpei*next;

};

struct total//内存分配状况记录结点

{

int totalyifen;//已分配的总内存块数

int totalweifen;//未分配的总内存块数

int totalzuse;//阻塞的作业个数

};

struct job jobarray[11];//作业处理队列

struct yifenpei*headyifen=(struct yifenpei*)malloc(len2);//已分配的内存块所构成的双向链表的头指针

struct weifenpei*headweifen=(struct weifenpei*)malloc(len3);//未分配的内存块所构成的双向链表的头指针

struct job zuse[11];//阻塞作业队列

struct total totalnow;

2:主函数模块

void main()

{

jobarray[0].num=1; jobarray[0].state=1; jobarray[0].length=130;/* 初始化请求序列,共11个作业步*/

jobarray[1].num=2; jobarray[1].state=1; jobarray[1].length=60;

jobarray[2].num=3; jobarray[2].state=1; jobarray[2].length=100;

jobarray[3].num=2; jobarray[3].state=0; jobarray[3].length=60;

jobarray[4].num=4; jobarray[4].state=1; jobarray[4].length=200;

jobarray[5].num=3; jobarray[5].state=0; jobarray[5].length=100;

jobarray[6].num=1; jobarray[6].state=0; jobarray[6].length=130;

jobarray[7].num=5; jobarray[7].state=1; jobarray[7].length=140;

jobarray[8].num=6; jobarray[8].state=1; jobarray[8].length=60;

jobarray[9].num=7; jobarray[9].state=1; jobarray[9].length=50;

jobarray[10].num=6; jobarray[10].state=0; jobarray[10].length=60;

totalnow.totalyifen=0;totalnow.totalweifen=1;totalnow.totalzuse=0;//初始化系统内存分配状况

struct weifenpei*weifen=(struct weifenpei*)malloc(len3);

weifen->firstadd=1;weifen->forward=headweifen;weifen->length=640;weifen-

>next=NULL;

headweifen->forward=NULL;headweifen->next=weifen;//初始化未分配的内存块双向链表

相关文档
最新文档