计算机专业课程Ja,课程教学的探析

更新时间:2024-01-04 作者:用户投稿原创标记本站原创 点赞:8560 浏览:33211

华北科技学院计算机系综合性实验

实验报告

课程名称计算机操作系统

实验学期2006至2007学年第二学期

学生所在系部计算机系

年级2004级专业班级信息管理与信息系统B043

学生姓名周志勇学号200407034311

任课教师任占营

实验成绩

计算机系制

《计算机操作系统》课程综合性实验报告

开课实验室:软件开发实验室2007年5月17日

实验题目银行家算法一,实验目的

理解死锁基本概念,掌握产生死锁的原因和必要条件以及处理死锁的几种方法,体会银行家算法是避免死锁的一种行之有效的方法.通过编写程序实现银行家算法,进一步理解银行家算法的原理和避免死锁的过程,掌握银行家算法的描述和应用,进一步熟练掌握处理处理机死锁的方法.PC兼容机,Windows操作系统,编程语言等.(1)首先对银行家算法原理进行深刻的理解和掌握,

(2)选择一种熟悉的编程语言来实现对N个进程和M种系统资源进行银行家算法判定和资源分配,

(3)根据银行家算法的要求设计相应的数据结构,如:可利用资源向量,最大需求矩阵,分配矩阵和需求矩阵,其中进程的个数N和资源的种类数目用户可以任意交互输入,

(4)安全性判定要显示过程,要给出找到的安全序列.I,j]:等于Need[i,j]-requesti[j]

系统执行安全性算法,检查分配后是否安全.若安全,则正式分配资源,否则,Pi等待.

安全性算法

设置2个工作向量:work表示系统可供进程继续运行所需的各类资源数目,算法执行前令work:等于Available,Finish表示系统是否有足够的资源分配给进程,使之运行完成,开始时先令Finish[i]:等于False,当有足够资源时在做Finish[i]等于True.

找到满足finish[i]等于flase,need[I,j]<,等于work[j]的进程,找到则执行(3),否则转(4)

Pi获得资源,顺利执行直到完成,并释放资源

work[j]:等于work[j]+Allocation

finish[i]:等于true

gotostep2

(4)如所有进程的Finish[i]等于true都满足,则系统安全,否则为不安全.

算法的具体实现如下:

流程图:

主要代码:

/**************************申请资源函数**************************/

intapply()

{intv等于1,

for(i等于0,i<,等于2,i++)

{if(need[proc][i]<,request[i]){v等于0,break,}

if(ailable[i]<,request[i]){v等于0,break,}}

if(v等于等于1){for(i等于0,i<,等于2,i++)

{stay[0][i]等于allocation[proc][i],

stay[1][i]等于need[proc][i],

stay[2][i]等于ailable[i],

allocation[proc][i]+等于request[i],

need[proc][i]-等于request[i],

ailable[i]-等于request[i],}

}

return(v),

}

/**************************安全检查函数***************************/

inttest()

{intwork[3],finish[5]等于{0,0,0,0,0},v,k等于0,t等于0,

for(i等于0,i<,p,i++)

if(result[i]等于等于0){finish[i]等于1,k1--,}

for(i等于0,i<,等于2,i++)work[i]等于ailable[i],

while(1)

{for(i等于0,i<,等于4,i++)

{if(finish[i]等于等于0)

{v等于1,

for(j等于0,j<,等于2,j++)

if(need[i][j]>,work[j])

{v等于0,break,}

if(v等于等于1)

{finish[i]等于1,

for(j等于0,j<,等于2,j++)work[j]+等于allocation[i][j],

process[k]等于i,k++,

}

}

}

if(t等于等于k)break,

elset等于k,

if(k等于等于k1)break,

}

if(k等于等于k1)return(1),

elsereturn(0),

}

/**************************主函数***************************/

main()

{

while(1)

{Output(),

k1等于5,

printf("InputtheprocessID(0~4):P"),

scanf("%d",&,proc),

if(proc<,0||proc>,4)break,

printf("P%drequestSourcsare:",proc),

scanf("%d,%d,%d",&,request[0],&,request[1],&,request[2]),

if(apply()等于等于0)

{printf("TheP%drequestisoutofailable!\n",proc),

printf("Plaseputdownanykeytocontinue!"),}

elseif(test()等于等于0)

{printf("itisnotsafe,P%dshouldbewait!\n",proc),

for(i等于0,i<,等于2,i++)

{allocation[proc][i]等于stay[0][i],

need[proc][i]等于stay[1][i],

ailable[i]等于stay[2][i],}

printf("Plaseputdownanykeytocontinue!"),}

else

{Output(),

printf("Systemissafe!Thesafequeueis:"),

for(i等于0,i<,k1-1,i++)

printf("P%d->,",process[i]),

printf("P%d",process[k1-1]),


printf("\nPlaseputdownanykeytocontinue!"),}

if(need[proc][0]等于等于0&,&,need[proc][1]等于等于0&,&,need[proc][2]等于等于0)

for(i等于0,i<,等于2,i++)

{ailable[i]+等于max[proc][i],

result[proc]等于0,}

getch(),

}

}

(3)运行结果:

P1申请资源(1,0,2)

P4申请资源(3,3,0)

P3申请资源(0,2,0)

P3申请资源(0,1,0)

结果分析:

银行家算法又称Dijkstra算法,广泛应用于多个领域,主要是使系统处于安全状态,避免发生死锁,其基本思想是先试探分配资源,并进行检查,看系统是否安全,安全则实施分配,否则不分配.在本算法的实现使用C语言,采用数组进行资源的设置,不能动态的输入进程数目,资源种类以及进程的需求和资源的数目,还需改进.通过本次实验,对银行家算法有了更进一步的理解,对操作系统的进程预防死锁有了更新的认识,在以后的学习中会还需要更多的努力!

教师评价

评定项目

A

B

C

D

评定项目

A

B

C

D

算法正确

界面美观,布局合理

程序结构合理

操作熟练

语法,语义正确

解析完整

实验结果正确

文字流畅

报告规范

题解正确

其他:

评价教师签名:

年月日

结束

Y

Y

Getch()

修改Available和result值

资源分配成功,输出安全序列

N

Test()等于0

N

Apply()等于0

输入请求资源数shu

输入进程ID

K1等于5

While(1)

输入数据

开始

相关论文范文