2020生产者消费者问题操作系统课程设计思路.pptVIP

2020生产者消费者问题操作系统课程设计思路.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目的及方法 技术路线 核心技术 测试情况及分析 4 1 2 3 OS 课程设计 —— 总结汇报 目 录 一 工作总结 存在问题 改进及讨论 系统演示 8 5 6 7 目录二 目的及方法 本课程设计通过模拟计算机操作系统中经典的 “生产者 — 消费者问题”,巩固在操作系统原理课 上所学的知识,加深对操作系统中进程同步和互斥、 临界区管理等问题认识和理解,同时又了解了软件 设计的流程、方法以及思想,提高分析设计以及编 程的能力。 技术路线 生产者 — 消费者 多生产者多消费者 同步 互斥 并发 可视化 P () / V () 多线程 Java Swing 和 awt Thread Java 中的 wait() 和 notify() 管程实现 核心技术( 1 ) public class Semaphore { // 信号量(即 P V 操作的类) private int Value;// 信号量值 public Semaphore(int semValue){ this.Value=semValue; } PS :用 Java 中的 wait() 和 notify() 模拟 操作系统的 P/V 操作 public synchronized void p(String s){ //P 操作(即申请资源) Value--; if(Value0){// 没有可用资源 try{ 祓瑳浥漮瑵瀮楲瑮尨?? 进入阻塞队列 \n); 牦浡??愮灰湥?屜猫尫 进入阻塞队列 \n); this.wait(); // 因资源不足而阻塞自己 //System.out.print(\+this.toString()+is waitting\n);//** }catch(InterruptedException e){} } } 类 Semaphore 的 定义 和重要方法 方法 模拟操作系统的 P 操作 public synchronized void v(String ss){//V 操作 Value++; if(Value=0){ ??祓瑳浥漮瑵瀮楲瑮尨?獳尫 唤醒 ); frame.a1.append(\+ss+\ ); 牦浡??愮灰湥? 唤醒一个等待资源的线程 \n); this.notify(); // 释放一个等待资源的线程 //System.out.print(\+this.toString()+is waking up\n);//** } } } 模拟操作系统的 V 操作 核心技术( 2 ) 管程类 InterfaceModule 类的属性 : private Semaphore mutex;// 进程调用管程之前所使用的互斥信号量 private Semaphore next;// 发出 signal 操作的线程挂起自己的信号量 int next_count;// 在 next 上等待的线程数 管程类 InterfaceModule 类的重要方法: ( 1 ) public void enter()// 进入管程 ( 2 ) public void leave()// 离开管程 ( 3 ) public void Wait(Semaphore x_sem,Count x_count) //wait 函数 ( 4 ) public void Signal(Semaphore x_sem,Count x_count) //Signal 函数 核心技术( 2 )续 —— 核心函数 public void enter(String s) { mutex.p 猨尫 因无法进入管程而 );// 互斥的进入管程 牦浡??愮灰湥?屜猫尫 已经进入 管程 \n); //System.out.print(\ 进入管程 \n); } PS: mutex.p 要使用到前面模拟的 P/V 操作函数 public void leave(String s1) { 牦浡??愮灰湥??尫 当前正在执行管程的 leave 操作 \n); if(next_count0)// 判断有否发出 signal 操作 的线程 { next.v 猨? 释放一个因发出 signal 操作 而阻塞自己的线程 \n);// 若有就释放一个 ??

文档评论(0)

zhaohuifei + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档