在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你能解释一下它的意思吗?
发布于 2011-02-01 19:52:21
SPLIT_RSS_COUNTING定义是在CONFIG_SPLIT_PTLOCK_CPUS的用户控制配置大于配置CONFIG_NR_CPUS定义的物理CPU数量时定义的。无需深入研究,这意味着用户可以控制内核锁定记帐所需的CPU数量。此配置对于ARM和PARISC CPU似乎是唯一的。
当定义了SPLIT_RSS_COUNTING时,需要保护add_mm_counter不被并发访问,因此使用使用mm->page_table_lock锁的自旋锁来保护它。
自旋锁是同步多个CPU的最基本方法。当进入旋转锁并且锁已经被不同的CPU持有时,当前的CPU将进入循环,检查锁标志的值。当标志值变为非锁定时,当前CPU将获得锁并从spin_lock函数返回。
https://stackoverflow.com/questions/4862093
复制相似问题