武汉工程大学计算机科学与工程学院综合设计报告设计名称:操作系统综合设计设计题目:进程同步与死锁学生学号:专业班级:学生姓名:学生成绩:指导教师(职称):张立(讲师)完成时间:14年2月17日至14年2 月28日武汉工程大学计算机科学与工程学院制说明:1、报告中的第一、二、三项由指导教师在综合设计开始前填写并发给每个学生;四、五两项(中英文摘要)由学生在完成综合设计后填写。
2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。
3、指导教师评语一栏由指导教师就学生在整个综合设计期间的表现、设计完成情况、报告的质量及答辩等方面,给出客观、全面的评价。
4、所有学生必须参加综合设计的答辩环节。
凡不参加答辩者,其成绩一律按不及格处理。
答辩小组成员应由2人及以上教师组成。
5、报告正文字数一般应不少于5000字,也可由指导教师根据本门综合设计的情况另行规定。
6、平时表现成绩低于6分的学生,其综合设计成绩按不及格处理。
7、此表格式为武汉工程大学计算机科学与工程学院提供的基本格式(适用于学院各类综合设计),各教研室可根据本门综合设计的特点及内容做适当的调整,并上报学院批准。
答辩记录表成绩评定表学生姓名:学号:班级:目录(以下章节名称为参考)摘要 (II)Abstract (II)第一章课题背景(或绪论、概述) (1)1.1 XXXX (1)1.2 XXXX (x)第二章设计简介及设计方案论述 (x)2.1 XXXX (x)2.2 XXXX (x)2.3 XXXX (x)第三章详细设计 (x)3.1 XXXX (x)3.1 XXXX (x)第四章设计结果及分析 (x)4.1 XXXX (x)4.2 XXXX (x)4.3 XXXX (x)总结 (x)致谢 (x)参考文献 (x)附录主要程序代码 (x)摘要生产者—消费者问题是一种同步问题的描述。
该问题描述了两个共享固定大小缓冲区的线程,即所谓的“生产者”和“消费者”在实际运行时会发生的问题。
生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。
与此同时,消费者也在缓冲区消耗这些数据。
该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据,通过Windows的消息机制实现线程之间的同步。
并发程序共享系统资,在竞争时可能会产生死锁,即每个进程都无限等待的另一个进程占有的资源。
为了避免这种情况的产生,银行家算法是一种最具有代表性的避免死锁的算法,它允许系统动态的申请资源,但在分配资源前,计算安全性,安全则分配否则反之。
通过数组之间计算判断情况以及给出安全序列,判断进程申请资源的安全性,判断是否给该进程分配申请的资源。
关键词:生产着与消费者;同步;死锁;银行家算法AbstractProducer - consumer problem is to describe a synchronization problem. The problem described two threads share a fixed size buffer , ie the so-called problem of "producer" and "consumer" in the actual operation will occur. The main role of the producer is to produce a certain amount of data into the buffer, and then repeat the process. At the same time , consumers are consuming data buffer . The key to this problem is to ensure that the producers will not join data when the buffer is full , the consumer does not consume the data in the buffer is hollow , through the Windows message mechanism to achieve synchronization between threads . Concurrent program to share system resources , while competition may produce a deadlock , another process that is waiting for each process occupies an infinite resource . To avoid this situation , the banker's algorithm is one of the most representative algorithms to avoid deadlock , which allows the system to dynamically request resources , but before the allocation of resources , computing security , security is assigned otherwise contrary . By calculation to determine the situation between the array and the security given sequence , determine the process to apply security resources to determine whether the resources allocated to the application process .Keywords:Production of consumer; synchronization; deadlock; banker's algorithm第一章课题背景1.1 操作系统简介操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。
操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。
操作系统也提供一个让用户与系统交互的操作界面。
操作系统的型态非常多样,不同机器安装的操作系统可从简单到复杂,可从手机的嵌入式系统到超级计算机的大型操作系统。
许多操作系统制造者对它涵盖范畴的定义也不尽一致,例如有些操作系统集成了图形用户界面(GUI),而有些仅使用命令行界面(CLI),而将GUI视为一种非必要的应用程序。
操作系统理论在计算机科学中,为历史悠久而又活跃的分支,涉及较多硬件和软件知识。
在计算机软、硬件课程的设置上,它起着承上启下的作用。
其特点是概念多、较抽象、涉及的知识面广。
而操作系统的设计与实现则是软件工业的基础与内核。
1.2 进程同步简介所谓同步,就是并发进程在一个关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通信息称为进程同步。
同步意味着两个或者多个进程之间根据他们一致同意的协议进行相互作用。
同步的实质是使各个合作进程的行为保持在某种一致性或不变关系。
要实现同步,一定存在这必须遵循的同步规则。
1.3 生产者-消费者问题简介生产者-消费者问题是一种同步问题的抽象描述。
计算机系统中的每个进程都可以消费(使用)或生产(释放)某类资源,这些资源可以是硬资源,也可以是软资源。
当系统中进程使用某一资源时,可以看作是消耗,且将该进程称为消费者。
当某个进程释放资源时,则它就相当于一个生产者。
假设一些生产者和消费者是互相等效的,只要缓冲区未满,生产者就可以把产品送入缓冲区,类似地,只要缓冲区未空,消费者便可以从缓冲区中取走物品并消耗它。
生产者和消费者的同步关系禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品。
1.4 银行家算法简介并发程序共享系统资,在竞争时可能会产生死锁,即每个进程都无限等待的另一个进程占有的资源。
死锁的产生,必须满足四个条件,第一为互斥条件,即一个资源每次只能由一个进程占用;第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其他资源;第三个为非剥夺条件,即在出现死锁的系统中一定有不可剥夺使用的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。
为了使系统不发生死锁,必须设法破坏产生死锁的四个必要条件之一。
为了避免这种情况的产生,银行家算法是一种最具有代表性的避免死锁的算法,它允许系统动态的申请资源,但在分配资源前,计算安全性,安全则分配否则反之。
第二章设计简介及设计方案论述2.1 生产者与消费者问题分析假设一些生产者和消费者是互相等效的,只要缓冲区未满,生产者就可以把产品送入缓冲区,类似地,只要缓冲区未空,消费者便可以从缓冲区中取走物品并消耗它。
生产者和消费者的同步关系禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品。
如图2-1是经典生产者与消费者问题的简单描述。
图2-1 经典的生产者与消费者问题Fig 2-1 Classic producers and consumers为解决这一类生产者-消费者问题,应该设置两个同步信号灯:一个说明空缓冲区的数目,用empty表示,其初值为有界缓冲区的大小n;另一个说明满缓冲区的数目,用full表示,其初值为0。
生产者与消费者在执行生产活动与消费活动中要对有界缓冲区进行操作。
由于有界缓冲区是一个临界资源,必须互斥使用,所以,还需设置一个互斥信号灯mutex,其初值为1。
生产者-消费者问题的算法描述如下:生产者:消费者:while(1) while(1){ {... p(full)生产一个产品; p(mutex);p(empty); 从有界缓冲区取产品;p(mutex); v(mutex);送一个产品到有界缓冲区; v(empty);v(mutex); …v(full); 消费一个产品;} }其中,生产者线程流程图如图2-2所示。
2.2 银行家算法分析银行家算法是一种最有代表性的避免死锁的算法。
把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。