内核中的竞态产生的原因和解决方法

产生原因:

                由于多进程对临界资源的抢占

根本原因:

                1、对于单核处理器而言,内核支持抢占就会出现竞态

                2、对于多核处理器而言,是核与核的竞态

                3、进程与中断间存在竞态

                4、arm开发板不会出现中断与中断间的竞态(目前);NVIC支持中断的嵌套,存在中断间的竞态

解决方法:

                1、中断屏蔽

                2、自旋锁

                3、信号量

                4、互斥体

                5、原子操作

1、中断屏蔽

                就是关闭中断,不过关闭的时间是纳秒(ns)级的;

2、自旋锁

                一个进程抢占了临界资源(上锁),别的进程会在原地等待(自旋状态),直到解锁;

        特点:

                1、自旋状态会消耗cpu资源

                2、自旋锁会出现死锁现象(如两次上锁,一次解锁)

                3、自旋锁支持进程的上下文切换,也支持中断的上下文切换(由于特点4和中断屏蔽)

                4、自旋锁适用于临界资源较小的场景,锁内不能有耗时操作,也不能有copy_from/to_user此类函数(由于特点1)

3、信号量

                原理类似自旋锁,但有所区别,信号量的+-来抢占临界资源,抢占不到资源的进程会进入休眠态;

        特点:

                1、休眠态不消耗cpu资源,但是运行态<--->休眠态的过程中会消耗cpu资源

                2、信号量不会出现死锁现象

                3、信号量支持进程的上下文切换,但不支持中断的上下文切换

                4、不论临界资源较大或较小,信号量都适用

4、互斥体

                与信号量极度相似,区别在于互斥体不是立即进入休眠态,它会等待一段时间,如果这段时间内临界资源被释放,他就不进入休眠态,不然才进入休眠态;

5、原子操作

                将进程占用临界资源这个过程看作一个整体来防止竞态的出现,内部是个变量(原子变量),通过对原子变量的+-1与0比较来确定对临界资源的占用。

                

                

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值