Por Vítor Rideik e Thiago Carrere
O escalonamento de processadores é a forma com os processadores existentes
Num sistema computacional são utilizados para efetuar o processamento,
Isto é, é como os processos são distribuıdos para execução nos Processadores.
Tanenbaum propõe a seguinte definição:
Quando mais de um processo é executável, o sistema operacional
Deve decidir qual será executado primeiro. A parte do sistema operacional dedicada a esta decisão é chamada escalonador (scheduler) e o algoritmo utilizado é chamado algoritmo de escalonamento
(scheduling algorithm). [TAN92, p. 62]
O escalonador de processos do Mac OS X é derivado do escalonador OSFMK, porém várias modificações foram feitas para o tratamento de interatividade no projeto de escalonador base.
Assim como o kernel do FreeBSD (5.0BSD), o escalonador de processos do Mac OS X escalona os processos baseado numa variante do algoritmo de múltiplas filas com realimentação, porém divide as filas de prioridades em 4 grupos de processos, agrupados de acordo com suas características.
- Normal: Prioridade das aplicações normais do usuário.
- Sistema: Prioridade das aplicações do sistema, com prioridade superior as threads normais de usuário.
- Kernel: Classe reservada para threads em espaço de kernel que necessitam rodar
Com uma prioridade superior às threads de sistema. - Tempo real Threads nas quais a prioridade está baseada na necessidade de reservar
uma fração pré-definida de ciclos de clock, independente de outras
atividades sendo executadas no sistema.
No caso de tarefas de tempo real, È feito um controle forte pela aplicação no número de ciclos do processador a serem utilizados. Assim, o programador utiliza chamadas de sistema para requisitar ao sistema rodar por A ciclos nos próximos B ciclos. Por exemplo, um processo de tempo real pode requisitar ao kernel que, para que ele possa executar corretamente dentro dos seus padrões mínimos aceitáveis, ele necessite, a cada 7000 ciclos, 3000 ciclos reservados a ele.
Caso a aplicação não respeite o número de ciclos requisitados, ou seja, não faça uma operação de E/S ou use a chamada de sistema sched yield, um processo de tempo real será penalizado dentro de sua fila de prioridades, sendo inclusive possível a migração para o grupo de processos Normal, visando um maior desempenho e justiça no sistema.
A escolha do processo a ser executado obedece o algoritmo de Múltiplas Filas com realimentação, sendo executados os grupos de filas de maior prioridade (Tempo real) e por último o grupo de filas de prioridade de usuário (Normal).
A migração entre os diferentes grupos de threads e feita através do nível de prioridade explicitada pelo usuário. A migração entre as filas de prioridade dentro do grupo de tarefas de usuário é determinada pelo determinador de interatividade.