A página man do time
explica o conceito de contexto voluntário e involuntário interruptores:
The resource specifiers [...] are:
c Number of times the process was context-switched involuntarily
(because the time slice expired).
w Number of times that the program was context-switched voluntarily,
for instance while waiting for an I/O operation to complete.
(a citação é do meu sistema Debian, a man page vinculada tem um texto ligeiramente diferente)
Ou seja, uma mudança de contexto é voluntária, se o processo deixar a CPU porque não tem mais nada a fazer (enquanto espera que algo externo aconteça). Involuntário, se quiser continuar com alguma computação, mas o sistema operacional decide que é hora de mudar para outro processo.
Como tudo isso está relacionado ao programa de verificação de senha, depende do que o programa realmente faz.
A partir do código-fonte vinculado nos comentários, vemos que o programa chama usleep()
uma vez para cada caractere não correspondente, continuando o loop de comparação no próximo caractere depois. Dormir é tão voluntário quanto produzir a CPU, portanto, essas chamadas serão mostradas como interrupções de contexto voluntárias para cada caractere não-mecânico.
No Linux, você também poderá ver as chamadas com strace
.
O atraso final vem de um sono aleatório de T * (rand() % 3)
, ou seja, 0, 1 ou 2 vezes uma constante. Essa é uma granularidade bastante grosseira, por isso deve ser fácil calcular a média fazendo várias tentativas com a mesma senha.