当前位置:文档之家› 华东交通大学操作系统课程设计

华东交通大学操作系统课程设计

课程设计(论文)任务书软件学院学院软件测试专业 05—测试 1 班一、课程设计(论文)题目哲学家问题的模拟实现二、课程设计(论文)工作自 2008 年 1月 7日起至 2008 年 1月11 日止。

三、课程设计(论文) 地点: 信息机房 5号楼四、课程设计(论文)内容要求:1.本课程设计的目的通过课程设计,使学生理论联系实际,在程序设计实践中进一步了解操作系统的原理和算法的实现,了解设计系统时应考虑的因素。

了解C应用程序编写。

培养学生分析、解决问题的能力,提高学生的论文写作能力。

2.课程设计的任务及要求1)基本要求:(1)熟悉C语言的运用,掌握和理解操作系统中的原理和算法;(2)结合操作系统的基本原理,进行程序设计;(3)对操作系统的设计和实现有进一步认识和理解。

2)课程设计论文编写要求(1)理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进行书写和装订。

(2)课程设计报告(论文)包括目录、设计目的和要求、正文(相关原理分析、程序设计、流程图、程序实现和程序调试等内容)、设计小结、参考文献、附录等。

3)课程设计评分标准:(1)考勤与学习态度:20分(2)理论理解与课程设计报告论文:30分;(3)动手操作与程序设计:30分;(4)设计论文答辩:20分。

4)参考文献:(1)汤子瀛. 计算机操作系统[M]. 西安电子科技大学出版社.5)课程设计进度安排1.准备阶段(2学时):选择设计题目、了解设计目的要求、查阅相关资料2.程序模块设计分析阶段(2学时):程序总体设计、详细设计3.代码编写调试阶段(6学时):程序模块代码编写、调试、测试4.撰写课程设计论文阶段(2学时):总结课程设计任务和设计内容,撰写课程设计论文学生签名:2008 年 1 月 11 日6)选择课程设计题目具体要求:课程设计(论文)评审意见(1)考勤与学习态度(20分):优()、良()、中()、一般()、差();(2)理论理解与课程设计报告论文(30分):优()、良()、中()、一般()、差();(3)动手操作与程序设计(30分):优()、良()、中()、一般()、差();(4)设计论文答辩(20分):优()、良()、中()、一般()、差();(5)格式规范性及考勤是否降等级:是()、否()评阅人:职称:讲师 2008 年 1 月日目录1、设计目的和要求 (4)2、设计内容 (5)3、流程图 (6)4、设计程序和设计实现 (8)6、设计小结 (13)5、参考文献 (14)6、附录(源代码) (15)一、设计目的和要求1、课设目的:通过课程设计,使理论联系实际,在程序设计实践中进一步了解操作系统的原理和算法的实现,全面分析设计系统时应考虑的各种因素。

另外,开设此课程设计也是为了配合《计算机操作系统》课程的教学,通过模拟操作、系统原理的实现,使学生能更深刻地领会操作系统工作原理和操作系统实现方法的理解,并可练习程序设计。

2、课设要求:问题描述:有五个哲学家共用一张圆桌,分别坐在周围的五章椅子上,在圆桌上有五个碗和五只筷子,他们的生活方式是交替地进行思考和进餐。

平时,一个哲学家进行思考,饥饿时便试图去用其左右最靠进他的筷子,只有在他拿到两只筷子时才能进餐。

进餐毕,放下筷子继续思考。

①用VC编程创建五个线程,模拟实现五个哲学家来竞争五只筷子(资源)去吃通心面的情况;②使进程可以在任意时间内运行;③确保五个线程的同步和互斥;④运行时不会产生死锁。

二、设计内容1、依据题目要求,对于问题中的“筷子”(临界资源),在程序中用数组b[j]表示,并且通过调用函数“_beginthread(ThreadFunc1,0,&ph1)void和ThreadFunc1—3(PVOID param)”两个系统函数来编写线程,以及进行相关操作。

2、五位哲学家则是通过类philosopher来定义。

3、线程的同步和互斥是通过调用VC类库中的""类和""类实现的,具体来说是通过函数“EnterCriticalSection (&cs)、LeaveCriticalSection(&cs)、InitializeCriticalSection (&cs)、DeleteCriticalSection (&cs)”构建临界区来实现线程的同步和互斥。

4、解决死锁的办法:通过检测进程状态,一旦五位哲学家同时处于wating状态,则认为进程处于死锁状态,此时采用释放哲学家1(即:进程1)的资源,来解除死锁,当然也可以释放其他进程所占用的资源。

在本程序中是通过drop()函数来实现以上过程的(详见,程序实现)。

5、为了使测试更具普遍性和随机性,本程序通过调用系统类""当中的函数srand()、rand()以及Sleep( ) 来自动产生一个随机时间,以及生成一个指定的进程之间的挂起时间,以此起到一定的延时作用。

三、流程图四、程序设计和程序实现该算法的实现主要包括:线程创建、状态转变和解除死锁三大模块,其中,状态转变模块包括:eating状态转变为thinking状态、thinking状态转变为waiting状态、waiting状态转变为eating状态。

现将各主要模块表示如下:1、线程创建模块:_beginthread(ThreadFunc1,0,&ph1);_beginthread(ThreadFunc2,0,&ph2);_beginthread(ThreadFunc3,0,&ph3);_beginthread(ThreadFunc4,0,&ph4);_beginthread(ThreadFunc5,0,&ph5);线程相关操作:void ThreadFunc 1...5 (PVOID param){while(1){philosopher *pPh;pPh=( philosopher *) param;pPh->ChangeStatus();}}说明:因为创建的五个线程,其相关操作都一样,故上面仅仅给出了其中一个操作模块,其余的类似,不再赘述。

2、状态转变模块:eating状态转变为thinking状态模块:EnterCriticalSection (&cs);if(m_index==1){assert(!b[m_num]); b[m_num]=TRUE;if(m_num==1){b[5]=FALSE;assert(!b[5]);b[5]=TRUE;}m_index=2;srand(time(NULL)*10000);Sleep(rand()%100); }thinking状态转变为waiting状态:else if( m_index==2){if(m_num==1){ if(b[1]==TRUE||b[5]==TRUE)m_index=0;}else if(b[m_num]==TRUE||b[m_num-1]==TRUE){m_index=0;}else m_index=2;}waiting状态转变为eating状态:else if( m_index==0){if(m_num==1){if(b[1]&&b[5]){b[1]=FALSE;b[5]=FALSE;m_index=1;srand(time(NULL)*10000);Sleep(rand()%100);}else{b[1]=TRUE;m_index=2;srand(time(NULL)*10000);Sleep(rand()%100);} }else{if(b[m_num]&&b[m_num-1]){ b[m_num]= FALSE;b[m_num-1]= FALSE;m_index=1;srand(time(NULL)*10000);Sleep(rand()%100);}else{b[m_num]=TRUE;m_index=2;srand(time(NULL)*10000);Sleep(rand()%100);}}}LeaveCriticalSection (&cs) ;3、死锁解除模块:void drop(){philosopher ph1(1),ph2(2),ph3(3),ph4(4),ph5(5);if()==0&&()==0&&()==0&&()==0&&()==0){();}调试结果见(图—1)图—1五、设计小结课程设计终于顺利完成,在松一口气刻的是同时,也要感谢给过我指导的张老师以及帮助过我的所有同学,再次感谢你们!一个多星期课设时间里,我学到很多的东西,不仅巩固了以前所学过的相关知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合的重要性,从而也提高了自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,因为有好多的知识都是第一次接触,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固……该程序设计中,实现进程并发是关键,另外,还有就是同步问题。

这两个问题应该说是设计当中最大的障碍,自己苦苦思索一天,终无进展,当然整个思考过程只是建立在自己学过的知识上。

最后没有办法,只好在网上寻找资源,资源虽然是多,但是多是没有见过的,尤其是一些经典算法......当然,最后经过查找资料,程序得已完成。

整个过程中,自己觉得最大的收获是,通过课设的方式让自己学到了好多没有接触过的新知识,这才是最重要的。

在自己编程之前已经看过了许多参考书,在网上也查了不少的资料。

自认为自己对哲学家问题已经非常了解了。

但事实却不是这样的,设计过程当中没有那么简单,甚至是困难重重。

课程设计是分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。

也许我缺乏的正是这方面的知识。

但是能力毕竟有限,程序还有不完善之处,但我会不断努力,在以后的学习中争取有更大的提高!六、参考文献(1) 汤子瀛.计算机操作系统[M]. 西安电子科技大学出版社.(2) 潭浩强.C++程序设计. 清华大学出版社(3) (4)。

相关主题