在execve()系统调用的源代码中 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=fs/exec.c#l177
有一段代码:
#ifdef SPLIT_RSS_COUNTING
add_mm_counter(mm, MM_ANONPAGES, diff);
#else
spin_lock(&mm->page_table_lock);
add_mm_counter(mm, MM_ANONPAGES, diff);
spin_unlock(&mm->page_table_lock);
#endif
你可以解释一下它的含义
答案 0 :(得分:2)
当SPLIT_RSS_COUNTING
的用户控制配置大于config CONFIG_SPLIT_PTLOCK_CPUS
定义的物理CPU数时,定义CONFIG_NR_CPUS
define。如果不深入研究,这意味着用户可以控制内核锁定会计所需的CPU数量。此配置对于ARM和PARISC CPU来说似乎是唯一的。
定义SPLIT_RSS_COUNTING
时,add_mm_counter
需要受到保护以防止并发访问,因此使用mm->page_table_lock
锁使用自旋锁保护它。
自旋锁是同步多个CPU的最基本方法。当进入自旋锁并且锁已被另一个CPU保持时,当前CPU将进入循环,检查锁标志的值。当标志值更改为非锁定时,当前CPU将锁定并从spin_lock
函数返回。