Gerenciamento
de Processos
-
Estados de um processo
-
Tabela de processos
-
Mecanismos de escalonamento de processos
Os tópicos a serem examinados podem ser encontrados nos seguintes
capítulos de livros:
-
Modern Operating Systems, Tanenbaum, cap. 2
-
Operating Systems Concepts, Peterson/Silberschatz, cap. 4
-
Outros bons livros de sistemas operacionais, nos capítulos sobre
gerenciamento
de processos
1. Estados de um processo
Do capítulo anterior é possível perceber que os vários
processos executando em um sistema estão sempre disputando o acesso
à CPU. Com isso, é preciso definir um conjunto de estados
para representar os processos em cada condição. De
modo geral os processos podem assumir os seguintes estados:
-
Ativo ( ou executando), quando estiver fisicamente ocupando a cpu;
-
Pronto, quando estiver apenas esperando por uma chance de ocupar
a cpu;
-
Em espera (ou bloqueado), quando estiver esperando pela ocorrência
de algum evento externo que o permita ficar esperando apenas pela cpu;
-
Inativo (ou morto), quando não estiver executando.
Além desses estados é possível diferenciar outros
estados a partir do fato de o processo estar fisicamente na memória
ou não.
A passagem de um processo de um estado para outro ocorre em determinadas
circunstâncias, que são:
-
Pronto para Ativo: quando o dispatcher escalonar o
processo;
-
Ativo para Pronto: quando o dispatcher decidir que
outro processo deve ocupar a cpu (por estouro do tempo de cpu, por exemplo);
-
Ativo para Em espera: quando o processo solicitar uma operação
de entrada/saída ou for bloqueado por algum semáforo;
-
Ativo para Inativo: quando o processo solicitar uma operação
de entrada/saída ou for bloqueado por algum semáforo;
-
Inativo para Pronto: quando o scheduler o trazer de
disco para memória;
-
Em espera para Pronto: quando a operação de
E/S for completada ou o processo for desbloqueado.
2. Tabela de processos
Para que o sistema tenha condições de manipular os processos
(e seus estados) é necessário que se tenha uma estrutura
para armazenar informações de cada processo. Isso é
feito por uma tabela, normalmente chamada de tabela de processos
ou bloco de controle de processos (BCP), que deve conter informações
tais como o número do processo (PID), identificador de seu estado,
instante de criação, tempo acumulado de execução,
conteúdo dos registradores da cpu por ele usados, endereço
na memória, pilha, etc.
É através da manipulação desta tabela que
o sistema operacional pode controlar todos os processos e, também,
fornecer informações para os algoritmos de escalonamento
na cpu. Uma descrição mais detalhada dos dados de uma tabela
de processos pode ser vista nos livros de SO.
3. Mecanismos de escalonamento de processos
A ocupação da cpu pelos processos que estejam no estado de
pronto
deve ser feita de forma organizada. Para tanto existem algoritmos de escalonamento
que atuam de acordo com premissas estabelecidas pelo tipo de processo do
sistema, necessidades do usuário, disponibilidade de recursos de
hardware, etc. Esses algoritmos podem ser classificados em duas categorias
principais: algoritmos sem preempção (FCFS - primeiro
a chegar primeiro a executar, SJF - primeiro o mais curto, etc.),
e algoritmos com preempção (Round-Robin, Prioridade,
SRTF - primeiro quem falta menos tempo, Filas multinível,
etc.).
Os algoritmos sem preempção não permitem que um
processo seja interrompido após assumir o controle da cpu, o que
passa a ser permitido nos algoritmos com preempção, sendo
que a diferença entre algoritmos dessa categoria está centrada
exatamente nos motivos que originam a preempção de um processo.
De forma geral os algoritmos com preempção são muito
mais eficientes do que os sem preempção por fazer um melhor
uso da cpu.
O uso de cada um desses algoritmos pode ser medido através de
parâmetros de desempenho, tais como ocupação da cpu,
throughput (taxa de saída), tempos de espera, tempos de execução
médios (turnaround time), etc. A adoção de
uma dessas medidas de desempenho é feita de acordo com a necessidade
do usuário, sendo que cada algoritmo pode originar medidas bastante
distintas de desempenho para conjuntos de processos diferentes. Cabe ao
usuário, portanto, escolher a medida que mais lhe interessa e determinar
o algoritmo de escalonamento que melhor se adequa à sua situação.