进程间的同步与互斥

1、计数信号量及其初始化

由于事件发生的次数可能不止一次,或者资源可用的数量可能不止一个,因此,信号量内部会维护一个计数器,用于表示某种事件发生的次数或者某种资源可用的数量。

信号量至少提供两种操作:一种等待信号,一种发送信号

如果信号计数=0,则进程等待;否则,计数减1,进程继续执行。

2、发送和等待信号

1)等待信号:对于等信号量而言,如果事件或资源的计数不为0,则说明事件已经发生或者资源是可用的,所以不需要等,而如果为0,则需要等待,进程不能继续往下运行。因此,需要将进程从就绪队列中移除,同时放置到信号量的等待队列等。

2)发送信号:当事件发生或者资源可用时,如果有进程在队列中等,则唤醒一个进程让其可以继续往下运行。处理方式很简单,只需要将其回插到就绪队列中,这样进程就可以继续执行了。而如果没有进程在等,则简单的将计数值+1

等待队列的排序顺序设置比较简单,当事件发生或资源可用时,最先等待的进程最先获得事件的处理权。没有基于进程的优先级进行排序。

3、互斥锁

前面通过cli和sti指令就可以快速地开关中断,进而关掉定时中断。防止进程切换。这是不太明智的。因此采用互斥锁来解决

在操作系统中,进程在进入临界区时,首先要获取这把锁,然后才能进入临界区。如果这把锁被其它进程占用了,那么此时就会类似信号量那样,在锁上进行等待;直到其它进程释放了锁之后,进程获得锁,才能继续往下运行

1)上锁

2)释放锁

如果多个进程均以只读的方式访问共享资源,那么不需要进行保护,因为资源的状态总是不变的。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值