7. 内存管理中的锁

  • 请总结原子操作、spinlock、信号量、读写信号量、Mutex和RCU等Linux内核常用锁的特点和使用规则。
  • 在KSM中扫描某个VMA寻找有效的匿名页面,假设此VMA恰巧被其他CPU销毁了,会不会有问题呢?
  • 请简述页锁PG locked的常用使用方法。
  • 在mm/rmap.c 文件中的page_get_anon_vma()函数中,为什么要使用rcu_read_lock()? 什么时候注册RCU回调函数呢?
  • 在mm/oom_kill.c的select_bad_process()函数中,为什么要使用rcu_read_lock()? 什么时候注册RCU回调函数呢?

前面介绍了 Linux内核中常用的锁机制,如原子操作、spinlock锁、信号量、读写信号量、Mutex、以及RCU等。这些锁的机制都有自己的优势和劣势以及各自的应用范围。

下面归纳总结各个锁的特点和使用规则,如表4.3所示。

7. 内存管理中的锁

前文中介绍内存管理时基本上忽略了锁的讨论,其实锁在内存管理中有着很重要的作用,下面以内存管理为例介绍锁的使用。在rmap.c文件的开始,作者列举了内存管理模块中锁的调用关系图。