Linux操作系统课程设计-车辆死锁_第1页
Linux操作系统课程设计-车辆死锁_第2页
Linux操作系统课程设计-车辆死锁_第3页
Linux操作系统课程设计-车辆死锁_第4页
Linux操作系统课程设计-车辆死锁_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《操作系统原理》课程设计报告姓名:吴沛儒班级:BX0907学号:9指导老师:胡静二〇一一

目录一、 《操作系统原理》课程设计的目的与要求 31、 目的 32、 要求 3二、 简述课程设计内容、主要功能和实现环境 31. 课程设计内容 32. 主要功能 33. 实现环境 3三、 任务的分析、设计、实现和讨论 31、 任务的分析 32、 任务的设计与实现 43、 操作过程和结果分析 54、 思考题的解答和讨论 6四、 《操作系统》课程设计小结(收获、不足与建议) 6五、 附录 7

设计课题:操作系统的死锁实验(车辆死锁问题)《操作系统原理》课程设计的目的与要求目的理解死锁的产生原因,掌握预防和避免死锁的方法,以及死锁的检测方法。通过车辆行驶死锁问题的设计与实现掌握解决死锁的方法。要求编写车辆行驶死锁问题的程序:在Linux下用C语言编程,利用信号量操作实现进程同步;假设3个方向的车辆数目相等,数值由用户输入,并动态显示车辆的行驶状态,每个车辆行驶所用的时间可以预先设定。简述课程设计内容、主要功能和实现环境课程设计内容车辆行驶死锁问题,在Linux下用C语言完成下面模型:设有一个T字型路口,其中A、B、C、D处各可容纳一辆车,车行方向如图1所示。试找出死锁并用有序分配法消除之,要求资源编号合理。图1T型路口模型图主要功能本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。实现环境本次课程设计结合算法的特点,采用LinuxUbantu操作系统平台。开发工具为MicrosoftVisualC++6.0。任务的分析、设计、实现和讨论任务的分析死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于一种永久等待状态。死锁的四个必要条件:互斥条件(mutualexclusion):资源不能被共享,只能由一个进程使用。请求与保持条件(holdandwait):已经得到资源的进程可以在此申请新的资源。非剥夺条件(nopre-emption):已分配的资源不能从相应的进程中被强制地剥夺。循环等待条件(circularwait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程已占用的资源。死锁预防的基本思想是对进程在申请有关资源的时候规定某种策略,如果所有进程都遵守这一策略,则系统就不会进入死锁状态。预防死锁的策略有两种:资源预先分配策略和资源有序分配策略。本实验主要使用资源有序分配策略来预防死锁。下面开始重点介绍资源有序分配策略的申请过程及其缺点。资源有序分配策略在于打破死锁条件中的循环等待条件。事先将所有的资源类进行全排序,并对其进行编号,赋予每个资源类一个唯一的整数(该资源类的数量)。资源的有序分配策略规定进程必须按照资源编号由小到大的次序申请资源。就是说,当进程不占有任何资源时,该进程可以先去申请某一个资源类中的任意多个资源实例,但当它申请另一资源类时,必须满足申请的该资源类中的若干个资源实例,则他必须在一个申请命令中同时发出请求。一个进程必须按从小到大的次序进行资源的申请。可以申请某一资源类中的资源实例充要条件是它必须已经释放了前一个申请的资源类中的所有资源实例,其中申请的该资源类中的资源实例的数量要大于等于前面所申请的资源实例的数量。如果所有的进程在申请资源是都遵循上述的策略,系统就不会发生死锁。在使用资源有序分配策略时,资源类的编号应当仔细考虑,通常应当按使用资源的次序来给资源类编号。资源有序分配策略也有缺点,它限制了进程对资源的请求,而且资源的编号较困难;同时暂时不用的小编号的资源需先申请,加长了它的占用时间。任务的设计与实现死锁的可能性有两种:(1)E方向两辆车分别位于A和B,S方向一辆车位于C,W方向一辆车位于D。(2)S方向两辆车分别位于B和C,E方向一辆车位于A,W方向一辆车位于D。位置资源编号:f(C)=1,f(B)=2,f(A)=3,f(D)=4。管理C,B,A,D四个位置的信号量分别为s1,s2,s3,s4,初始值均为1。控制的PV原语,如表1所示。表1利用PV原语解决死锁算法Semaphores1=1,s2=1,s3=1,s4=1;VoidS(){P(s1);驶入C;P(s2);驶入B;V(s1);P(s3);驶入A;V(s2);驶出A;V(s3);}VoidE(){P(s2);驶入B;P(s3);驶入A;V(s2);P(s4);驶入D;V(S3);驶出D;V(S4);}VoidW(){P(S1);//按序申请P(S4);驶入D;驶入C;V(S4);驶出C;V(S1);}本实验的程序流程图,如图2所示。图2车辆死锁问题流程图操作过程和结果分析在Linux系统中运行程序deadlock2。输入每条路上的车辆数并按确定。图3程序运行结果截图思考题的解答和讨论在程序中为什么要创建三个线程?为了进一步提高系统的并行处理能力,在程序中加入线程,使处理机并行处理多线程。在ubuntu系统运行程序时为什么要输入-lpthread?Lpthread是一个库,在linux操作系统编程时要用到这个库。就像使用pow等数学计算函数需要用到math.h。Semaphore这个库是做什么用的?在这个程序中这个库是十分重要的,semaphore是信号量库。用以执行PV操作。《操作系统》课程设计小结(收获、不足与建议) 当我在回首这一个星期的时候,不因虚度光阴而悔恨,也不因碌碌无为而羞耻。我想,这可能是我一学期中最丰富而有意义的一个星期了。从大一开始我的理论知识就比实践知识好的多,每门课都如此,实训是我最头疼的一件事。课本上记得很牢的东西到了实际操作的时候感觉都用不上,做个实验就手忙脚乱的。所以我感觉,这个星期的课设不仅学到了在理论课上学不到的知识,更是让我对自己的实践操作有了信心。本次课程设计的题目之一是用“死锁”来处理车辆行驶的问题,其中用到了理论课中学过的死锁和资源分配的东西。操作系统的基本特征是并发和共享,系统允许多个进程并发执行,并且共享系统的软、硬件资源。为了最大限度的利用计算机系统的资源,操作系统应采用动态分配的策略,但是这样就容易因资源不足,分配不当而引起“死锁”。死锁是指系统中若干个进程相互“无知地”等待对方所占有的资源而无限地处于等待状态的一种僵持局面,其现象是若干个进程均停顿不前,且无法自行恢复。死锁是并发进程因相互制约不当而造成的最严重的后果,是并发系统的潜在的隐患。一旦发生死锁,通常采取的措施是强制地撤销一个或几个进程,释放它们占用的资源。这些进程将前功尽弃,因而死锁是对系统资源极大的浪费。预防死锁的策略有两种:资源预先分配策略和资源有序分配策略。本实验主要使用资源有序分配策略来预防死锁。但这种策略也是有缺点的,它限制了进程对资源的请求,而且资源的编号较困难;同时暂时不用的小编号的资源需先申请,加长了它的占用时间。因为这个课题的源代码在实验书上都有的,所以在程序的调试和运行上我没有发现什么大问题。而是更加巩固了理论知识中的死锁问题,尤其是其中的银行家算法。银行家算法作为一个避免死锁发生的重要算法为我们所熟知,当新进程进入系统时,它必须说明对各类资源类型的实例的最大需求量。仅当申请者可以在一定时间内无条件地归还它所申请的全部资源时,才能把资源分配给它。人无完人,程序也如此,即使是这样周密的算法也有一定的缺陷,银行家算法的主要问题是,每个进程必须事先知道资源的最大需求量,而且在系统运行时,考查每个进程对各类资源的申请需花费较多的时间。而且这种算法过于谨慎,花销较大。路漫漫其修远兮,吾将上下而求索。我们对操作系统的学习还有很长的路要走,死锁只是其中的一小部分。重要的是,我在实训的这种里学到了这样的一种精神,一种知难而上,相信努力和付出能够带来好的结果的精神。这种精神比刻板的知识点更加重要,能够指引我走向更宽阔的明天。附录程序源代码:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<semaphore.h>//死锁#defineMax5 //车辆最大数目pthread_tE[Max]; //E方向的线程pthread_tW[Max]; //W方向的线程pthread_tS[Max]; //S方向的线程pthread_mutex_ts1; //C处的互斥信号pthread_mutex_ts2; //B处的互斥信号pthread_mutex_ts3; //A处的互斥信号pthread_mutex_ts4; //D处的互斥信号inti; //用于方便动态显示行驶信息的void*s(void*a1) //S方向{pthread_mutex_lock(&s1); //相当于PV原语中的P操作printf("S%denterC\n",i+1);sleep(2); //方便观察pthread_mutex_lock(&s2);printf("S%denterB\n",i+1);sleep(2);pthread_mutex_unlock(&s1); //相当于PV原语中的V操作pthread_mutex_lock(&s3);printf("S%denterA\n",i+1);sleep(2);pthread_mutex_unlock(&s2);printf("S%dleaveA\n",i+1);printf("!!!Sfinishedone\n"); //一辆S方向上的车已经通过sleep(2);pthread_mutex_unlock(&s3);}void*e(void*a2) //E方向{pthread_mutex_lock(&s2);printf("E%denterB\n",i+1);sleep(2);pthread_mutex_lock(&s3);printf("E%denterA\n",i+1);sleep(2);pthread_mutex_unlock(&s2);pthread_mutex_lock(&s4);printf("E%denterD\n",i+1);sleep(2);pthread_mutex_unlock(&s3);printf("E%dleaveD\n",i+1);printf("!!!Efinishedone\n");sleep(2);pthread_mutex_unlock(&s4);}void*w(void*a3) //W方向{pthread_mutex_lock(&s1);pthread_mutex_lock(&s4);printf("W%denterD\n",i+1);sleep(2);printf("W%denterC\n",i+1);sleep(2);pthread_mutex_unlock(&s4);printf("W%dleaveC\n",i+1);printf("!!!Wfinishedone\n");sleep(2);pthread_mutex_unlock(&s1);}intmain(intargc,char*argv[]){intc; //记录输入的数值printf("ThisprogramwillhelpyouletcarscrossthisTcrossing.\n");printf("Supposethattherearesamequantityofcarsinthreederections.\n");printf("Pleaseinputtheintegernumber,lessthan5:");scanf("%d",&c);if(c>Max) //c不能大过MAX{printf("Youenterthewrongnumber,tryagain.\n");exit(1);}inti1=pthread_mutex_init(&s1,NULL); //初始化互斥信号量if(i1!=0){printf("Createerror.");exit(1);}inti2=pthread_mutex_init(&s2,NULL);if(i2!=0){printf("Createerror.");exit(1);}inti3=pthread_mutex_init(&s3,NULL);if(i3!=0){printf("Createerror.");exit(1);}inti4=pthread_mutex_init(&s4,NULL);if(i4!=0){printf("Createerror.");exit(1);}for(i=0;i<c;i++) //分别创建c个W方向、E方向、S方向上的线程{pthread_create(&W[i],NULL,(void*)w,(void*)(i+1));pthread_create(&E[i],NULL,(void*)e,(void*)(i+1));pthread_create(&S[i],NULL,(void*)s,(void*)(i+1));sleep(5);}//销毁线程for

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论