操作系统自学(十一)进程互斥的硬件实现方法

在这里插入图片描述

中断屏蔽方法

利用开/关中断指令实现
与原语中的实现思想相同,即在某进程开始访问临界区到访问结束为止都不允许中断
也就是不能发生进程切换,因此不可能发生两个同时访问临界区的情况

关中断
临界区
开中断

其中的关中断后继不允许当前进程被中断 也必然不会发生进程切换
开中断直到当前进程访问完临界区,在执行开中断指令,才有可能有别的进程上处理机并访问临界区

**优点:**简单高效
**缺点:**不适合于多处理机,只适合用于操作系统内核进程,不适合于用户进程
(开/关中断指令只能运行在内核态,这组指令如果能让用户随意使用会很危险)

TestAndSet指令

简称TS指令或者是TSL指令
使用硬件实现的 执行的过程不允许被中断 只能是一气呵成
下面用C语言描述一下(稍微有点难理解 反正我看了好久好久)

//bool类型共享变量lock表示当前临界区是否被加锁
//true表示被加锁 false表示未加锁
bool TestAndSet(bool *lock){
	bool old;
	old=*lock;//old用来存放lock原来的值
	*lock=true;//无论之前是否被加锁 都把lock设置为加锁状态
	return old;//返回原来的值
}
//下面是TLS指令实现互斥算法的逻辑
while(TestAndSet(&lock));//上锁 并 检查
临界区代码段
lock=false;//临界区执行完毕 解锁
剩余区代码段

若刚开始lock是false(未加锁状态)则TSL返回的old是false,while循环条件不满足,直接跳过循环进入临界区
若刚开始lock是true(加锁状态)则执行TLS之后返回的值是true while循环条件满足 一直会卡在这一步上
等待临界区的代码段执行结束之后 lock自动解锁

相比软件方法 TLS指令将上锁检查操作用硬件的方式变成了一气呵成的原子操作
优点实现简单 无需像软件实现方法那样严格检查是否会有逻辑漏洞,适用于多处理机环境
缺点不满足让权等带的原则,暂时无法进入临界区的进程会占用CPU并执行TSL指令,从而导致忙等

Swap指令

也叫Exchange指令 或者简称XCHG指令
从逻辑上看Swap指令和TSL指令没有太大的区别

//Swap指令的作用就是交换两个变量的值
bool Swap(bool *a ,bool *b){
	bool temp;
	temp=*a;
	*a=*b;
	*b=temp;
}

//下面是TLS指令实现互斥算法的逻辑
bool old=true;
while(old==true)
	Swap(old,&lock);
临界区代码段
lock=false;//临界区执行完毕 解锁
剩余区代码段

先记录此时临界区是否被上锁,再将lock设置为true,最后检查old
如果old为false 说明之前没有其他的进程对临界区上锁 则跳出循环 进入临界区

优缺点同TSL相同

上边所写就是进程互斥的硬件实现方法 希望对大家有所帮助

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值