2.5 信号量机制控制同步练习题
读者与写者(写者优先方式)
if writecount=0 then wait(s);
writecount+1
wait(wmutex);
写入文件;
signal(wmutex);
writecount-1
if writecount=0 then signal(s);
黑白棋问题
黑 while(没结束){ p(m); if (turn<>2) 下一黑子; turn=2; v(m) }
白: while(没结束){ p(m); if (turn<>1) 下一白子; turn=1; v(m) }
嗜睡的理发师问题
顾客 Repeat … 顾客坐上椅子 singal(full)(叫理发师) wait(cutok)(享受理发中) 付费 signal(payment) wait(receipt) 离开椅子 离开店 Until false
repeat wait(full)(阻塞就是在睡觉) 理发 signal(cutok) wait(payment) 收费找零 Signal(receipt) Until false
生产与销售问题
信号量机制的不足:
信号量的控制分布在多个进程中 正确性分析困难;
分散的P、V操作:易出错,使用不当可能导致死锁。
修改、维护困难:易读性差,任一修改都可能影响全局;测试期间发现错误困难,即使发现错误也不容易定位出错位置。
管程(monitor)机制
主要内容
管程的组成
一组局部变量 对局部变量操作的一组过程 对局部变量进行初始化的语句。 (联想面向对象中的类)
管程的特点
任何进程只能通过调用管程提供的过程入口才能进入管程访问共享数据; 就如同使用临界资源,就要先通过其信号量的申请。 任何时刻,仅允许一个进程在管程中执行某个内部过程。
管程的同步控制(条件变量)
条件变量(主要作用就是进程同步的阻塞和唤醒控制)
管程的优点:
保证进程互斥地访问共享变量,并方便地阻塞和唤醒进程
2.6 进程通信
进程通信是指进程之间的信息交换。
1.进程通信的类型
共享存储器系统(操作存储区方式)
消息传递系统(发--收方式)
管道通信(中间文件方式)
Client-Server system
2.消息传递通信的实现方法
1)直接通信方式
2)间接通信方式
3.消息传递系统的实现
通信链路的建立
消息格式
同步方式
4.消息缓冲队列通信机制
不需管理链路
定义简单数据结构(亦即消息格式)
实现发送和接收的操作原语
2.7 线程
一、认识线程
1.线程的引入 多道程序管理:追求效率的目的下实现“并发”
2.线程的属性
3.线程的信息
4. 线程的创建和终止
在多线程OS中,应用程序启动时,通常只有一个线程(初始化线程)在执行,它根据需要再创建若干线程。
5.多线程系统中的进程
进程只是用于分配系统资源
包括多个线程
不是执行实体,线程在进程范围内作为执行实体。
6.线程的管理
1)互斥锁
2)条件变量
3)信号量
二、线程的实现方式
1.内核线程KST(kernel-level thread)
2.用户线程ULT(user-level thread)
3.组合方式
内核支持多KST线程的管理,同时也允许用户应用程序级的线程管理。