Postado por Luis Marcelo em janeiro 21, 2019
Quando o usuário inicia um programa (por exemplo, um editor de textos), o sistema operacional cria um processo para conter todas as informações relativas a execução deste programa, como as variáveis alocadas, arquivos abertos e o próprio texto do programa a ser executado.
Este processo é então colocado em execução na CPU para que possa executar as tarefas para as quais foi desenvolvido.
Uma característica importante desta forma de executar programas criando os processos é que estes são isolados uns dos outros e também são isolados do sistema operacional.
O objetivo disso é evitar que o sistema fique instável devido a um erro na programação de um aplicativo, o que faria o processo criado para a execução deste aplicativo ter um comportamento irregular. Em termos concretos, este isolamento é implementado usando-se a proteção de memória e as chamadas de sistema.
A proteção de memória é um conjunto de técnicas que permite ao sistema operacional criar uma área de memória separada para cada processo de forma que ele não consiga ter acesso a uma área que não seja especificamente designada a ele.
Nos sistemas operacionais modernos, esta proteção é implementada usando o conceito de memória virtual, que será explicado posteriormente. Neste modelo de proteção de memória, cada processo executa como se estivesse sozinho no computador.
Processos têm identificadores chamados "Process Ids" que são usados pelo sistema para identificá-los quando alguma operação precisa ser feita com ele (encerrar o processo, por exemplo).
Eles também tem um "parent process ID", que é o "Process ID" do processo que o originou, e um usuário dono do processo.
O usuário dono do processo é usado pelo sistema operacional para determinar que recursos o processo poderá acessar durante sua execução quando forem feitas as chamadas de sistema.
À medida que o processo vai sendo executado, ele vai utilizando recursos do computador, como memória, arquivos de disco, e portas de comunicação via rede (ou sockets).
Como explicado anteriormente, o acesso a estes recursos se dá através de chamadas de sistema que vão sendo feitas durante a execução.
Uma vez concedido o acesso a um determinado recurso, o processo ganha um identificador para o tal recurso, que é colocado numa tabela que pertence ao processo, mas que é de uso exclusivo do sistema operacional.
No UNIX e LINUX estes recursos são chamados de descritores de arquivos, ou "File descriptors", enquanto que no WINDOWS são chamados de identificadores, ou "Handles".
Quando o processo é encerrado, seja de forma voluntária ou por ação do usuário ou do sistema, todos os recursos que haviam sido alocados para o processo são liberados para reuso posterior.
Esta é outra vantagem importante da utilização do processo como uma abstração para os programas que estão em execução: uma vez que o programa termine, é possível facilmente restaurar o sistema ao estado anterior de forma segura, mesmo que o programador da aplicação não tenha se preocupado corretamente com isso.
O aplicativo "Gerenciador de tarefas" permite monitorar os processos em execução. Para iniciá-lo, basta clicar com o botão da direita na barra de tarefas e selecionar o gerenciador. A lista dos processos fica na guia detalhes.
Para ver o identificador do processo e o número de identificadores de recursos alocados, selecione as colunas, já que normalmente elas ficam escondidas. Nesta mesma janela é possível encerrar um processo caso seja desejado.
O comando 'ps' dá a lista de processos, e o comando 'top' mostra numa tela continuamente atualizada a lista que vem ordenada pelo processo que mais está usando a CPU para o que menos está usando.
Para ver os identificadores alocados, deve-se lista uma pasta especial chamada /proc/<proc_id>/fd, substituindo-se <proc_id> pelo identificador do processo que pode ser encontrado no comando ps ou top.
Quando um erro irrecuperável é gerado e o sistema o encerra pois não há como continuar a execução: programas de computador são sequências de instruções com comandos para CPU e esta sequência de instruções as vezes está inválida ou, apesar de válida, faz algo que não tem como ser obedecido pela CPU.
Nestes casos, o programa gera o que é chamado de "exceção", e o sistema então encerra porque não há como continuar. As exceções mais comuns são acessar um trecho inválido da memória e executar uma instrução inexistente ou proibida. Programas encerrados desta forma costumam mostrar uma janela onde o sistema diz "este programa realizou uma operação ilegal", e normalmente tem um botão para enviar um relatório de erros para o desenvolvedor.