《计算机操作系统》管程monitor的特点


管程 monitor的特点 管程是由若干过程、局部数据、初始化序列 组成的软件模块 局部数据变量只能被管程的过程访问 个进程通过调用某过程进入管程 只有一个进程能够进入,其他进程被挂起 互斥
管程monitor的特点 • 局部数据变量只能被管程的过程访问 • 一个进程通过调用某过程进入管程 • 只有一个进程能够进入,其他进程被挂起 互斥 管程是由若干过程、局部数据、初始化序列 组成的软件模块

利用条件变量实现同步 Wait(c) 挂起当前进程 管程变成可用状态 Signal(c) 执行等待队列中的头个进程 队列空则信号丢失
利用条件变量实现同步 • Cwait(c) – 挂起当前进程 – 管程变成可用状态 • Csignal(c) – 执行等待队列中的头个进程 – 队列空则信号丢失

管程的结构进入进程队列 条件C1 局部数据 wait(c1) 条件变量 条件cn 过程1 wait(cn) 紧急队列 过程k 初始化代码 signal 管程等待区管程 出口
管程的结构 局部数据 条件变量 过程1 过程k 初始化代码 … 条件c1 cwait(c1) cwait(cn) csignal 紧急队列 条件cn … 进入进程队列 管程等待区 管程 出口

Monitor boundedbuffer Char buffer[] 使用管程解决生 Int nextin, nextout 产者消费者问题 Int count Int notfull, notempty; Nextin=o: nextout=0: count=0 Void append(char x) Void take(char x if count==n wait(notfull); if count==0 wait(notempty) Buffer[nextinX; X= Buffer[nextout]; Nextin=(nextin+ 1 )%n Nextout=(nextout+1 )%n Count++ Count- Signal(notempty) Signal(notfull);
使用管程解决生 产者/消费者问题 Monitor boundedbuffer; Char buffer[n]; Int nextin,nextout; Int count; Int notfull,notempty; Void append(char x) {if count==n cwait(notfull); Buffer[nextin]=x; Nextin=(nextin+1)%n; Count++; Csignal(notempty); } Void take(char x) {if count==0 cwait(notempty); x= Buffer[nextout]; Nextout=(nextout+1)%n; Count--; Csignal(notfull); } Nextin=0;nextout=0;count=0;

使用管程解决 Void producer 生产者消费者 Char x 问题 While true Void consumer( [produce(x) Char x Append(x); While true ttake(x); Void main( consume (parbegin(producer, consumer);; Jy
使用管程解决 生产者/消费者 问题 Void producer() Char x {while true {produce (x); Append(x); }} Void consumer() Char x {while true {take(x); consume (x); }} Void main() {parbegin(producer,consumer);}

管程的问题 如果 signa不在进程未尾 需要两次进程切换 必须确保 signal之后立刻执行唤醒的进程 不能有新进程进入 Notify (x) 唤醒等待队列的头个进程 原进程继续执行
管程的问题 • 如果csignal不在进程末尾 – 需要两次进程切换 • 必须确保csignal之后立刻执行唤醒的进程 – 不能有新进程进入 • Cnotify(x) – 唤醒等待队列的头个进程 – 原进程继续执行

有界缓冲区管程代码 void append( char x) While count==n wait(notfull) Buffer[nestin]=X; Nextin=(nextin+1 )%n; Count++, void take(char x) Notify(notempty):) iwhile count==0 wait(notempt X= Butfernextout] Nextout-= nextout +1)%n Count-- Notify(notfull)
有界缓冲区管程代码 void append(char x) {while count==n cwait(notfull); Buffer[nextin] =x; Nextin=(nextin+1)%n; Count++; Cnotify(notempty); } void take(char x) {while count==0 cwait(notempty); x = Buffer[nextout]; Nextout=(nextout+1)%n; Count--; Cnotify(notfull); }

Notify的优点 唤醒进程执行前再次测试-whie 给每个条件变量设置监视计时器 Broadcast原语 不知道该唤醒几个进程 不知道该唤醒哪个进程 识别错误发出的信号
Cnotify的优点 • 唤醒进程执行前再次测试-while • 给每个条件变量设置监视计时器 • Cbroadcast原语 – 不知道该唤醒几个进程 – 不知道该唤醒哪个进程 • 识别错误发出的信号

消息传递 send(目标,消息) Receive(来源,消息) Send(distination, message Receive(source, message
消息传递 Send(目标,消息) Receive(来源,消息) Send(distination,message) Receive(source,message)
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C++程序设计开发》第7章 Visual C++程序设计.ppt
- 《C++程序设计开发》第6章 IO流类库.ppt
- 《C++程序设计开发》第5章 程序的类层次结构.ppt
- 《C++程序设计开发》第4章 重载与模板.ppt
- 《C++程序设计开发》第3章 数据结构设计.ppt
- 《C++程序设计开发》第2章 算法设计与程序结构.ppt
- 《C++程序设计开发》第1章 C++程序设计入门.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Reflection Mechanism Java 反射机制.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)CollectionFramework.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Cloning Objects.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 13 I/O Package.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 12 Threads.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 11 Nested Classes and Interfaces.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 10 Interfaces.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 09 Extending Classes.ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 08 Basic Grammar(Part 3).ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 07 Basic Grammar(Part 2).ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 05 Classes and Objects(Part 2).ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 04 Classes and Objects(Part 1).ppt
- 成都信息工程大学(成都信工学院):《Java编程语言 The Java Programming Language》课程教学资源(PPT课件讲稿)Lesson 03 JVM Architecture.ppt
- 《计算机操作系统》第一章 计算机系统概述.ppt
- 《计算机操作系统》第十章 设备管理.ppt
- 《计算机操作系统》第十一章 文件管理.ppt
- 《计算机操作系统》第二章 操作系统概述.ppt
- 《计算机操作系统》第三章 进程描述和控制.ppt
- 《计算机操作系统》第五章 并发性:互斥和同步.ppt
- 《计算机操作系统》第六章 死锁和饿死.ppt
- 《计算机操作系统》第七章 存储器管理.ppt
- 《计算机操作系统》第八章 虚拟存储器.ppt
- 《计算机操作系统》第九章 单处理器调度(9-1)调度的类型.ppt
- 《计算机操作系统》第九章 单处理器调度(9-2)调度的类型.ppt
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第1章 微型计算机概述(李芷).pps
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第10章 微机接口开发技术(李芷).pps
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第2章 80x86微处理器及其体系结构(李芷).pps
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第3章 微机存储器(李芷).pps
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第4章 微机接口概述(李芷).pps
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第5章 控制器接口(李芷).pps
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第6章 并行/串行通信接口(李芷).pps
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第7章 数/模、模/数转换接口(李芷).pps
- 《微机原理与接口技术》课程教学资源(PPT电子教案)第8章 总线接口(李芷).pps