linux内核同步之相关概念


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


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

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

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

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

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

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

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


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


你可能感兴趣的:(Kernel,linux,kernel,札记,linux内核,任务)