Resumos dos capítulos :::

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. Modern Operating Systems, Tanenbaum, cap. 2

  2. Operating Systems Concepts, Peterson/Silberschatz, cap. 4

  3. 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:

  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 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:

  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 (ou outro mecanismo de bloqueio);

  4. Ativo para Inativo: quando o processo for retirado da memória ou terminar sua execução;

  5. Inativo para Pronto: quando o scheduler trazer o processo do disco para a 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. 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.
 
 

 
 
DISCLAIMER
 
 
O conteúdo desta página é de minha total responsabilidade, não representando o pensamento ou posições da UNESP.