Portal do Governo Brasileiro

processo

Descrição

Abaixo é apresentada a definição de processo dada por Tanenbaum em "Sistemas Operacionais - Projeto e Implementação".

A ideia-chave aqui é que um processo é um tipo de atividade. Ele tem um programa, entrada, saída e um estado. Um único processador pode ser compartilhado entre vários processos, com algum algoritmo de agendamento sendo utilizado para determinar quando parar de trabalhar em um processo e servir a um diferente.

Ainda segundo Tanenbaum, são estados de um processo:

Um processo pode criar outros processos. Dizemos que um processo é pai do processo que ele criou. Além disso, um processo-filho pode também criar novos processos, formando assim uma árvore hierárquica de processos.

Linux

O init é o primeiro processo inicializado no Linux e é o pai de todos os outros processos. Se um processo termina e deixa processos-filho ainda executando, o processo init assume a paternidade destes processos.

Quando um usuário trabalha no modo monousuário, um único processo shell é inicializado. Qualquer comando digitado pelo usuário neste terminal irá gerar um ou mais processos. A árvore hierárquica dos processos tendo o shell como raiz é chamada de sessão.

Quando um usuário inicializa um gerenciador de janelas (X Windows), para cada terminal criado é alocado um processo shell responsável pelo terminal em questão. Cada terminal corresponde a uma sessão aberta pelo usuário sendo que as sessões são independentes entre si. Isto significa que uma alteração feita em um dos terminais não será reconhecida pelos outros terminais pois cada terminal possui o seu próprio conjunto de variáveis de ambiente. Por exemplo, ao entrar com o comando newgrp em um dos terminais para alterar o grupo do usuário, apenas a sessão em questão mudará de grupo.

Background e Foreground

No linux, um processo pode estar em foreground ou em background, ou seja, em primeiro plano ou em segundo plano. Por exemplo, ao digitar o comando

ls -R /etc > teste
o sistema criará o arquivo teste com o conteúdo de todos os diretórios e arquivos que se encontram abaixo do diretório /etc. Durante a execução do comando acima, nenhum outro comando poderá ser digitado pelo usuário no mesmo terminal. Isto significa que o comando está sendo executado em primeiro plano impedindo assim a execução de outras atividades no mesmo terminal.

Para o exemplo acima, é possível liberar o shell para outras atividades enquanto o arquivo teste é criado. Basta que você digite

ls -R /etc > teste &

O símbolo & indica que o comando deve ser executado em background, ou seja, em segundo plano.

Se um processo está executando em foreground e você deseja colocá-lo em background, você deve:

  1. interromper a execução do processo com as teclas CTRL-Z;
  2. digitar o comando bg.

Para trazer um processo do modo background para o modo foreground, você deve usar o comando fg.

Modelo Cliente-Servidor

O Linux implementa muitas das suas funções usando o modelo cliente-servidor. Isto significa que existem processos que são criados especificamente para executar determinadas tarefas. Estas tarefas especiais são oferecidas aos outros processos do sistema na forma de serviços.

O processo responsável pela execução de um determinado serviço no sistema é chamado de servidor, enquanto o processo que solicita o serviço ao sistema é chamado de cliente.

Normalmente, as aplicações servidoras (daemons) são executadas em background, enquanto as aplicações clientes são executadas em foreground.

A grande vantagem em implementar funções do sistema dessa forma é tornar o kernel do Linux menor, pois tudo que o kernel faz neste caso é gerenciar a comunicação entre clientes e servidores. Além disso, o administrador pode escolher os serviços que o sistema tornará disponíveis.

São exemplos de daemons no Linux:

Por padrão, podemos usar os seguintes argumentos com os daemons:

Portanto, o comando
status atd
fornece informação sobre o servidor at. Por exemplo, é possível ter a seguinte saída:
atd start/running, process 986

Memória

Abaixo é mostrado um desenho simplificado da alocação de memória por um processo. O segmento de memória mais alta corresponde aos argumentos passados na linha de comandos e à lista de variáveis de ambiente. Em programas C, eles correspondem aos parâmetros da função main( ).

Observações

 

  Topo   |   Guia   |   Home