Processos

Propaganda
1
7 – Processos
7.1 – Introdução
O conceito de processo é a base para a implementação de um sistema
multiprogramável. O processador é projetado apenas para executar
instruções, não se importando com qual programa esteja em execução ou
qual o seu conteúdo. O sistema operacional por sua vez, é o responsável
por gerenciar qual programa esta em execução e é, também, o
responsável por controlar o uso concorrente do processador.
A gerência de processos é uma das principais funções do sistema
operacional. Através dos processos, um programa pode alocar recursos,
compartilhar dados, trocar informações, etc. Nos sistemas multiprogramáveis,
os processos são executados concorrentemente, compartilhando o uso do
processador, da memória principal e os dispositivos de Entrada/Saída. Nos
sistemas com múltiplos processadores ou com vários núcleos, além da
execução de processos concorrentemente ocorre também a execução
simultânea de processos nos diversos processadores do sistema.
Figura 7.1 – Gerenciador de Processos do Windows
2
7.2 – Estrutura do Processo
Um processo pode ser entendido como um programa que esta em
execução.
Em sistemas multiusuário, cada usuário é associado a um
processo. O processador executa o programa do usuário em um determinado
intervalo de tempo e, no instante seguinte, poderá executar outro programa, de
outro usuário.
Um processo também pode ser definido como o ambiente onde o
programa é executado. Este ambiente, além das informações pertinentes a
execução do programa, possui também informações relativas aos recursos que
o programa pode utilizar como espaço de endereçamento, uso do processador,
área em disco, etc. Se um programa necessitar utilizar uma área em disco
superior ao seu limite estipulado, o sistema operacional interrompe a execução
do programa por falta de recursos.
Um processo é formado por três partes, conhecidas como contexto de
hardware, contexto de software e espaço de endereçamento, que juntas
mantêm as informações necessárias à execução de um programa.
Figura 7.2 – Contexto do processo
3
7.2.1 – Contexto de Hardware
O contexto de hardware armazena o conteúdo dos registradores gerais
da CPU, além dos registradores de uso específico, como o program
counter(PC), o stack point(SP) e o registrador de status. Quando um processo
esta em execução, o seu contexto de hardware está armazenado nos
registradores da CPU. No momento em que ocorre a troca de processo, o
sistema salva as informações do contexto de hardware do processo.
Para que a troca de programas ocorra sem problemas, é necessário que
todas as informações do programa interrompido sejam armazenadas para que,
quando o programa retorne a execução possa continuar exatamente de onde
parou. A troca de um processo por outro, comandada pelo sistema operacional,
é denominada mudança de contexto. A mudança de contexto consiste em
salvar o conteúdo dos registradores do processo que esta deixando a CPU
para carregá-los com os valores referentes ao do novo processo que será
executado. Essa operação consiste em trocar um contexto de hardware de um
processo por outro.
Figura 7.3 – Contexto de Hardware
4
7.2.2 – Contexto de Software
No contexto de software são especificados características e limites de
recursos que podem ser alocados pelo processo, como o número máximo de
arquivos abertos simultaneamente, prioridade de execução e tamanho do
buffer. Muitas destas características são determinadas no momento da criação
do processo, enquanto outras podem ser alteradas durante a execução.
O contexto de software é composto por três grupos de informações
sobre o processo: identificação, quotas e privilégios.
- Identificação
Cada processo criado pelo sistema recebe uma identificação única,
chamada PID (Process Identification) que é representada por um número.
Através deste número, o sistema operacional e outros processos podem fazer
referência a qualquer processo em execução. Alguns sistemas identificam o
processo por nome também.
Os processos também possuem a identificação do usuário ou processo
que o criou (owner ou proprietário/dono do processo). Cada usuário possui
uma identificação chamada UID – User Identificafion, que é única e é
atribuída no momento da criação do usuário.
Figura 7.4 – Exemplo de PID ( comando TOP – S.O. FreeBSD )
5
- Quota
As quotas são os limites de cada recurso do sistema que um processo
pode alocar. Caso o processo ultrapasse a quota estipulada ou essa quota seja
insuficiente, a execução do processo pode se tornar lenta, ou mesmo ser
interrompida ou ainda, nem chega a ser executado.
Alguns exemplos de quota:
- número máximo de arquivos abertos simultaneamente;
- tamanho máximo de memória principal e secundária que o processo
pode alocar;
- tamanho máximo do buffer para operações de E/S;
- número máximo de processos, subprocessos que podem ser criados.
- Privilégios
Os privilégios ou direitos definem as ações que um processo pode fazer
em relação a ele mesmo, a outros processos e ao sistema operacional.
Privilégios que afetam o próprio processo permitem que suas
características possam ser alteradas, como prioridade de execução. Já os
privilégios que afetam os demais processos permitem, além da alteração de
suas próprias características, permitem alterar os outros processos.
Privilégios que afetem o sistema são mais amplos e poderosos, pois
estão relacionados à operação e gerencia do ambiente, como a desativação do
sistema, criação de outros processos privilegiados. Os sistemas operacionais
modernos têm uma conta de acesso que possui estes privilégios. Esta conta
existe com o propósito de administrar o sistema. Nos sistemas Unix/Linux
existe a conta de usuário root, nos sistemas da Microsoft Windows, a conta
administrador (administrator, nos Windows em inglês) é usada para este
propósito.
7.2.3 – Espaço de Endereçamento
O espaço de endereçamento é a área de memória pertencente ao
processo onde as instruções e os dados do programa são armazenados para
6
execução. Cada processo possui seu próprio espaço de endereçamento, que
deve ser devidamente protegido dos demais processos.
Figura 7.5 – Contexto do processo detalhado
7.2.4 – Bloco de Controle do Processo
O processo é implementado pelo sistema operacional através de uma
estrutura de dados chamada bloco de controle de processo (Process Control
Block - PCB). A partir desta estrutura, o sistema operacional mantém todas as
informações sobre o contexto de hardware, contexto de software e espaço de
endereçamento.
7
Figura 7.6– PCB ( Process Control Block – Bloco de Controle de Processo )
Os PCBs de todos os processos residem na memória principal em uma
área exclusiva do sistema operacional. O tamanho desta área é limitado por um
parâmetro do sistema operacional que especifica o número máximo de
processos que o sistema suporta simultaneamente.
Toda gerência de processos é feita através de system calls, que
realizam operações como criação, alteração de características, visualização,
eliminação de processos, etc.
7.3 – Estados do Processo
Em um sistema multiprogramável, os processos passam por diferentes
estados ao longo do seu processamento, seja em função de eventos gerados
pelo sistema operacional, seja pelo próprio processo. Um processo ativo pode
ter três estados diferentes:
- Execução (running)
Um processo está no estado de execução quando está sendo
processado efetivamente pela CPU, ou seja, utilizando o processador. Em
sistemas com um único processador, somente um processo pode estar em
estado de execução em um dado instante. Em sistemas com mais de uma CPU
8
ou com CPU com mais de um núcleo, o número de processos que pode estar
em estado de execução ao mesmo tempo é igual ao número de processadores
existentes. Neste tipo de sistema, também é possível que um mesmo processo
esteja sendo executado em mais de um processador ao mesmo tempo.
- Pronto (ready)
Um processo está no estado de pronto quando aguarda para ser
executado. O sistema operacional é o responsável por determinar a ordem e os
critérios pelos quais os processos em estado de pronto devem fazer uso do
processador.
Podem existir diversos processos em estado de pronto aguardando para
serem executados. Estes processos são organizados em uma lista encadeada
e são ordenados pela sua importância, permitindo que os processos com
prioridade mais alta sejam executados primeiro.
- Espera (wait)
Um processo no estado de espera aguarda por algum evento externo ou
por algum recurso para continuar sua execução, como por exemplo,
aguardando alguma operação de entrada/saída.
Os processos no estado de espera também são organizados em uma
lista encadeada e, assim que o evento esperado aconteça, o processo que
aguardava o evento é então transferido para o estado de pronto.
9
7.4 – Mudanças de Estado do Processo
Figura 7.7 – Mudança de estado do processo
Um processo muda de estado durante a sua execução em função de
eventos voluntários, que são gerados pelo próprio processo, ou por eventos
involuntários, que são gerados pelo sistema operacional. Existem quatro
mudanças de estado que podem ocorrer a um processo, são elas:
- Pronto Execução
Quando um processo é criado, o sistema operacional coloca o processo
em uma lista de processos no estado de pronto, então o sistema operacional
se encarrega de colocar o processo em estado de execução.
- Execução Espera
Um processo no estado de execução passa para o estado de espera por
eventos gerados por ele próprio, como a gravação de um arquivo em disco, ou
por eventos externos, quando o sistema operacional suspende a execução do
processo para colocar outro no seu lugar.
10
- Espera Pronto
Um processo no estado de espera para passa para o estado de pronto
quando a operação solicitada é atendida ou o recurso esperado é concedido.
Um processo no estado de espera sempre terá que passar pelo estado de
pronto antes de ir para o estado de execução.
- Execução Pronto
Um processo no estado de execução volta para o estado de pronto por
eventos gerados pelo sistema operacional, como o término do seu time-slice.
Neste caso, o processo não precisa ir para o estado de espera, e sim, volta
direto para o estado de pronto, onde ele entra na lista para ser executado
novamente.
Um processo no estado de espera ou de pronto pode não estar na
memória principal. Isto ocorre quando não há espaço suficiente para todos os
processos na memória principal e parte do contexto do processo é gravada na
memória secundária. Está técnica é chamada de swrapping, que consiste em
retirar os processos da memória principal e coloca-los de volta seguindo os
critérios de cada sistema operacional.
Figura 7.8 – Mudança de estado, residente para não-residente na memória
11
7.5 – Criação e Eliminação de Processos
Processos são criados e eliminados por motivos diversos. A criação de
um processo ocorre a partir do momento em que o sistema operacional
adiciona um novo PCB à sua estrutura e aloca um espaço de endereçamento
na memória para uso. A partir da criação do PCB, o sistema operacional já
reconhece a existência de um processo. No caso da eliminação de um
processo, todos os recursos associados ao processo são desalocados e o PCB
eliminado pelo sistema operacional.
A maioria dos sistemas operacionais estabelece dois estados adicionais
para os momentos de criação e eliminação de um processo.
- Criação (new)
Um processo é dito no estado de criação quando o sistema operacional
já criou um novo PCB, porém ainda não pode colocá-lo na lista de processos
no estado de pronto. A criação de processos pode ocorrer por diferentes
razões:
- logon: um processo é criado através de um estabelecimento de uma sessão
de um usuário;
- criação por outro processo: um processo já existente pode criar outros
processos;
- criação pelo sistema operacional: o sistema operacional pode criar novos
processos com o intuito de oferecer algum tipo de serviço;
- abertura de um aplicativo por parte do usuário.
- Término (exit)
Um processo no estado de termino não pode ter mais nenhum programa
em execução no seu contexto, porém o sistema operacional ainda mantém
suas informações de controle presentes na memória. Um processo neste
estado não é mais considerado ativo, mas como o PCB ainda existe, o sistema
12
operacional pode recuperar informações referentes ao processo e após extrair
estas informações o processo pode deixar de existir.
O término do processo pode ocorrer por razões como:
- término normal da execução;
- eliminação por outro processo;
- eliminação forçada;
Figura 7.9 – Criação e Eliminação de processo
7.6 – Subprocessos
Processos independentes, subprocessos e threads são maneiras
diferentes de implementar a concorrência dentro de uma mesma aplicação.
Neste caso, busca-se subdividir o código em partes para trabalharem de forma
cooperativa.
Subprocessos são processos criados dentro de uma estrutura
hierárquica. Neste modo, o processo criador é chamado de processo pai e o
subprocesso criado é chamado de processo filho. Os subprocessos podem
criar novos subprocessos e assim por diante. Outra característica é a
dependência existente entre o processo pai e o processo filho, quando o
processo pai deixa de existir, todos os processos filhos também são eliminados
automaticamente. Além desta característica, o processo pai pode compartilhar
suas quotas com os processos filhos, assim, quando um subprocesso é criado,
o processo pai cede parte de suas quotas para o processo filho.
13
Figura 7.11 – Processos Pai e Filhos
7.7 – Processos Foreground e Background
Todo processo possui pelo menos dois canais, sendo um de entrada
(input) e outro de saída (output). Estes canais podem ser teclados, mouse,
monitor, impressora, etc.
Um processo foreground é aquele que permite a comunicação direta
entre o usuário e o processo durante o processamento. Os canais de entrada e
saída estão associados a dispositivos interativos.
Um processo background é aquele onde não existe a comunicação
com o usuário durante o seu processamento. Neste caso, os canais de
entrada/saída não estão associados a dispositivos interativos como teclado e
monitor.
Existe uma técnica onde é possível associar o canal de saída de um
processo com o canal de entrada de outro, esta técnica é chamada pipe, e ela
faz a ligação entre os processos.
14
Figura 7.11 – Pipe
Na figura a seguir vemos um exemplo de um pipe via linha de comando
no sistema operacional FreeBSD.
Figura 7.12 – Exemplo de Pipe por linha de comando
7.8 – Processos do Sistema Operacional
Processos do sistema operacional são alguns processos especiais que
tem como função básica oferecer alguns serviços, seja ao próprio sistema
operacional ou a aplicações dos usuários. Alguns exemplos destes processos
são:
15
- auditoria e segurança;
- serviços de rede;
- contabilização do uso de recursos;
- gerencia de impressão;
- gerencia de jobs;
- comunicação de eventos;
- interpretador de comandos (shell).
Podemos ver na figura a seguir alguns exemplos de processos do
sistema operacional tanto do Windows como Linux. No Windows, os mais
comuns são o Explorer.exe, system, services.exe. No Linux, o processo init é o
mais conhecido.
Figura 7.13 – Processos do sistema operacional
7.9 – Processos CPU-Bound e I/O-Bound
Os processos são classificados de acordo com o modo como utilizam o
processador e os dispositivos de Entrada/Saída.
Um processo é chamado de CPU-Bound quando passa a maior parte
do tempo em estado de execução, ou seja, passa a maior parte do tempo
utilizando o processador. Este tipo de processo realiza poucas operações de
entrada/saída e é bastante encontrado em aplicações cientificas onde são
realizados muitos cálculos.
16
Um processo é chamado de I/O-Bound quando passa a maior parte do
tempo no estado de espera e realiza um grande número de operações de
leitura/gravação. Este tipo de processo é encontrado em aplicações comerciais,
como sistemas de gestão, que se baseiam em leitura, processamento e
gravação.
Figura 7.14 – Processo CPU-bound x Processo I/O-bound
7.10 – Sinais
Sinais são mecanismos que permitem notificar processos de eventos
gerados pelo sistema operacional ou por outros processos. O uso de sinais é
fundamental para a gerência de processos, alem de possibilitar a comunicação
e a sincronização entre processos.
A maior parte dos eventos associados a sinais é gerada pelo sistema
operacional ou pelo hardware, como a ocorrência de interrupções e exceções.
Em outras situações, os eventos são gerados a partir de outros processos com
o propósito de sincronizar suas execuções.
A geração de um sinal ocorre quando o sistema operacional, a partir da
ocorrência de algum evento, notifica o processo através de bits de sinalização,
localizados no PCB. Um processo não responde instantaneamente a um sinal,
ou seja, os sinais ficam pendentes até que o processo esteja em modo de
execução.
O tratamento dos sinais é semelhante ao mecanismo de tratamento de
interrupções e exceções, deste modo, quando um sinal é gerado, o contexto do
processo é salvo e a execução é desviada para um código de tratamento de
sinal (signal handler), geralmente feito pelo kernel do sistema operacional.
Download