Значение фрагмента кода в системном вызове execv () - PullRequest
1 голос
/ 01 февраля 2011

В исходном коде системного вызова 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 Ответ

2 голосов
/ 01 февраля 2011

Определение SPLIT_RSS_COUNTING определяется, когда контролируемая пользователем конфигурация CONFIG_SPLIT_PTLOCK_CPUS превышает физическое число процессоров, как определено в конфигурации CONFIG_NR_CPUS.Не углубляясь слишком глубоко, это означает, что пользователь может контролировать, какое количество процессорного времени требуется ядру для блокировки учета.Эта конфигурация является уникальной для процессоров ARM и PARISC.

Когда определено SPLIT_RSS_COUNTING, add_mm_counter необходимо защитить от одновременного доступа, и поэтому он защищен с помощью спин-блокировок с использованием блокировки mm->page_table_lock.

Спин-блокировка - это самый простой способ синхронизации нескольких процессоров.Когда спин-блокировка введена, и блокировка уже удерживается другим ЦП, текущий ЦП войдет в цикл, проверяя значение флага блокировки.Когда значение флага изменится на неблокированное, текущий ЦП возьмет блокировку и вернется из функции spin_lock.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...