操作系统哲学家问题实验报告.doc_第1页
操作系统哲学家问题实验报告.doc_第2页
操作系统哲学家问题实验报告.doc_第3页
操作系统哲学家问题实验报告.doc_第4页
操作系统哲学家问题实验报告.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

实验报告三实验名称: 一、调试验证“有限缓冲”经典同步问题 二、利用Java同步解决“哲学家进餐”问题日期:2015-11-5 班级:13级计科 学号: 姓名: 一、 实验目的1. 了解信号量的使用2. 掌握正确使用同步机制的方法3. 实现生产者消费者进程的互斥与同步4. 实现java同步解决“哲学家进餐”问题二、 实验内容1. 调试验证“有限缓冲”经典同步问题2. 利用Java同步解决“哲学家进餐”问题三、 项目要求与分析1. “有限缓冲”经典同步问题(1) 问题描述有一群生产者进程在生产产品,此产品提供给消费者去消费。为使生产者和消费者进程能并发执行,在它们之间设置一个具有n个缓冲池,生产者进程可将它所生产的产品放入一个缓冲池中,消费者进程可从一个缓冲区取得一个产品消费。(2) 问题分析设两个同步信号量:一个说明空缓冲区的数目,用empty表示,初值为有界缓冲区的大小N,另一个说明已用缓冲区的数目,用full表示,初值为0。由于 在执行生产活动和消费活动中要对有界缓冲区进行操作。有界缓冲区是一个临界资源,必须互斥使用,所以另外还需要设置一个互斥信号量mutex,其初值为1。2. “哲学家进餐”问题(1) 问题描述假如所有的哲学家都同时拿起左侧筷子,看到右侧筷子不可用,又都放下左侧筷子,等一会儿,又同时拿起左侧筷子,如此这般,永远重复。对于这种情况,即所有的程序都在无限制地运行,但是都无法得到任何进展,即出现饿死,所有的哲学家都吃不上饭。规定在拿起左侧的筷子后,先检查右面的筷子是否可用。如果不可用,则放下左侧的筷子,等一段时间后再重复整个过程。(2) 问题分析当出现以下情形,在某一瞬间,所有的哲学家都同时启用这个算法,拿起左侧的筷子,而看到右侧筷子都不可用,又都放下左侧筷子,等一会儿,又同时拿起左侧筷子如此永远重复下去。对于这种情况,所有的程序都在运行,但却都无法取得进展,即出现饿死,所有的哲学家都吃不上饭。解决死锁问题:为了避免死锁,把哲学家分为三种状态:思考,饥饿(等待),进食,并且一次拿起两只筷子,否则不拿。四、 具体实现1.“有限缓冲”经典同步问题。(1) 具体实现代码/缓冲区实现public class BoundeBuffer implements Bufferprivate static final int BUFFER_SIZE=5;private Object buffer;private int in,out;private Semaphore mutex;private Semaphore empty;private Semaphore full;public BoundeBuffer()in=0;out=0;buffer=new ObjectBUFFER_SIZE;mutex=new Semaphore(1);empty=new Semaphore(BUFFER_SIZE);full=new Semaphore(0);public void insert(Object item) try empty.acquire();mutex.acquire();bufferin=item;in=(in+1)%BUFFER_SIZE;mutex.release();full.release(); catch(InterruptedException e) e.printStackTrace();public Object remove()try full.acquire();mutex.acquire(); catch (InterruptedException e) e.printStackTrace();Object item=bufferout;out=(out+1)%BUFFER_SIZE;mutex.release();empty.release();return item;/生产者实现public class Producer implements Runnableprivate Buffer buffer;public Producer(Buffer buffer)this.buffer=buffer;public void run()Date message;while(true)SleepUtilities.nap();message=new Date();System.out.println(生产者 产生了 +message);buffer.insert(message);/消费者实现public class Consumer implements Runnableprivate Buffer buffer;public Consumer(Buffer buffer)this.buffer=buffer;public void run()Date message;while(true)SleepUtilities.nap();message=(Date)buffer.remove();System.out.println(消费者者 消费了 +message);/工厂测试类public class Factory public static void main(String args)Buffer buffer=new BoundeBuffer();Thread producer=new Thread(new Producer(buffer);Thread consumer=new Thread(new Consumer(buffer);producer.start();consumer.start();(2) 运行结果:2. 哲学家进餐问题(1) 具体实现代码class ChopStick boolean available; ChopStick() available=true; public synchronized void takeup() while(!available) try System.out.println(哲学家等待另一根筷子); wait(); catch(InterruptedException e) available=false; public synchronized void putdown() available=true; notify(); class Philosopher extends Thread ChopStick left,right; int phio_num; public Philosopher(ChopStick left,ChopStick right,int phio_num) this.left=left; this.right=right; this.phio_num=phio_num; public void eat() left.takeup(); right.takeup(); System.out.println(哲学家 +(this.phio_num+1)+ 在用餐); public void think() left.putdown(); right.putdown(); System.out.println(哲学家 +(this.phio_num+1)+ 在思考); public void run() while(true) eat(); try sleep(1000); catch(InterruptedException e) think(); try sleep(1000); catch(InterruptedException e) public class WaitNotiExample public static void main(String args) final ChopStick chopsticks=new ChopStick4;final Philosopher philos=new Philosopher4; for(int i=0;i4;i+) chopsticksi=new ChopStick(); for(int i=0;i4;i+) philosi=new Philosopher(chopsticksi,chopsticks(i+1)%4,i); for(int i=0;i4;i+) philosi.start(); (2) 运行结果二、 所遇问题与解决方法1. 问题最初设想当筷子可用是,先分配左边的筷子,等待一会额再分配右边的筷子,由于这个算法过程中,会出现左边的筷子一直被占用着得不到释放,就有可能出现死锁的情况,该算法不可行。2. 解决仅当一个哲学家左右的筷子都可用时,才允许他拿起筷子。这样要么只有一次占用两只筷子在吃面,然后释放所有的资源;要么不占用资源。该算法可行。三、 实验总结1. “有限缓冲”经典同步问题(1) 本次实验是关于生产者与消费者之间互斥和同步的问题。问题的是指是P、V操作,实验设一个共享缓冲区,生产者和消费者互斥的使用,当一个线程使用缓冲区的时候,另一个让其等待直到前一个线程释放缓冲区为止。(2) 实验中包含的知识点很多,包括临界区资源共享问题、信号量定义、PV操作流程、进程间的通信方式(消息传递和共享内存)、进程同步和互斥、信号量机制解决进程之间的同步与互斥问题等等。(3) 通过本实验设计,我们对操作系统的P、V进一步的认识,深入的了解P、V操作的实质和其重要性。课本的理论知识进一步阐述了现实

温馨提示

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

评论

0/150

提交评论