【操作系统】信号量机制解决进程同步问题

目录:

一、进程同步的基本概念

二 、临界资源(Critical Resouce)

三、信号量机制(重点)


一,进程同步的基本概

两种形式的制约关系

间接相互制约关系

如共享某临界资源(账号使用权),当有别人登录上自己账号的时候就会被挤下线,而我登录这一账号就会他挤下去属于互斥制约

直接相互制约关系(生产消费关系),必须要先生产再消费有顺序的进行,属于合作制约,如进程间的合作

二 、临界资源(Critical Resouce)

引入临界资源是为了让进程间能进行互斥访问的资源。

例如:

P1进程中有语句A=x;A=A+1;x=A

P2进程中有语句B=x;B=B-1;x=B;

假设x的初值为5,p1,p2同时进行,x=4和5发生冲突,就要引入临界资源的概念

一个访问临界资源的进程描述

临界区(Critical Section):

每个进程中访问临界资源的代码。

进入区(Entry Section):

在临界区前的一段用于检查临界资源正被访问标志的代码。

退出区(Exit Section):

在临界区后用于恢复检查临界资源未被访问标志的代码。

 剩余区(RemainderSection):

进程中除上述三个区以外的代码。

同步机制应遵循的规则

空闲让进:当无进程处于临界区,允许一个进程进入;

忙则等待:当已有进程进入临界区,其它进程必须等待;

有限等待:对要求访问临界资源的进程,应保证在有限时间进入临界区;

让权等待:当进程不能进入临界区,应立即释放CPU。

三.信号量机制(重点)

信号量(Semaphore):为实现进程同步而设置的特殊变量

1. 整型信号量

与一般变量不同的是,对于信号量除初始化外,仅能通过两个标准的原子操作wait(s)和signal(s)来访问,分别称为P操作和V操作。

信号量的三种操作

(1)初始化

根据实际资源数,对s进行初始化(s≥0为非负整数)

可描述为:Semaphore s=5

(2)P操作, wait(s)

可描述为:

 wait(s)

    { while (s≤0) { };

      s=s-1;

}

(3)V操作, signal(s)

可描述为:

    s=s+1;

说明:仅能通过wait(s)和signal(s)来访问s。wait(s)和signal(s)是两个原子操作(不可分割了),在执行时不可中断

例如:在上例中假设变量x初值为5。P1进程中有语句x=x+1;P2进程中有语句x=x-1;试利用整型信号量机制来解决进程间的并发,即

2.记录型信号量

记录型信号量采用记录型的数据结构,描述为:

typedef struct

{ int value;

  struct

process_control_block *list; 

} Semaphore;

其中:  value:表示资源个数List:等待该资源而阻塞的进程链表 

(1)wait(s)的描述

wait(Semaphore &s)

{

  s.value=s.value-1;

  if (s.value<0)   

block(s.list);阻塞并插入到list阻塞队列

}

(2)signal(s)的描述

signal(Semaphore &s)

{

  s.value=s.value+1;

  if (s.value≤0)

       wakeup(s.list);//唤醒list队列中的第一个进程

}

说明:

wait操作意味着请求一个单位的资源(进入区)。

signal操作意味着释放一个单位的资源(退出区)。

s.value<0表示该类资源已经分配完毕,此时s.value的绝对值就是等待链表s.list中的进程个数

若s.value的初值为1,则表示该资源为临界资源,此信号量成为互斥信号量。

例如:假设变量x初值为5。P1进程中有语句x=x+1;P2进程中有语句x=x-1; P3进程中有语句x=x+2,利用记录型信号量机制来避免在访问临界变量x时出现错误

 篇幅有限,下期介绍AND型和信号量集,请大家多多关注啊!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值