Processos e Escalonamento em Sistemas Operacionais
Classificado em Computação
Escrito em em
português com um tamanho de 8,54 KB
Processos
Considerando um computador funcionando em multiprogramação (vários programas ativos na memória), cada programa em execução corresponde a um procedimento (sequência de instruções) e um conjunto de dados. É conveniente ter instruções separadas dos dados, pois isso possibilita o compartilhamento do código do procedimento por vários programas em execução.
Além das instruções e dados, cada programa em execução possui uma área de memória correspondente para armazenar os valores dos registradores da CPU. Essa área da memória é conhecida como registrador descritor (ou bloco descritor). Assim, em um determinado sistema, cada programa constitui um processo.
Em um ambiente de multiprogramação, quando existe apenas um processador na instalação, cada processo é executado um pouco de cada vez, de forma intercalada. Processos paralelos são denominados concorrentes ou assíncronos e, dependendo do tipo de ação existente entre eles, podem ser classificados como:
- Disjuntivos: não interativos;
- Interativos: quando têm acesso aos mesmos dados comuns. Estes podem ser competitivos ou cooperantes (trocam informações entre si).
Durante o tempo em que um processo deve ficar esperando a realização de uma operação de E/S (Entrada/Saída), a UCP pode ser entregue a outro processo. Dessa forma, a utilização dos recursos será mais completa, econômica e eficiente. Se um processo passa a maior parte do tempo esperando por dispositivos de E/S, diz-se que o processo é limitado por E/S (I/O-bound). Se, ao contrário, o processo gasta a maior parte do seu tempo usando a UCP, ele é dito limitado por computação (compute-bound ou UCP-bound). Obviamente, processos I/O-bound devem ter prioridade sobre processos UCP-bound.
O Núcleo do Sistema Operacional
Todas as operações envolvendo processos são controladas por uma porção do sistema operacional chamada de núcleo, core, ou kernel. O núcleo normalmente representa somente uma pequena porção do código que, em geral, é tratado como sendo todo o sistema operacional, mas é a parte de código mais intensivamente utilizada.
Por essa razão, o núcleo ordinariamente reside em armazenamento primário (memória RAM), enquanto outras porções do sistema operacional são chamadas da memória secundária quando necessário. Uma das funções mais importantes incluídas no núcleo é o processamento de interrupções. Suas principais funções incluem:
- Manipulação de interrupções;
- Criação e destruição de processos;
- Troca de contexto de processos;
- Desacatamento de processos;
- Suspensão e reanimação de processos;
- Sincronização de processos;
- Intercomunicação entre processos;
- Suporte a atividades de E/S;
- Suporte à alocação e desalocação de armazenamento;
- Suporte ao sistema de arquivos;
- Suporte a um mecanismo de chamada/retorno de procedimentos;
- Suporte a certas funções do sistema de contabilização.
Escalonamento de Processos
Quando um ou mais processos estão prontos para serem executados, o sistema operacional deve decidir qual deles vai ser executado primeiro. A parte do sistema operacional responsável por essa decisão é chamada escalonador, e o algoritmo usado para tal é chamado de algoritmo de escalonamento.
Antes de vermos os algoritmos de escalonamento, vejamos os critérios com os quais eles devem se preocupar:
- Justiça: fazer com que cada processo ganhe seu tempo justo de CPU;
- Eficiência: manter a CPU ocupada 100% do tempo (se houver demanda);
- Tempo de Resposta: minimizar o tempo de resposta para os usuários interativos;
- Tempo de Turnaround: minimizar o tempo que usuários batch devem esperar pelo resultado;
- Throughput: maximizar o número de jobs processados por unidade de tempo.
Escalonamento FCFS ou FIFO
Talvez a disciplina de escalonamento mais simples que exista seja a First-In-First-Out (FIFO) — o primeiro a entrar é o primeiro a sair. Vários autores referem-se a este algoritmo como FCFS (First-Come-First-Served). Os processos são despachados de acordo com sua ordem de chegada na fila de processos prontos do sistema.
Escalonamento Round Robin (RR)
Um dos mais antigos, simples, justos e largamente utilizados algoritmos de escalonamento é o Round Robin. Cada processo recebe um intervalo de tempo, chamado quantum, durante o qual ele pode executar. Se o processo ainda estiver executando ao final do quantum, a CPU é dada a outro processo.
Assim, o algoritmo Round Robin é semelhante ao FIFO, mas com a diferença de que é preemptivo: os processos não executam até o seu final, mas sim durante um certo tempo, um por vez. Executando sucessivamente em intervalos de tempo, o job acaba por terminar sua execução em algum momento.
Conclusão: ajustar um quantum muito pequeno causa muitas trocas de contexto e diminui a eficiência da CPU, mas ajustá-lo para um valor muito alto causa um tempo de resposta inaceitável para pequenas tarefas interativas. Um quantum em torno de 100 ms frequentemente é um valor razoável.
Escalonamento com Prioridades
O algoritmo Round Robin assume que todos os processos são igualmente importantes. Frequentemente, as prioridades de processamento são definidas por fatores externos. Em uma universidade, por exemplo, as prioridades podem ser para a administração em primeiro lugar, seguida de professores, secretárias e, finalmente, estudantes. A necessidade de se levar em conta fatores externos nos leva ao escalonamento com prioridades.
A ideia básica é direta: cada processo possui uma prioridade associada, e o processo pronto para executar com a maior prioridade é quem ganha o processador. Para evitar que processos com alta prioridade executem indefinidamente, o escalonador pode decrementar a prioridade do processo atualmente executando a cada tick de relógio (interrupção de relógio).
Multilevel Feedback Queues
Quando um processo ganha a CPU, especialmente quando ele ainda não pôde estabelecer um padrão de comportamento, o escalonador não tem ideia da quantidade precisa de tempo de CPU que o processo precisará. Processos limitados por E/S geralmente usam a CPU brevemente antes de gerar um pedido de E/S, enquanto processos limitados por CPU poderiam utilizá-la por horas.
Um mecanismo de escalonamento deveria:
- Favorecer pequenos jobs;
- Favorecer jobs limitados por E/S para atingir uma boa utilização dos dispositivos;
- Determinar a natureza de um job tão rápido quanto possível e escaloná-lo de acordo.
As Multilevel Feedback Queues (filas multinível com retorno) fornecem uma estrutura que atinge esses objetivos.
Escalonamento com Prazos
No escalonamento com prazos, certos jobs são escalonados para serem completados até uma certa data, hora ou prazo. Esses jobs podem ter alta importância se entregues a tempo, ou podem não ter utilidade alguma se terminarem após o previsto. O usuário normalmente paga um "prêmio" para ter seu job completado em tempo. Considerações importantes:
- Tal informação raramente está disponível;
- O sistema deve rodar o job com prazo sem degradar o serviço para os outros usuários;
- O sistema deve planejar cuidadosamente seus requerimentos de recursos, o que é difícil devido à chegada de novos jobs imprevisíveis;
- Se muitos jobs com prazos existirem simultaneamente, o escalonamento pode se tornar complexo, exigindo métodos sofisticados de otimização;
- O gerenciamento intensivo de recursos pode gerar um overhead substancial.
Tais conflitos devem ser considerados cuidadosamente por projetistas de sistemas operacionais, pois o consumo total de recursos pode degradar o serviço para o restante da comunidade de usuários.