管程概念及实现要旨
管程引入了条件变量condition。
wait操作,把当前进程挂到条件变量对应的阻塞队列上去,signal把条件队列上的对手进程唤醒。
注意:条件变量的signal操作和信号量的signal是有区别的。条件变量的signal可能啥都不干,如果有阻塞的进程唤醒,没有啥事都不做。
wait如果资源忙,挂到条件队列上。
把资源使用的操作集中在管程中,使进程的设计更加有条理。
任何时候只有一个进程进入管程。
管程任何时候只有一个进程处于活跃状态。
管程:1 数据:对资源抽象出来的数据,一系列的访问资源的过程中被阻塞而引入的阻塞原因的代表,条件变量 2入口过程。
Hoare管程实现方案
在编译或者实现的时候,对互斥信号量的申请,对紧急等待队列或入口等待队列加上去。
唤醒者要等待被唤醒者唤醒后自己再继续。
把自己挂到紧急等待队列上。
让唤醒者牺牲,优先处理被唤醒者的反感。
基于Hoare管程的哲学家进餐问题解决方案
管程:主要的设计目的就是把关于资源特别是关于临界资源的访问操作抽象到有关管程的入口过程里。
procedure过程
阻塞到条件变量上去。
Hanson管程实现方案
基本的前提是利用了系统提供的关于条件变量的操作的原语,W和R。
基于Hanson管程的生产者—消费者问题
进程通信概念及分类
消息传递通信实现方式
消息缓冲队列通信机制
消息缓冲队列是一个消息缓冲区的链表。
首先把消息发送到对方的消息缓冲队列中,然后receive原语接收。
线程的概念与特征
线程的控制同步与通信
线程从属于进程
线程实现方式
注意:内核级的线程和用户级的线程调度与分配的时间不一样,比如内核级A有1个线程,B有100个线程,则A有1个时间片,B有100个时间片,而用户级的线程单位是进程,A有1个时间片,B中的每个线程拥有的是1/100的时间片。
构建了一个轻型进程的缓冲池。
如果需要和内核进程打交道,需要和内核级线程关联。如果不关联,就只在用户空间里。
solaris提出了一种混合型的,这种方案逐渐被淡忘。