Por que um sistema pode não responder?

11

Acabei de executar dot (um programa para desenhar gráficos direcionados) com um arquivo de entrada tão grande que não poderia ser renderizado em um período de tempo razoável.

Meu sistema inteiro congelou. Eu mal conseguia chegar a um console de texto com Ctrl + Alt + F1 para matar dot , mas levou vários 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?

    
por Christoph Wurm 23.05.2012 / 15:17

1 resposta

14

É assim que o GNU / Linux e outros sistemas multitarefa funcionam, eles compartilham o processador entre os processos em execução, dot não terá 99%, mas 100% durante 99% do tempo. Cada processo domina o processador por um determinado período de tempo.

Isso é feito pelos agendadores (o linux tem vários agendadores, alguns apenas empregam a estratégia usual, alguns tentam dar mais tempo às interfaces do usuário e assim por diante).

Agora, no seu caso, o problema era - provavelmente - que dot não estava levando muito tempo do processador, mas muita memória. E quando um programa usa muita memória, há debulha , que é exatamente um processo que faz o sistema congelar, não porque dot está fazendo muito, mas porque o kernel tem que 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 estivesse tirando apenas 99% do tempo da CPU, é provável que a mudança para um terminal de texto fosse quase imediata, o que acontece é que o kernel precisa mover dot de memória para poder colocar X de volta na memória para que X possa ver as chaves que você acabou de acessar e mover para o terminal de texto, então o kernel precisa mover X de memória para dot que ainda está em execução e também mover dot out para mover os processos do terminal de texto (talvez apenas login ?) de volta na memória. (Se isso parece confuso, não é só porque o exemplo é confuso - a realidade é esta bagunçada.)

Um exemplo é se você logar no terminal de texto, você pode apenas apertar teclas, clicar em backspace, e isso acontecerá em tempo real, mas se você fizer algo tão simples como executar uma pequena ferramenta como ps , ele irá "congelar" por um tempo porque ele tem que liberar memória para carregar ps (e também tem que esperar na fila de E / S de disco, que está sendo muito usada para mover dados de e para a memória, até ele é capaz de solicitar ps do sistema de arquivos).

    
por 23.05.2012 / 15:36

Tags