Como os processos são executados no computador

Neste tutorial sobre Sistemas Operacionais, vamos entender um pouco como o SO se comunica com a CPU de modo a organizar e executar os processos existentes em sua máquina.

O entendimento da execução dos processos é de vital importância para o estudo dos algoritmos de escalonamento, threads e diversos outros assuntos para entendermos melhor o funcionamento dos sistemas operacionais.






Execução Processos em Sistemas Operacionais

Muito antes dos sistemas operacionais serem tão famosos e simples de serem usados, eles se resumiam simplesmente a uma janela de comandos, e nessa época os usuários eram cientistas, militares, engenheiros, acadêmicos etc.

Não tinha segredo: você digitava um comando, o processador executava suas instruções e quando terminava, devolvia para o usuário a possibilidade de digitar outro comando.
Ou seja, o esquema era um por vez.

Até porque não existe outra possibilidade para um processador só, ele só executa um comando, uma instrução por vez.

Abra o terminal de comandos de seu Linux ou o MS DOS do Windows, ele só vai executar um comando por vez, você só digita outra instrução quando a anterior for executada.

Obviamente, as coisas mudaram radicalmente, não é?
Não, não mudaram tanto assim não.


Um Processo Por Vez

O que está executando agora em seu computador?

Está com um navegador aberto lendo nosso site, certamente tem outras abas abertas, provavelmente em sua conta de e-mail, redes sociais, sites de notícias etc.
Talvez esteja ouvindo música (um bom Rock Progressivo, claro).
Enquanto faz isso tudo, está fazendo algum download, e tudo isso enquanto um editor de textos está aberto.

Ou seja, é óbvio que atualmente nossos computadores e sistemas operacionais executam ao mesmo tempo diversas tarefas, correto?
Errado. Se tem uma CPU, só um processo é executado por vez.
Sim, é um por vez.

A grande diferença em relação aos processadores antigos, é que os atuais são infinitamente mais poderosos e rápidos. Para termos uma ideia, em poucos segundos, um bom processador faria mais cálculos matemáticos que todos os habitantes da terra com uma calculadora nas mãos fariam durante toda a vida.

O que ocorre é o seguinte: um processo é executado durante um certo tempo, depois o sistema operacional retira esse processo (salva todos os registros, dados de onde parou, o que fez e o que ainda vai fazer) e coloca outro processo para a CPU trabalhar.

Em poucos milissegundos, a CPU executa MUITA coisa de um processo.
Ou seja, é sempre um processo executado por vez, mas executam durante um tempo curto para nós, e trocam, e trocam...no fim das contas temos a ILUSÃO que tudo ocorre ao mesmo tempo, quando não é.

Sim, somos todos iludidos!
O nome dessa troca de processos (pausa um, inicia outro, pausa ele, vai pra outro, pausa o outro, volta para um etc), se chama chaveamento de processos.









Escalonamento, Ociosidade e Recursos

Há processos simples, como um clique parar abrir uma pasta ou uma soma na calculadora.
E há processos bem lentos e complexos, como jogar um jogo que exija muita memória RAM, processamento gráfico etc.

Imagine você jogando um jogo pesadíssimo e seu sistema operacional decide gastar metade do tempo processando seu game e a outra metade checando seu browser, para saber se você receber e-mail.

E, acredite, muito dos processos que vão para serem executados para a CPU são para checagem.
Checar se você clicou, se alguma tecla foi pressionada, checar se tem espaço no HD, se tem memória sobrando, se tem alguma tarefa agendada pelo usuário etc etc etc.

Geralmente, seu processador é usado para coisas, digamos, desnecessárias.
Por exemplo, a todo instante ele checa se alguma tecla foi pressionada. Na maioria das vezes não pressiona, pode estar apenas vendo um filme, mas essa checagem é necessária, para quando for realmente pressionada, alguma ação seja tomada.

Agora imagine que metade do processamento for checando se você apertou o botão '[' e outro fosse rodando seu game? Não dá, ficaria lento.
Assim, as vezes é mais importante sua CPU se dedicar mais tempo para alguns processos, e menos para outros.

Se estiver executando programas complexos, como de computação gráfica ou o MATLAB, que exigem muito de seu computador, vai ver o restante dos processos ficarem lento, pois o sistema operacional pensou "peraí, esse processo aqui é mais pesado, então vai ficar mais tempo processando...os outros que aguardem um pouco".

Isso se chama escalonar processos, saber qual enviar para seu processador trabalhar.
Saber quando um é mais importante que o outro, quando um deve ter mais tempo de processamento, se vai ser enviado para a CPU ou se deve esperar mais.

Também é preciso ver se vale a pena ficar alterando muito de processo em processo.
Pois, cada vez que um deixa de ser executado para vir outro, é necessário salvar tudo do processo anterior: os dados do registro, pilha, o que estava fazendo, onde, que local da memória estava usando, que instrução iria fazer em seguida, etc etc.

Resumindo: as coisas não acontecem de uma maneira simples, e muito menos ocorrem ao mesmo tempo. Estudaremos diversos algoritmos e ideias sobre escalonamento de processos no decorrer de nossos tutoriais sobre Sistemas Operacionais.

Mas por hora, é interessante você saber isso sobre os processos, para abrir sua mente e ter uma ideia de como um Sistema Operacional é genial, pois mesmo tendo apenas uma CPU para executar uma instrução por vez, nos faz parecer que está acontecendo muitas coisas ao mesmo tempo.

Isso é programação. E das boas. E poucos sabem como funcionam, muito menos como fazer.

Um comentário:

Anônimo disse...

muito boa essa introdução e muito bem explicada me ajudou bastante a entender o chaveamento de processos

Veja também: