É assim que o GNU / Linux e outros sistemas de multitarefa funcionam, eles compartilham o processador entre os processos em execução, dot
não terão 99%, mas 100% durante 99% do tempo. Cada processo domina o processador por um determinado período de tempo.
Isso é tratado pelos agendadores (o linux possui vários agendadores, alguns apenas empregam a estratégia usual, outros tentam dar mais tempo às interfaces do usuário e assim por diante).
Agora, no seu caso, o problema era - provavelmente - isso dot
não estava demorando muito tempo no processador, mas muita memória. E quando um programa usa muita memória, há uma debulha , que é exatamente um processo que congela o sistema, não porque dot
está fazendo muito, mas porque o kernel precisa mover as páginas de memória para frente e para trás entre o disco (partição swap) e a memória do sistema.
Mesmo se dot
consumisse apenas 99% do tempo da CPU, as chances são de que a mudança para um terminal de texto seria quase imediata, o que acontece é que o kernel precisa mover dot
coisas da memória para poder X
voltar à memória para X
poder ver as chaves. você apenas pressiona e move para o terminal de texto e, em seguida, o kernel precisa X
sair da memória para o dot
qual ainda está sendo executado, e também dot
para mover os processos do terminal de texto (talvez apenas login
?) de volta na memória. (Se isso parece confuso, não é apenas porque o exemplo é confuso - a realidade é esta . Confuso)
Um exemplo é que, se você fizer login no terminal de texto, poderá pressionar teclas, pressionar backspace e, felizmente, isso acontecerá em tempo real, mas se você fizer algo tão simples quanto executar uma ferramenta pequena como ps
, ela "congelará". "por um tempo porque ele precisa liberar memória para carregar ps
(e também precisa aguardar na fila de E / S do disco, que está sendo muito usada para mover dados da e para a memória, até poder solicitar ps
do sistema de arquivos) .