下载此文档

操作系统进程互斥及同步-互斥.ppt


文档分类:IT计算机 | 页数:约38页 举报非法文档有奖
1/38
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/38 下载此文档
文档列表 文档介绍
进程之间的约束关系
程序并发执行的相互制约
间接的相互制约关系 —— 资源共享(竞争资源系统)
干脆的相互制约关系 —— 公共变量(进程协作)
34
1. 进程互斥的概念
临界资源
例1:x代表某航班机座号,p1和p2的状态,耗费CPU时间
开锁原语
算法 unlock
输入:锁变量w
输出:无
{
w=0;∕*开锁*∕
}
43
2. 信号灯和P、V操作
什么是信号灯
信号灯是一个确定的二元组(s,q),s是一个具有非负初值的整型变量,q是一个初始状态为空的队列。操作系统利用信号灯的状态对并发进程和共享资源进行限制和管理。
信号灯
信号灯是整型变量。
变量值 ≥ 0 时,表示绿灯,进程执行;
变量值  0 时,表示红灯,进程停止执行。
留意:创建信号灯时,应精确说明信号灯 s 的意义和初值 (这个初值 绝不能为负值)。
44
P 操作
P 操作的定义
对信号灯s的 p操作记为 p(s)。p(s)是一个不行分割的原语操作,即取信号灯值减1,若相减结果为负,则调用p(s)的进程被阻,并插入到该信号灯的等待队列中,否则可以接着执行。
P 操作的实现
入 口
S-1 → S
S≥0 ?
转进程调度
返回
入信号灯等待队列
置“等待状态”
≥0
 0
45
V 操作
V 操作的定义
对信号灯s的 v操作记为 v(s)。v(s)是一个不行分割的原语操作,即取信号灯值加1,若相加结果大于零,进程接着执行,否则,要帮助唤醒在信号灯等待队列上的一个进程。
V 操作的实现
入 口
S+1 → S
从信号灯的等待队列中取出首元素
入就绪队列
置“就绪状态”
返回
S≤0 ?
>0
PV操作是通过原语实现的
进程互斥的实现
46
1. 用上锁原语和开锁原语实现进程互斥
框图描述
上锁原语
进入临界区csa
进程 pa
开锁原语
上锁原语
进入临界区csb
进程 pb
开锁原语
47
程序描述
程序 task1
main( ) {
int w=1; ∕* 互斥锁 *∕
cobegin 
pa( );
pb( );
coend
}
47
程序描述
pa( )
{

lock(w);
csa ;
unlock(w);

}
pb( )
{

lock(w);
csb ;
unlock(w);

}
48
2. 用信号灯的P、V操作实现互斥
框图描述
设:mutex为互斥信号灯,初值为1。
p(mutex)
进入临界区csa
进程 pa
v(mutex)
p(mutex)
进入临界区csb
进程 pb
v(mutex)
49
程序 task2
main( )
{
int mutex=1; ∕* 互斥信号灯 *∕
cobegin
pa( );
pb( );
co

操作系统进程互斥及同步-互斥 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数38
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wawa
  • 文件大小462 KB
  • 时间2022-05-14