Переключение контекста, когда поток вызывает системный вызов - PullRequest
2 голосов
/ 16 марта 2012

У меня есть процесс с несколькими потоками.Если один из моих потоков вызывает системный вызов, такой как gettimeofday(), ядро ​​только переключает этот поток вне контекста для обслуживания системного вызова или же весь процесс (и все другие потоки) выводятся из контекста?

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Большинство системных вызовов могут включать переключение контекста (если выполняются другие задачи) и переключать состояние процессора в режим ядра.

Но gettimeofday (и, например, getpid()) необычны. с последними ядрами они используют VDSO , чтобы избежать этого (и даже избегать инструкции syscall или sysenter для переключения в режим ядра).

1 голос
/ 16 марта 2012

Для ядра Linux поток - это процесс.Поэтому ядро ​​не интересуется другими потоками вашего процесса, когда один из них выполняет системный вызов.

...