linux内核同步之相关概念


摘要:说明一下同步相关的几个概念


1、临界区访问和操作共享数据的代码段

2、同步原因用户空间之所以需要同步,是因为用户程序会被调度程序抢占和重新调度,这会造成对临界区的再次访问,这样就会产生竞争。严格意义上

这不是真正的并发,仍然是串行,我们可以称之为伪并发,在smp上,则会真正的出现两个进程在临界区中同事执行,也就是真并发

3.造成并发执行的原因:

   a.中断:中断可以在任何时刻发僧,打断当前代码,可能会造成对临界区的再次访问
   b.软中断和tasklet:内核能在任何时刻唤醒或调度软中断和tasklet,打断当前正在执行的代码
   c.内核抢占:内核具有抢占性,所以内核中的任务可能会被另一个任务抢占
   d.睡眠以及用户空间的同步:在内核空间的进程可能会睡眠,从而引起调度,造成对临近区的再次访问
   e.多处理器:多个处理器的时候可以在两个处理器上执行相同的代码。
4.临界区需要考虑的问题:
  a.数据是否是全局,其他线程能否访问他?
  b.数据会不会在进程上下文和中断上下文中工程?会不会在两个不同的中断处理程序中共享?
  c.进程在访问数据时,可不可以被抢占?被调度的新程序会不会访问同一数据?
  d.当前进程会不会睡眠或者阻塞,如果是,它会让共享数据处于何种状态?
  e.如果这个函数又在另一个处理器上被调度将会发生什么?
5.避免死锁方法:
  a.加锁顺序,在嵌套的锁时候必须保证大家都义相同的顺序获得锁
  b.防止饥饿发生,不能出现一直等待的状况,超时设定

  c.不要重复请求同一个锁

  d.越复杂的加锁方法越有可能造成死锁,所以设计应当力求简单


----参考《linux内核设计与实现》


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值