No sistema operacional, cada programa em execução constitui um processo. Este processo é definido como um conjunto necessário de informações para que o sistema operacional implemente a concorrência dos programas, ou seja, é constituído por:
- Contexto de hardware → Armazena o conteúdo dos registradores gerais da CPU e registradores de uso específico;
- Contexto de software → Especifica os limites e características dos recursos que podem ser alocados pelo processo;
- Espaço de endereçamento → Determina a área de memória pertencente ao processo onde instruções e dados serão armazenados para execução.
Um processo é classificado como
CPU-bound ou
I/0-bound, de acordo com a utilização do processador e dos dispositivos de E/S. Portanto:
- Processo CPU-bound →: Passa a maior parte do tempo no estado de execução, utilizando o processador, ou no estado pronto;
- Processo I/O-bound → Passa a maior parte do tempo no estado de espera, pois realiza um elevado número de operações de E/S.
Nos sistemas multi programáveis os processos são executados concorrentemente, compartilhando o uso do processador, memória principal e dispositivos de E/S, dentre outros recursos. A partir do momento em que diversos processos podem estar no estado de pronto, deve-se adotar uma política de escalonamento, ou seja, deve-se estabelecer critérios que determinarão qual processo será escolhido para fazer o uso do processador.
Sendo assim, a gerência de processos é uma das principais funções de um sistema operacional, possibilitando aos programas alocar recursos, compartilhar dados, trocar informações e sincronizar suas execuções.
A política de escalonamento é implementada por uma rotina do sistema operacional (denominada escalonador) e deve possuir as seguintes funções:
- Manter o processador ocupado a maior parte do tempo;
- Balancear o uso da CPU entre os processos;
- Privilegiar a execução de aplicações críticas;
- Maximizar a produtividade do sistema;
- Oferecer tempos de resposta razoáveis para usuários interativos.
Uma política de escalonamento pode ser classificada de acordo com a sua preempção, ou seja, se o sistema operacional pode interromper o processo em execução e substituí-lo por outro:
- Escalonamento não-preemptivo → Quando um processo está em execução nenhum evento externo pode ocasionar a perda do uso do processador;
- Escalonamento preemptivo → O sistema operacional pode interromper um processo em execução e passá-lo para o estado de pronto, para poder alocar outro processo na CPU. Este modelo permite que o sistema priorize a execução certos de processos além de balancear o uso da CPU entre os processos.