《linux kernel develpoment》第九章

《linux内核设计与实现》

内核同步介绍

1、临界区和竞争条件

临界区:访问和操作共享数据的代码段。
竞争条件:两个线程有可能处于同一个临界区中同时执行,那么就算是一个BUG,即成为竞争条件。

2、加锁

为了防止同时两个进程修改同一个数据导致出错,此时当我们进程要修改一个数据时,就需要上一把锁,以防止其他进程修改。
伪并发:在一个程序内通过处理信号去实现同步
真并发:通过对称多处理器去实现同步

在内核抢占时能并发访问的成为抢占安全代码(preempt-safe)
在对称多处理器能避免并发访问的成为SMP安全代码
在内核编译中有CONFIG_SMP和CONFIG_PREEMPT选项,根据这两个选项可以配置我们是否需要锁的机制。

内核可能发生并发执行的原因:
1、中断:因为中断随时发生,可能打断正在执行的代码
2、软中断和tasklet:内核在任何时刻都可能调度,因此也可能打断正在执行的代码
3、内核抢占:内核具有抢占性,因此内核的任务可能被其他任务抢占
4、睡眠及与内核空间的同步:内核的进程可能睡眠,这就会唤醒调度程序,导致调度新的用户进程执行
5、剁成多处理:两个或多个处理器可以同时执行代码

3、死锁

1、自死锁:当一个线程试图获取自己就已经拥有的锁时就会造成死锁
步骤:获得锁->再次试图获得锁->等待锁重新可用
2、ABBA死锁:
线程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值