2.3.3临界区进程互斥的硬件方法

全知识整理目录

操作系统整理的目录,包括了整理的所有操作系统的知识。


目录

概述

中断隐藏法 

TestAndSet指令

Swap指令


概述

临界区互斥,除了有软件方法(算法),还有硬件方法的实现,而硬件方法大部门都是通过命令来实现。

中断隐藏法 

利用开/关中断指令实现,即某个进程开始访问临界区,那么就不允许被中断,也就避免了进程的切换,也不会出现两个进程同事访问临界区的情况。

这个方法,简单,有效,但是会导致效率很低。

TestAndSet指令

 执行TestAndSet指令的逻辑是:

假设现在lock为false,代表临界资源A空闲,那么就可以访问临界资源,同时将lock设置为true,提醒别的进程,这个临界资源A正在访问,让其他的等等。

反之为true,则就等等。

bool TestAndSet(bool *lock){
    bool old;    
    old = *lock;    //old用来存放lock原来的值
    *lock = true;    //无论lock的值为什么,都设置为true
    return old;    //返回lock原来的值
}

//临界区互斥算法逻辑
while(TestAndSet(&lock));//上锁并检查
临界区代码...
lock = false;
剩余代码。。。

 TestAndSet指令让上锁和检查操作一气呵成,但是不进入临界区的进程会一直进入循环状态,这样就,违反了让权等待的原则,暂时无法进入临界区的进程,会占用CPU,并循环执行TestAndSet指令。

Swap指令

这个指令跟前面的TestAndSet指令有些相似,每当有一个进程准备访问临界资源时,初始化old=true,和lock,那么别的进程就会等待。

Swap (bool *a, bool *b){
    bool temp;    
    temp = *a;    
    *a = *b;   
    *b = temp;    
}

//临界区互斥算法逻辑
bool old =ture;
while(old == true);
    Swap(&lock,&old);
临界区代码...
lock = false;
剩余代码。。。

Swap指令和TestAndSet指令没有太多的区别,都是会陷入让一个进程循环执行Swap指令的情况,违反让权等待。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybbgrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值