9---- 内核同步

为什么要防止共享资源并发访问?

如果多个执行线程同时访问和操作数据就有可能发生各线程之间相互覆盖共享数据的情况,造成被访问数据处于不一致状态,还会造成系统不稳定,难以追踪和调试这类错误。

什么是临界区?

访问和操作共享资源的代码区域,可将这个区域看作是不可分割的指令

什么是竞争条件?

两个线程有可能处于同一个临界区中同时执行

锁提供了什么样的机制?

锁机制相当于一把门锁,临界区相当于门后的房间。在一个指定的时间内房间里只能有一个执行线程存在,当一个线程进入房间后,它会锁住身后的房门;当它完成对共享数据的操作后,会打开门锁走出房间。如果另一个线程在房门上锁的时候来了,那么它就必须等待房间内的线程出来并打开门锁后,才能进入房间。这样,线程持有锁,而锁保护了数据。

自旋锁和信号量两种加锁机制有什么区别?

当锁已经被其他线程持有而不可用时,自旋锁会执行忙等待,信号量会使当前任务睡眠直到锁可用。

内核中哪些情况会造成并发执行?

  • 中断---中断几乎可以在任何时刻异步发生,也就可以随时打断正在执行的代码
  • 软中断和tasklet---内核可以在任何时刻唤醒和调度软中断和tasklet,打断当前正在执行的代码
  • 内核抢占---内核中的任务可能会被另一任务抢占
  • 睡眠及用户空间同步---在内核执行的程序可能会睡眠,这就会唤醒调度程序导致调度一个新的用户进程执行
  • 对称多处理---两个或多个处理器可以同时执行代码

死锁产生的条件是什么?

  • 有一个或多个执行线程和一个或多个资源
  • 每个线程都在等待其中一个资源
  • 所有资源都被占用
  • 所有资源都在相互等待,但绝不会释放已经占有的资源
  • 任何线程都无法继续

什么是自死锁?

如果一个执行线程试图获取一个自己已经持有的锁,它将不得不等待锁被释放,而它本身处于忙等待的状态,没有机会释放自己持有的锁,最终造成自死锁。

你可能感兴趣的:(Linux内核设计与实现)