Gerenciamento de Processos

 
  1. Estados de um processo
  2. Tabela de processos
  3. Mecanismos de escalonamento de processos
Os tópicos a serem examinados podem ser encontrados nos seguintes capítulos de livros:

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:
  1. Ativo ( ou executando), quando estiver fisicamente ocupando a cpu;
  2. Pronto, quando estiver apenas esperando por uma chance de ocupar a cpu;
  3. Em espera (ou bloqueado), quando estiver esperando pela ocorrência de algum evento externo que o permita ficar esperando apenas pela cpu;
  4. 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:

  1. Pronto para Ativo: quando o dispatcher escalonar o processo;
  2. Ativo para Pronto: quando o dispatcher decidir que outro processo deve ocupar a cpu (por estouro do tempo de cpu, por exemplo);
  3. Ativo para Em espera: quando o processo solicitar uma operação de entrada/saída ou for bloqueado por algum semáforo;
  4. Ativo para Inativo: quando o processo solicitar uma operação de entrada/saída ou for bloqueado por algum semáforo;
  5. Inativo para Pronto: quando o scheduler o trazer de disco para memória;
  6. 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.