操作系统 课程设计Word下载.docx

上传人:b****5 文档编号:18891583 上传时间:2023-01-02 格式:DOCX 页数:15 大小:170.85KB
下载 相关 举报
操作系统 课程设计Word下载.docx_第1页
第1页 / 共15页
操作系统 课程设计Word下载.docx_第2页
第2页 / 共15页
操作系统 课程设计Word下载.docx_第3页
第3页 / 共15页
操作系统 课程设计Word下载.docx_第4页
第4页 / 共15页
操作系统 课程设计Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

操作系统 课程设计Word下载.docx

《操作系统 课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统 课程设计Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

操作系统 课程设计Word下载.docx

作业1申请130KB;

作业2申请60KB;

作业3申请100KB;

作业2释放60KB;

作业4申请200KB;

作业3释放100KB;

作业1释放130KB;

作业5申请140KB;

作业6申请60KB;

作业7申请50KB;

作业6释放60KB

请采用采用最佳适应算法进行内存块的分配和回收,同时显示内存块分配和回收后空闲内存分区链的情况。

任务要求

了解动态分区分配中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。

参考文献

任满杰等《操作系统原理实用教程》电子工业出版社2006

汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社2001

张尧学史美林《计算机操作系统教程》实验指导清华大学出版社2000

罗宇等《操作系统课程设计》机械工业出版社2005

审查意见

指导教师签字:

教研室主任签字:

年月日

说明:

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

1需求分析

用C语言实现采用采用最佳适应算法的动态分区分配过程alloc()和回收过程free()。

用户可直接通过提示,进行创建作业,以及申请的内存的大小,也可以通过选择进行释放内存的操作,通过输入查看空闲分区链表的状态。

2概要设计

1.定义分区存储器的结构:

typedefstructnode{

intid;

//编号

intadr;

//分区首地址

intsize;

//分区大小

structnode*next;

//指向下一个分区的指针

}Node;

2.本程序包含7个模块:

(1)主函数模块:

调用菜单函数voidmenu();

(2)voidmenu():

菜单函数模块

{

1.输入命令;

2.执行操作;

3.输出。

}

(3)intcheck():

用于检查指定的释放块(由用户键入)的合法性

(4)voidinit():

初始化,生成一个带头节点的空闲队列指针

(5)Node*assignment2():

实现最佳适应算法的分配

(6)voidacceptment2(intaddress,intsiz,intrd):

实现最佳适应算法的回收

(7)voidprint():

输出空闲区队列信息

3运行环境

软件环境:

VC6.0WindowsXP

硬件环境:

计算机

4开发工具和编程语言

开发工具:

VC6.0

编程语言:

C语言

5详细设计

1定义头文件

#include<

stdio.h>

stdlib.h>

string.h>

2.定义内存大小

#defineMAX_SIZE640

3.定义分区存储器的结构

typedefstructnode//定义分区描述器的结构

4.检查指定的释放块(由用户键入)的合法性模块:

intcheck(intadd,intsiz,charc)

{

Node*p,*head;

intcheck=1;

if(add<

0||siz<

0)

check=0;

/*地址和大小不能为负*/

head=head2;

p=head->

next;

while((p!

=NULL)&

&

check)/*地址不能和空闲区表中结点出现重叠*/

if(((add<

p->

adr)&

(add+siz>

adr))||((add>

=p->

(add<

adr+p->

size)))

else

p=p->

if(check==0)

printf("

\t输入释放区地址或大小有错误!

\n"

);

returncheck;

/*返回检查结果*/

5.生成一个带头节点的空闲队列指针模块

voidinit()

{Node*q;

head2=(Node*)malloc(sizeof(Node));

q=(Node*)malloc(sizeof(Node));

head2->

next=q;

q->

size=MAX_SIZE;

adr=0;

next=NULL;

id=0;

6.最佳适应算法的分配模块

Node*assignment2(intnum,intreq)//实现最佳适应算法的分配

Node*before,*after,*ass,*q;

ass=(Node*)malloc(sizeof(Node));

q=(Node*)malloc(sizeof(Node));

before=head2;

after=head2->

ass->

id=num;

size=req;

while(after->

size<

req)

before=before->

after=after->

}

if(after==NULL)

ass->

adr=-1;

//分配失败

if(after->

size==req)

{//空闲分区恰好等于所申请的内存大小

before->

next=after->

ass->

adr=after->

adr;

}

else

{//空闲分区大于所申请的内存大小

q=after;

before->

ass->

adr=q->

q->

size-=req;

q->

adr+=req;

before=head2;

after=head2->

before->

after=q;

while(after&

((after->

size)<

(q->

next=after;

return(ass);

7.最佳适应算法的回收模块

voidacceptment2(intaddress,intsiz,intrd)

Node*before,*after;

intinsert=0;

//是否被回收的标志

back2=(Node*)malloc(sizeof(Node));

back2->

adr=address;

size=siz;

id=rd;

if(head2->

next==NULL)

{//空闲队列为空

next=back2;

//head2->

size=back2->

size;

{//空闲队列不为空

while(after)

{

if(back2->

adr==after->

adr+after->

size)

{//和前边空闲分区合并

after->

size+=back2->

back2=after;

after=before->

before=head2;

after=head2->

adr==back2->

adr+back2->

{//和后边空闲区合并

back2->

size+=after->

after=before->

while(!

insert)

{//将被回收的块插入到恰当的位置(按分区大小从小到大)

if(after==NULL||((after->

size>

back2->

size)&

(before->

before->

insert=1;

break;

before=before->

after=after->

if(insert)

printf("

\t最佳适应算法回收内存成功!

\t最佳适应算法回收内存失败!

8.空闲区队列信息输出模块

voidprint(charchoice)//输出空闲区队列信息

Node*p;

p=head2->

if(p)

\n空闲区队列的情况为:

\t编号\t首址\t终址\t大小\n"

while(p)

\t%d\t%d\t%d\t%d\n"

p->

id,p->

adr,p->

size-1,p->

size);

p=p->

9.菜单模块

voidmenu()//菜单及主要过程

charchose;

intch,num,r,add,rd;

system("

cls"

while

(1){

\t\t最佳适应算法(Best-Fit)模拟\n\n"

\t1.创建作业\t\t2.回收内存\n\n"

\t3.查看内存\t\t4.退出\n\n"

\t你选择(1/2/3/4):

"

scanf("

%d"

&

ch);

fflush(stdin);

switch(ch)

case1:

输入作业号:

scanf("

num);

输入申请的内存大小:

r);

assign=assignment2(num,r);

if(assign->

adr==-1)

printf("

分配内存失败!

分配成功!

分配的内存的首址为:

%d\n"

assign->

adr);

case2:

输入释放的内存的首址:

add);

输入释放的内存的大小:

输入释放的内存的编号:

rd);

acceptment2(add,r,rd);

case3:

print(chose);

break;

case4:

exit(0);

6调试分析

(1)如何定义分配器是第一个要克服的难题,经过自己查资料以及问同学才弄懂分配器的结构。

(2)刚开始没有写检查指定的释放块(由用户键入)的合法性的模块,在输入时经常出现错误,为克服这个缺点补充了这个模块。

(3)经过多次的尝试与分析才弄清楚最佳分配算法的思路,才写出最佳分配算法的分配与回收。

7测试结果

进行作业操作

图1作业1与作业2的创建

图2作业3的创建与作业2的释放

图3作业4的创建与作业3的释放

图4作业1的释放与作业5的创建

图5作业6的创建

图6作业7的创建与作业6的释放

图7输出空闲分区链表的情况

[1]任满杰等《操作系统原理实用教程》电子工业出版社2006

[2]汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社2001

[3]张尧学史美林《计算机操作系统教程》实验指导清华大学出版社2000

[4]罗宇等《操作系统课程设计》机械工业出版社2005

[5]黄干平,陈洛资,等《计算机操作系统》。

北京:

科学出版社,1989.

心得体会

经过一学期的操作系统的学习,感觉我们离计算机越来越近,我们是由计算机的硬件及软件的使用开始接触计算机的。

刚开始是C++的编程,然后是数据结构,这些都是软件的算法,而操作系统讲述的是计算机的内部的算法,比如内存的分配以及回收等。

经过一步步的深入学习,我们对计算机也有了更进一步的了解,使我们不再对计算机陌生,了解了计算机的本身的算法后,我们才有可能更进一步的使用计算机,才能更好的发展计算机。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1