2023年操作系统哲学家问题实验报告.docx

上传人:太** 文档编号:72718691 上传时间:2023-02-13 格式:DOCX 页数:8 大小:22.57KB
返回 下载 相关 举报
2023年操作系统哲学家问题实验报告.docx_第1页
第1页 / 共8页
2023年操作系统哲学家问题实验报告.docx_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《2023年操作系统哲学家问题实验报告.docx》由会员分享,可在线阅读,更多相关《2023年操作系统哲学家问题实验报告.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验报告三实验名称:、调实验证“有限缓冲”经典同步问题二、运用Java同步解决“哲学家进餐”问题日期:2 0 23-11-5 班级:1 3级计科 学号: 姓名:一、实验目的1 . 了解信号量的使用2 .掌握对的使用同步机制的方法3 .实现生产者消费者进程的互斥与同步4 .实现j a va同步解决“哲学家进餐问题二、实验内容1 .调实验证“有限缓冲”经典同步问题2 .运用Ja v a同步解决“哲学家进餐”问题三、项目规定与分析1 . “有限缓冲”经典同步问题(1)问题描述有一群生产者进程在生产产品,此产品提供应消费者去消费。为使生产者 和消费者进程能并发执行,在它们之间设立:一个具有n个缓冲池,

2、生产者进程 可将它所生产的产品放入一个缓冲池中,消费者进程可从一个缓冲区取得一个 产品消费。(2)问题分析设两个同步信号量:一个说明空缓冲区的数目,用empty表达,初值为有 界缓冲区的大小N,另一个说明已用缓冲区的数目,用full表达,初值为0。由 于在执行生产活动和消费活动中要对有界缓冲区进行操作。有界缓冲区是个临界资源,必须互斥使用,所以此外还需要设立一个互斥信号量mutex,其 初值为1。whil e ( t rue) t ();t ryo。s Lee p ( 1 000);ca t c h(In t e r ruptedEx c e ption e )。s think();。tn y

3、0 o sLeep ( 1 000);a cat c h (In t e r ruptedExcep t ion e)public class WaitNotiE x a mplep u b 1 ic st a tic v o id m a in (String ar g s) fi n al C h o pS t ick ch o psti c k s =new ChopS t ick 4 ;o final Ph i los o p her p hil o s=new Phil o sopher 4;f o r(i n t i =0; iV4; i + + )chops tick si =n

4、ew Ch o pSti c k();for(int i=0;i4;i+)。p h i 1 o si =new Phi 1 osophe r (chopst i c k s i , c h ops tic k s(i+l)%4, i);f or( i nt i =0;i WaitNotiExample Java Application C:Program FilesJavajre1.8.0 51binjavaw.exe (2015年 11哲学家等待另一根筷子一哲学家2在用餐哲学家等待另一根筷子哲学家等待另一根筷子哲学家1在用餐哲学家等待另一根筷子哲学家2在思考哲学家等待另一根筷子哲学家4在用餐

5、哲学家等待另一根筷子哲学家1在思考哲学家等待另一根筷子哲学家3在用餐哲学家等待另一根筷子哲学家4在思考哲学家等待另一根筷子二、所遇问题与解决方法1.问题最初设想当筷子可用是,先分派左边的筷子,等待一会额再分派右边的筷子,由于这个算法过程中,会出现左边的筷子一直被占用着得不到释放,就有也许出现死锁的情况,该算法不可行。2 .解决仅当一个哲学家左右的筷子都可用时,才允许他拿起筷子。这样要么只有一次 占用两只筷子在吃面,然后释放所有的资源;要么不占用资源。该算法可行。三、实验总结1 . “有限缓冲经典同步问题(1)本次实验是关于生产者与消费者之间互斥和同步的问题。问题的是指是P、V 操作,实验设一个

6、共享缓冲区,生产者和消费者互斥的使用,当一个线程使用 缓冲区的时候,另一个让其等待直到前一个线程释放缓冲区为止。(2)实验中包含的知识点很多,涉及临界区资源共享问题、信号量定义、PV操作 流程、进程间的通信方式(消息传递和共享内存)、进程同步和互斥、信号 量机制解决进程之间的同步与互斥问题等等。(3)通过本实验设计,我们对操作系统的P、V进一步的结识,进一步的了解P、V操作的实质和其重要性。课本的理论知识进一步阐述了现实中的实际问题。2 .哲学家进餐问题(1)程序分为四大模块,一步步解决了哲学家状态及状态改变的问题,筷子的“闲”、 “用”问题;实现了哲学家等待、吃饭、思考三个过程的转换循环,并

7、且避免 了死锁问题;让临间资源得到了充足的运用。(2)这次实验让我学会分模块解决问题,如何运用互斥锁对临间资源进行管理;此 外自己在编程上以及一些函数的结识上存在较大的问题,以后应当多多实践, 提高自己的反映速度,加速逻辑思维能力。2. “哲学家进餐”问题(1)问题描述假如所有的哲学家都同时拿起左侧筷子,看到右侧筷子不可用,乂都放下 左侧筷子,等一会儿,又同时拿起左侧筷子,如此这般,永远反复。对于这种情 况,即所有的程序都在无限制地运营,但是都无法得到任何进展,即出现饿死, 所有的哲学家都吃不上饭。规定在拿起左侧的筷子后,先检查右面的筷子是否可用。假如不可用,则 放下左侧的筷子,等一段时间后再

8、反复整个过程。(2)问题分析当出现以下情形,在某一瞬间,所有的哲学家都同时启用这个算法,拿起 左侧的筷子,而看到右侧筷子都不可用,又都放下左侧筷子,等一会儿,又同 时拿起左侧筷子如此永远反复下去。对于这种情况,所有的程序都在运营, 但却都无法取得进展,即出现饿死,所有的哲学家都吃不上饭。解决死锁问题:为了避免死锁,把哲学家分为三种状态:思考,饥饿(等待), 进食,并且一次拿起两只筷子,否则不拿。四、具体实现1. “有限缓冲”经典同步问题(1)具体实现代码缓冲区实现p ubli c class Bound e Bu f f e r implemen t s Bu f f er(p r ivate

9、 sta t ic f i nal i n t BUFFER_S IZ E=5;private 0 b j e ct bu f f er;p r i vate i n t in,out;priv a t e S e maphore m u tex;。private Semapho r e empty;priva t e S ema p ho r e full;pu b lie Boun deBuffe r ()。in=0;ou t = 0 ;。 b uf f e r =new Ob j ect B L7FFER_S /ZE;。mut e x = new S e maphore(l);,e m

10、p ty=n e w Semapho r e (BUFFER_SIZE);。 ful 1 = new S e maph o re(0);。pu b lie void i n sert(O b ject it c m) (try(。 em p ty. a cquir e ();。 mutex.acqui r e ();。 buffe r i n = i t em;in=(in+l)%B UFFER_SIZE,o mu t ex. rele a se();f u 1 1.r elease(); c a tch(Interru p tedE xception e )e.printSta c kTra

11、ce () ;public Obje c t remov e ()。t ry oofulla c qu i re();。m u tex.acq u ire():o ca t ch ( I n terrupt e d Ex c e p t i on e)。(oo o e. prints t a c k T race(); Object item=buf f er out:o out= (o u t+l)XBUFF E P_SI Z E。 mu t e x.releas e ();o em p t y . r e 1 e ase();0。retur n item;。生产者实现p ublic c 1

12、 ass P r o d u c er i mplemen t s Runnab 1o p riv ate B u f f e r buffer;o public Producer(B u f f e r buffer),。th i s. bu f f e r=b u ffer;oo pu b 1 ic void ru n ()Date mess a ge; d 0o wh i 1 e( t r ue) s SleepUt i li t ies.nap();。mes s a ge=new D a t e();System.out. p r inti n (生产者 产生了 +messag e )

13、;。b uffer. ins e rt (m e ssa g e );0 。)消费者实现publi c cla s s Co n s umer i mpl e ments Runna b 1 e private Buffer bu f f er;pu b 1 i c Cons umer (Buffer buffer) t his.buffer=buffer;public voi d r u n()(。Date mes sage;。o while(true)(, SI e e put i 1 i ties.na P ();m e ssage=(Date)buf f e r . remove();

14、d。 S y s t em.out.p r intln(消费者者 消费了 +m e ssage);/工厂测试类p ubl i c c 1 as s Fact orypu b lie stati c void ma i n (Str i ng arg s )Bu f f e r b u ffe r =new Boun d e Buffer。;Threa d produce r = n ew T hr e ad(new Pro ducer(buf f e r);。T hread consumer=newTh read (new Con sumer(buffe r );。pro d uc e r.

15、s t a r t();consumer, s ta r t();(2)运营结果: Factory (1) Java Application C:Program FilesJavajre1.8.0_51binjavaw.exe 生产者产生 j Sun Nov 22 18:37:24 CST 2015消费者者消费了 Sun Nov 22 18:37:24 CST 2015生产者 产生了 Sun Nov 22 18:37:24 CST 2015生产者产生了 Sun Nov 22 18:37:27 CST 2015消费者者 消费了 Sun Nov 22 18:37:24 CST 2015 消费者者消

16、费1 Sun Nov 22 18:37:27 CST 2015生产者产生了 SunNov 22 18:37:29 CST 2015生产者产生了 SunNov 22 18:37:30 CST 2015生产者产生了 SunNov 22 18:37:32 CST 2015生产者产生了 SunNov 22 18:37:32 CST 2015生产者产生了 SunNov 22 18:37:32 CST 2015生产者产生了 SunNov 22 18:37:32 CST 2015消费者者消费了 Sun Nov 22 18:37:29 CST 2015 生产者产生了 Sun Nov 22 18:37:34 C

17、ST 2015消费者者 消费了 Sun Nov 22 18:37:30 CST 2015生产者 产生了 Sun Nov 22 18:37:34 CST 2015消费者者 消费了 Sun Nov 22 18:37:32 CST 2015 消费者者 消费亍 Sun Nov 22 18:37:32 CST 2015 生产者产生了 Sun Nov 22 18:37:37 CST 2015消费者者消费了 Sun Nov 22 18:37:32 CST 2015生产者产生了 Sun Nov 22 18:37:39 CST 2015牛产者产牛了 Sun Nov 22 18:37:40 CST 20152.哲

18、学家进餐问题(1)具体实现代码cl a s s Chop S t ickb oo 1 ean a v a i lable;C ho p Stic k () a v a i lable = true:p u b1 i c synchronized void takeu p()wh ile(! a v ailab 1 e)o (。tr y。System. out. p rintl n (哲学家等待另一根筷子“);。,wai t ();ca t ch ( I n t e r ruptedExc e ption e )0 )。avail a ble=fals e ;)pu b lie s y nchr

19、 o nized v o id p u tdown ()(。a vail a b le= true;no t i fy();c 1 a ss Ph i lo s opher e x tends ThreadC hop S tick left, right;int phio_num;p u blic Phil o s ophe r (Ch o pS t ick le f t,Ch o pSti c k r ight,i nt p h io_ num)t hi s .left= 1 eft;t h is.r i ght=rig h t;0 thi s.ph i o_num= p hio_n um;)p u blic v o id e a t()( 1 ef t . t a ke u p ();。r i ght.ta keup();S y s t em. ou . p r i n tin(哲学家+( t his. p h i o_n u m+l)+在用餐”):)publi c void t hin k()f left, p ut d ow n ();righ t .pu t down();System, o ut. printin (哲学家+ (t h is.phio_num+ 1 ) + 在思考”);)pu b lie v o id run()

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁