Acabei de executar dot
(um programa para desenhar gráficos direcionados) com um arquivo de entrada que era tão grande que não podia ser renderizado em um período de tempo razoável.
Todo o meu sistema congelou. Eu mal conseguia chegar a um console de texto com Ctrl+ Alt+ F1para matar dot
, mas levou alguns minutos.
Por que o sistema permite algo assim? Por que ele fornece um programa não crítico, como dot
99% do sistema, e usa os 1% restantes para permanecer responsivo?
scheduling
Christoph Wurm
fonte
fonte
Respostas:
É 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 porquedot
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 moverdot
coisas da memória para poderX
voltar à memória paraX
poder ver as chaves. você apenas pressiona e move para o terminal de texto e, em seguida, o kernel precisaX
sair da memória para odot
qual ainda está sendo executado, e tambémdot
para mover os processos do terminal de texto (talvez apenaslogin
?) 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 carregarps
(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 solicitarps
do sistema de arquivos) .fonte