Comunicação entre ProcessosTopSinaisEscalonamento

Escalonamento

Problemas de Escalonamento

Unix é time-sharing, ilusão de múltiplos processos concorrentes:

Objectivos conflituantes: Implementação exige context switch, uma operação cara.

Context Switch

  1. Guardar registos correntes no PCB;
  2. Ler PCB do novo registo corrente;
  3. Tarefas específicas da arquitectura:
  4. Custos influenciam escolha da melhor estratégia.
Ver __switch_to em arch/i386/process.c e kernel/sched.c para Linux. Ver cpu_switch em i386/i386/swtch.s para FreeBSD.

Clocks

OS interrompido HZ ticks por segundo:

Algumas tarefas só são processadas no major tick.

Em Linux do_timer_interrupt() (arch/i386/kernel/time.c) -> do_timer() (kernel/timer.c) -> mark_bh() (include/kernel/interrupt.h) -> tasklet_action() (kernel/softirq.c)

Callouts

Funções a chamar mais tarde (timeout ou task queue):

Interrupt handler coloca uma flag que é verificada no retorno à prioridade normal.

Callouts são ordenados por:

  1. "tempo até disparar" em BSD;
  2. ringlist em Linux: ver run_timer_list() em kernel/timer.c.

Alarmes

Alarmes são activados ao fim de um certo intervalo de tempo:

Ver kernel/timer.c e kernel/itimer.c em Linux.

Política de Escalonamento em Unix

Três tipos de aplicações: interactivas, batch e real-time.

Algoritmo de Escalonamento em Unix

Implementação do Escalonador BSD

Implementação do Escalonador BSD

Problemas em BSD

Problemas do Escalonador BSD:

Objectivos do Escalonador de SVR4

Objectivos do desenho do escalonador em SVR4:

Princípios do Escalonador de SVR4

Ideias principais:

Processamento Independente de Classe

O nível independente de classe tem as seguintes características:

Processamento Dependente de Classe

A componente dependente de classe é acedida como um vector de funções que implementam as componentes dependentes de classe.

Processamento Dep de Classe: Interface

Prioridades são divididas entre:

Time-Sharing em SVR4

Escalonamento é "round-robin" usando uma tabela de parâmetros fixa:

Time-Sharing em SVR4

glbpri quant tqexp slpret mxwt lwait
0 0 100 0 10 5 10
1 1 100 0 11 5 10
... ... ... ... ... ... ...
15 15 80 7 25 5 25
... ... ... ... ... ... ...
40 40 20 30 50 5 50
... ... ... ... ... ... ...
59 59 10 49 59 5 59

Processos de Tempo-Real em SVR4

Análise de Escalonamento em SVR4

Novo algoritmo de escalonamento:

Escalonamento em Solaris

Solaris tem um mecanismo de escalonamento diferente:

Escalonamento para MP em Solaris

Suporte a Multiprocessadores inclui:

Uso de chosen_level

T6 e T7 acordam:

Garante que T7 fica na fila, mesmo que outro CPU veja que P3 está a correr com prioridade 100.

Escalonamento Escondido

O kernel faz trabalho assíncrono, sem considerar a prioridade das threads que fizeram a chamada original:

Inversão de Prioridades

Thread de baixa prioridade pode ser necessário para activar thread de alta prioridade:

Quando T3 acorda:

Solução correcta:

O problema pode ser recursivo!

Inversão de Prioridades: Solução

Turnstiles

Muitos objectos de sincronização podem exigir muitos recursos ao sistema.

Escalonamento em Mach

Paralelismo em Mach

Escalonamento em True64 Unix

Escalo. Paralelo em True64 Unix

Escalonamento em Linux

Implementado por schedule() em kernel/sched.c:

Escalonamento em Linux

Escalonamento em Linux: Discussão

Outros Escalonamentos


vitor@cos.ufrj.br

Comunicação entre ProcessosTopSinaisEscalonamento