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 ou
escalonamento 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 do processo estar ou não residindo fisicamente na memória.
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
(ou outro mecanismo de bloqueio);
Ativo
para Inativo: quando o processo for retirado da memória
ou terminar sua execução;
Inativo
para Pronto: quando o scheduler trazer o processo do
disco para a 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. A diferença entre algoritmos com
preempção 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.
A eficiência de cada um desses
algoritmos pode ser medida através de métricas de
desempenho, tais como ocupação da cpu, throughput
(taxa de saída ou vazão), tempos de espera, tempos de execução
médios (turnaround time), etc. A adoção
de uma dessas métricas de desempenho é feita de acordo com a
necessidade do usuário, sendo que cada algoritmo de
escalonamento pode resultar em 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.
Por fim, é preciso observar que esse cenário vem mudando com o
surgimento de threads e processadores multicore. Atualmente é possível
executar vários threads simultaneamente, o que aumenta as possibilidades de
escalonamento para o gerenciador. Assim, as versões mais recentes dos SO disponíveis já
fazem uso dessa capacidade, permitindo um aumento no throughput do sistema.
|