execv()系统调用中一段代码的含义

时间:2011-02-01 11:44:21

标签: c linux linux-kernel

在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
你可以解释一下它的含义

1 个答案:

答案 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函数返回。