quinta-feira, 29 de outubro de 2009

O Escalonamento de Processos no Mac OS

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.

  1. Normal: Prioridade das aplicações normais do usuário.
  2. Sistema: Prioridade das aplicações do sistema, com prioridade superior as threads normais de usuário.
  3. Kernel: Classe reservada para threads em espaço de kernel que necessitam rodar
    Com uma prioridade superior às threads de sistema.
  4. 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.

3 comentários: