Presentation is loading. Please wait.

Presentation is loading. Please wait.

信号量(Semaphore).

Similar presentations


Presentation on theme: "信号量(Semaphore)."— Presentation transcript:

1 信号量(Semaphore)

2 信号量(Semaphore) 信号量S 是个整型变量 信号量S只允许两个标准操作: wait() 和 signal()
或者,发明人称之为 P操作、V操作 wait() 和 signal()是原子操作 (atomic operations)

3 如何实现这种信号量 ? wait操作 wait (S){ value--; if (value < 0) {
add this process to waiting queue block(); } }

4 如何实现这种信号量 ? signal操作 signal (S){ value++; if (value <= 0) {
remove a process P from the waiting queue wakeup(P); } }

5 如何实现这种信号量 ? 为信号量设计一个等待队列queue 等待队列的节点(node)类型一致,都包含2项数据单元: int value;
pointer to next node in the queue

6 如何实现这种信号量 ? 等待队列带2个操作函数: Block() – 阻塞自己,主动交出CPU,引起新一轮CPU调度
Wakeup() – 唤醒等待队列里的一个进程,将它移入就绪队列

7 信号量解决无限多进程的临界区问题 进程的临界区必须符合如下框架 Semaphore S; // 初始值为 1 do{ wait (S);
Critical Section; signal (S); remainder section; } while(1);

8 WHY ? 此临界区框架符合Mutual Exclusive 此临界区框架符合Progress
此临界区框架符合Bounded Waiting

9 信号量解决一般性进程同步问题 假设要求:执行完进程Pi 的 A 之后,才允许执行进程 Pj 的 B 定义信号量 flag ,初值为 0
代码框架: Pi Pj   A wait(flag) signal(flag) B

10 END


Download ppt "信号量(Semaphore)."

Similar presentations


Ads by Google