FONTE: SISTEMAS OPERACIONAIS MODERNOS, 2a. EDIÇÃO
ESTADOS DE PROCESSOS
Quando
um processo bloqueia, ele o faz porque logicamente não pode
continuar, em geral porque está esperando pela entrada que ainda não
está disponível. Também é possível que um processo que esteja
conceitualmente pronto e capaz de executar seja bloqueado porque o
sistema operacional decidiu alocar a CPU para outro processo por um
tempo. Essas duas condições são completamente diferentes. No
primeiro caso, a suspensão é inerente ao problema (você não pode
processar a linha de comando do usuário até que ela tenha sido
digitada). No segundo caso, trata-se de uma tecnicalidade do sistema
(não há CPUs suficientes para dar a cada processo seu próprio
processador privado). Na Figura 2.2 vemos um diagrama de estado
mostrando os três estados nos quais um processo pode se encontrar:
1.
Em execução (realmente usando a CPU naquele instante).
2.
Pronto (executável, temporariamente parado para deixar outro
processo ser executado).
3.
Bloqueado (incapaz de ser executado até que algum evento externo
aconteça).
Claro,
os primeiros dois estados são similares. Em ambos os casos, o
processo está disposto a ser executado, apenas no segundo
temporariamente não há uma CPU disponível para ele. O terceiro
estado é fundamentalmente diferente dos dois primeiros, pois o
processo não pode ser executado, mesmo que a CPU esteja ociosa e não
tenha nada mais a fazer.
FIGURA
2.2 # Um processo pode estar nos estados em execução, bloqueado ou
pronto. Transições entre esses estados ocorrem como mostrado.
1.
O processo é bloqueado aguardando uma entrada
2.
O escalonador seleciona outro processo
3.
O escalonador seleciona esse processo
4.
A entrada torna-se disponível
Como
apresentado na Figura 2.2, quatro transições são possíveis entre
esses três estados. A transição 1 ocorre quando o sistema
operacional descobre que um processo não pode continuar agora. Em
alguns sistemas o processo pode executar uma chamada de sistema, como
em pause, para entrar em um estado bloqueado. Em outros, incluindo
UNIX, quando um processo lê de um pipe ou de um arquivo especial
(por exemplo, um terminal) e não há uma entrada disponível, o
processo é
automaticamente
bloqueado.
As
transições 2 e 3 são causadas pelo escalonador de processos, uma
parte do sistema operacional, sem o processo nem saber a respeito
delas. A transição 2 ocorre quando o escalonador decide que o
processo em andamento foi executado por tempo suficiente, e é o
momento de deixar outro processo ter algum tempo de CPU.
A
transição 3 ocorre quando todos os outros processos tiveram sua
parcela justa e está na hora de o primeiro processo chegar à CPU
para ser executado novamente. O escalonamento, isto é, decidir qual
processo deve ser executado, quando e por quanto tempo, é um assunto
importante; Muitos
algoritmos foram desenvolvidos para tentar equilibrar as demandas
concorrentes de eficiência para o sistema como um todo. A
transição 4 se verifica quando o evento externo pelo qual um
processo estava esperando (como a chegada de alguma entrada)
acontece. Se nenhum outro processo estiver sendo executado naquele
instante, a transição 3 será desencadeada e o processo começará
a ser executado. Caso contrário, ele talvez tenha de esperar no
estado de pronto por um intervalo curto até que a CPU esteja
disponível e chegue sua vez. Usando o modelo de processo, torna-se
muito mais fácil pensar sobre o que está acontecendo dentro do
sistema. Alguns dos processos executam programas que levam adiante
comandos digitados pelo usuário. Outros processos são parte do
sistema e lidam com tarefas como levar adiante solicitações para
serviços de arquivos ou gerenciar os detalhes do funcionamento de um
acionador de disco ou fita. Quando ocorre uma interrupção de disco,
o sistema toma uma decisão para parar de executar o processo atual e
executa o processo de disco, que
foi bloqueado esperando por essa interrupção. Assim, em vez de
pensar a respeito de interrupções, podemos pensar sobre os
processos de usuários, processos de disco, processos terminais e
assim por diante, que bloqueiam quando estão esperando que algo
aconteça.
Quando
o disco foi lido ou o caractere digitado, o processo esperando por
ele é desbloqueado e está disponível para ser executado novamente.
Nenhum comentário:
Postar um comentário