Processo vs Programa
Antes de mais nada é preciso compreender o significado de processo sua relação com o programa. Sempre que criamos algum programa, escrevemos seu código em um editor de programas (também conhecido como IDE), este código fonte passa então por um processo de compilação que gera um arquivo executável.
Este executável é um PROGRAMA, ou seja, um arquivo com um conjunto de instruções passíveis de execução pelo meu sistema informatizado1. Este arquivo fica armazenado no disco rígido pronto para ser executado – aguardando a ordem do usuário para entrar em execução.
Um PROGRAMA é um arquivo executável, estático, passivo, contem um conjunto de instruções (em código de máquina) pronto para ser executado pelo sistema.

Ao entrar em execução, o programa é carregado para a memória e neste momento passa a ser considerado um processo. Enquanto o processo existir (estiver carregado na memória) irá passar por diversos estados e transformações, sendo em algum momento encerrado (deixa de existir). O processo normalmente é composto por uma cópia do código de máquina, chamado área de programa; e uma parte para variáveis, chamado área de dados.
Um PROCESSO é um programa em execução, caracterizado por:
- Ser dinâmico e ativo;
- Poder criar outros processos;
- Poder executar chamadas de sistema.
- É criado e é encerrado ou morto;
Ciclo de vida do processo
- Criação – todo processo precisa ser criado; a criação é o momento em que o sistema operacional “carrega” ou instancia o programa na memória principal. A partir deste momento o processo irá trabalhar por algum tempo e irá encerrar. Os processos são criados em diversas situações, por exemplo:
- ao ligar o computador – neste momento o sistema operacional cria uma grande quantidade de processos (do próprio sistema operacional) e de programas de usuários como por exemplo a shell ou o ambiente gráfico, ou ainda alguma backdoor que esteja infectando o sistema operacional.
Quando o usuário solicita – momento em que o usuário abre um programa qualquer. Isto pode criar um ou mais processos na memória;

- Quando um processo cria outro processo – processos podem criar outros processos, situação muito comum para “delegar” tarefas.
- Encerramento – todo processo precisa ser encerrado em algum momento; isto pode acontecer naturalmente, quando o processo é encerrado por si próprio (fechamento do programa) ou de forma forçada, quando o sistema operacional (ou o administrador do sistema) matar algum processo. Os processos são encerrados em diversas situações, por exemplo:
- Encerramento do programa – usuário parou de utilizar o editor de textos então encerra o programa;
- Processo foi morto – o sistema operacional pode estar precisando de memória e para isto faz uma limpeza, matando os processos fora de uso; ou o administrador do sistema entendeu que precisava matar algum processo;
Desligamento/reinicialização do computador - neste momento todos os processos devem ser encerrados; se algum processo não quiser se encerrar naturalmente, o sistema operacional “faz o serviço”.
Relacionamento inter processos
Os processos em execução podem ou não ter algum tipo de relacionamento entre si – isto varia conforme a origem (fabricante) do sistema operacional. Sistemas operacionais Unix-Like2 utilizam o conceito de grupo de processos onde há uma hierarquia e passagem de herança explicita entre processos, ou seja, um processo (pai) irá criar outro (filho) e assim sucessivamente.
Todo processo filho herda algumas características de seu pais (permissões de acesso por exemplo). Desta forma, temos uma estrutura em árvore, conforme figura E.4.
- Os o processos B e C são filhos de A;
- os processos D, E e F são filhos de B;
- C não tem filhos;
- Se processo B encerrar, processos D, E e F também serão encerrados;
- Se processo A encerrar, todos os outros processos serão encerrados também;
- As permissões de A são herdadas por seus filhos.
Em nossa máquina virtual instalada, podemos ver a árvore de processos usando o programa pstree3, que deve ser utilizado em conjunto como less para facilitar a visualização (para sair da visualização, usar q). Como visto na figura E.5, o resultado do comando será uma árvore, mostrando os processos e seus filhos, é claro na forma de uma árvore.
$ pstree | less.

Estados do processo
De forma geral, durante sua existência, o processo podem assumir 3 estados básicos que são:
- Em execução: Neste estado o processo está no processador, sendo processado. Cada processador trabalha com apenas um processo por vês4. O tempo que o processo ocupa o processador irá depender do tipo do escalonador do sistema operacional – visto na próxima unidade.
- Pronto: Neste estado, o processo está pronto, aguardando sua vez de ser executado. Há uma fila de espera que está sujeita a regras específicas, também do escalonador, estudadas na próxima unidade. Um sistema operacional pode inclusive ter mais que uma fila de prontos na espera pelo processador.
- Bloqueado: Este é um estado em que o processo fez uma requisição de I/O, através de uma chamada de sistema, e está aguardando o resultado (a resposta) deste. Procedimentos de I/O são muito lentos quando comparados com a velocidade do processamento puro; então o processo pode entrar em um estado especial enquanto aguarda a resposta do dispositivo de I/O. Neste estado, não deve haver consumo de processador, “sobrando recurso” para outros processos.
Transição entre os estados do processo
Durante a existência dos processos, eles “transitam” entre os estados Pronto, Execução e Bloqueado. As transições possíveis são (acompanhar pela figura E.4) :
- Pronto para execução: quando um processo da fila de prontos é destacado e “ganha” o processador.
- Execução para pronto: quando o processo que está executando perde o processador e volta para a fila de prontos. Esta “perda” se dá por motivos gerenciados pelo escalonador.
- Execução para bloqueado: quando o processo que está executando faz uma solicitação de I/O, perde o processador (compulsoriamente) e vai para a lista de processos aguardando resultado de sua solicitação;
- Bloqueado para pronto: quando a solicitação de I/O finaliza (a resposta do dispositivo é entregue ao processo) o processo volta para a fila de prontos. Neste retorno o processo se submete as regras impostas pelo gerenciador desta fila.

Modos do processador
O processador tem dois modos de operação, que são:
- Modo Usuário – também chamado de modo protegido. É o modo em que o processador está habilitado exclusivamente na execução de processos de usuários, ou seja, os programas dos usuários como editor de textos, compilador, browser e todos os outros. Tudo que for executado neste modo é protegido contra acesso de outro processo e impedido de acessar áreas protegidas de outros processos e do próprio sistema operacional. Diversas restrições são implementadas para proteger o conjunto. Basicamente operações que não interessam ao usuário.
- Modo Supervisor – no modo supervisor, o processador está atendendo interrupções de hardware. Neste modo não há restrições impostas e o processador executa as funções protegidas. As operações que podem ser exemplo neste caso são:
- reset de hardware;
- formatação de disco;
- execução de daemons de rede;
Interrupções
Interrupções, também conhecidas IRQ (Interrupt Request) por são sinais de hardware enviados ao processador por algum dispositivo, chamando a atenção deste para alguma ação específica. Sempre que algum device precisar de algo do processador irá disparar um pedido de interrupção.
A interrupção lembra uma chamada de telefone em uma residência, onde uma pessoa está executando uma tarefa comum, lendo um livro por exemplo. Neste momento o telefone toca, gerando uma interrupção, neste caso a pessoa terá de parar sua atividade e atender o telefone, ou seja, tratar a requisição de interrupção.
Exemplificando em um computador real, se uma placa de rede recebe algum pacote na sua entrada, este fluxo de dados que entra, precisará de algum tratamento então a placa de rede gera um pedido de interrupção ao processador. Quando o processador atender a requisição, irá dar o tratamento necessário aos dados.
A transição entre os estados dos processos, PRONTO ↔ EXECUÇÃO, EXECUÇÃO ↔ BLOQUEADO e EXECUÇÃO ↔ PRONTO, é controlada por um dispositivo chamado RTC (Real Time Clock); um relógio que gera um sinal de interrupção em intervalos regulares. Ou seja, o processador sabe que é hora de trocar de processo em execução quando o RTC avisa.
1 Neste contexto, sistema representa o par Hardware + Sistema Operacional.
2 Sistemas operacionais originários ou inspirados do Unix.
3 Este programa é fornecido pelo pacote psmisc.
4 CPU's multicore terão um processo por núcleo.