so-04 escalonamento de processos

49
Processos Escalonamento da CPU

Upload: nicola-zagari

Post on 18-Dec-2014

29.757 views

Category:

Technology


3 download

DESCRIPTION

Escalonamento de Processos. Conceitos básicos. Algoritmos de Escalonamento (Sistemas Operacionais)

TRANSCRIPT

Page 1: SO-04 Escalonamento de Processos

Processos Escalonamento da CPU

Page 2: SO-04 Escalonamento de Processos

2 Escalonamento de CPU Eduardo Nicola F. Zagari

  Conceitos Básicos   Escalonamento de Processador   Critérios de Escalonamento   Escalonamento Não Preemptivo   Escalonamento Preemptivo   Mecanismos de Interrupção em Intervalos de Tempo   Prioridades   Algoritmos de Escalonamento   Escalonamento para Vários Processadores   Escalonamento em Tempo Real   Estudo de Casos: Escalonamento no Unix, Windows XP,

Linux e de Threads

Page 3: SO-04 Escalonamento de Processos

3 Escalonamento de CPU Eduardo Nicola F. Zagari

  Multiprogramação: corresponde a diversos programas distintos executando em um mesmo processador   maximiza utilização da CPU

  No entanto, somente um processo é executado a cada instante em um processador

  Toda vez que um processo tiver que esperar (evento ou E/S) outro processo usa a CPU (“ciclo de vida” de um processo)   A execução de um processo consiste de um ciclo de execução de

CPU e espera de I/O

pronto

bloqueado

execução

E/S ou evento

interrupção espera por E/S ou evento

escalonado

Escalonador

Page 4: SO-04 Escalonamento de Processos

4 Escalonamento de CPU Eduardo Nicola F. Zagari

Page 5: SO-04 Escalonamento de Processos

5 Escalonamento de CPU Eduardo Nicola F. Zagari

  Conhecido como Escalonador de Processsos   Determina/Escolhe, dentre os processos que estão em memória,

qual processo será associado a uma CPU, quando esta estiver disponível

  Age sobre os processos prontos para executar (processos do estado de pronto)

  Segue uma política de escolha   Executado várias vezes por segundo   Reside permanentemente na memória

Page 6: SO-04 Escalonamento de Processos

6 Escalonamento de CPU Eduardo Nicola F. Zagari

  Situação para escalonamento:   processo passa do estado em execução para pronto   processo passa de em execução para espera/bloqueado   processo passa de espera/bloqueado para pronto   processo termina

  Preempção: é quando um processo em estado de pronto tem precedência sobre o que está usando a CPU.

  Escalonamenteo Não-Preemptivo: não contempla as preempções, isto é, o escalonador não interrompe os processos que estão em execução.

  Escalonamento Preemptivo: que contempla a preempção das tarefas, isto é, provoca uma interrupção forçada de um processo para que outro, com a preempção, possa usar a CPU.

Page 7: SO-04 Escalonamento de Processos

7 Escalonamento de CPU Eduardo Nicola F. Zagari

  Determina qual processo no estado pronto para executar será associado a uma CPU, quando esta estiver disponível

  É executado várias vezes por segundo   Reside permanentemente na memória

Page 8: SO-04 Escalonamento de Processos

8 Escalonamento de CPU Eduardo Nicola F. Zagari

  Determina quais os processos que poderão competir pela CPU   Responsável pela suspensão e ativação de processos, o que

significa flutuações na carga do sistema visando um melhor balanceamento

  Atua como um buffer entre a admissão de jobs e a associação da CPU aos processos que constituem os jobs admitidos

  Job: é um conjunto de atividades necessárias para a realização do trabalho computacional requerido por um usuário (divide-se em diversos steps (passos) )

Page 9: SO-04 Escalonamento de Processos

9 Escalonamento de CPU Eduardo Nicola F. Zagari

  Determina quais jobs serão admitidos e poderão competir pelos recursos do sistema (admission scheduling)

  Permite que não existam jobs em demasia no sistema, o que acarretaria uma eterna competição pelos recursos

  Todo job, uma vez admitido, acarreta na criação de um ou mais processos

Page 10: SO-04 Escalonamento de Processos

10 Escalonamento de CPU Eduardo Nicola F. Zagari

  O módulo Dispatcher dá o controle da CPU para o processo selecionado pelo escalonador de curto prazo. Isto envolve:   Troca de contexto   Mudança do processador para o Modo Usuário   Salto para a localização adequada no programa do usuário para o

seu reinício   Latência de Despacho – tempo que leva para o dispatcher parar

um processo e reiniciar a execução de outro

Page 11: SO-04 Escalonamento de Processos

11 Escalonamento de CPU Eduardo Nicola F. Zagari

  Utilização da CPU: % do tempo que a CPU fica ocupada (0 - 100%)

  Throughput: número de processos completados por unidade de tempo

  Turnaround: intervalo de tempo entre a submissão de um processo e sua finalização (soma dos intervalos esperando para ser carregado na memória, fila de pronto, em execução e em espera)

  Tempo de espera: tempo que cada processo fica na fila de pronto

  Tempo de resposta: tempo que o processo demora para produzir alguma resposta à uma requisição (importante para processos interativos)

  É desejável maximizar os 2 primeiros e minimizar os 3 últimos   Para sistemas interativos, é importante minimizar a variância do

tempo de resposta (previsibilidade)

Page 12: SO-04 Escalonamento de Processos

12 Escalonamento de CPU Eduardo Nicola F. Zagari

  Objetivos das políticas de escalonamento:   maximizar a utilização da CPU   maximizar o throughput   minimizar o turnaround   minimizar o tempo de espera   minimizar o tempo de resposta   ser justa   maximizar o número de usuários interativos   ser previsível   minimizar o uso de recursos   balancear o uso de recursos   balancear usuários interativos com os demais   priorizar processo que segurem recursos chave   não degradar o sistema   etc

Page 13: SO-04 Escalonamento de Processos

13 Escalonamento de CPU Eduardo Nicola F. Zagari

  Não permite a retirada da CPU de um processo após este tê-la conseguido

  Tempo de resposta é mais previsível

É mais justo?

  Processos curtos precisam esperar pelos longos   Permite monopolização da CPU

Page 14: SO-04 Escalonamento de Processos

14 Escalonamento de CPU Eduardo Nicola F. Zagari

  Permite que a CPU seja retirada de um processo para ser entregue a outro

  Garante que os processos possam progredir uniformemente   Não permite a monopolização da CPU   Usado para:

  atendimento rápido de processos mais importantes   tratamento de interrupções em sistemas de tempo real   atender os usuários em sistemas de tempo compartilhado

  A mudança de contexto envolve sobrecarga

Page 15: SO-04 Escalonamento de Processos

15 Escalonamento de CPU Eduardo Nicola F. Zagari

  Para prevenir processos do usuário de monopolizar o sistema (CPU), por acidente ou de propósito, uma interrupção por tempo é usada

 é o tempo limite para uso da CPU, após o qual ocorre a interrupção por tempo

  Um processo do usuário, uma vez interrompido por término do seu quantum, volta à fila de pronto para executar e permite o escalonamento de outro processo

  Um processo em execução mantém controle sobre a CPU até:   voluntariamente liberá-la   quantum time expirado   outra interrupção exija atenção da CPU para que seja tratada   erro de execução

quantum ou time-slice

Page 16: SO-04 Escalonamento de Processos

16 Escalonamento de CPU Eduardo Nicola F. Zagari

  Podem ser fixas (estáticas) durante a vida do processo ou modificáveis (dinâmicas)

  Podem ser associadas externamente ou de maneira automática   Podem ser calculadas e associadas de forma racional ou

arbitrária

Page 17: SO-04 Escalonamento de Processos

17 Escalonamento de CPU Eduardo Nicola F. Zagari

  FIFO (First-In First-Out) (também conhecido por FCFS (First-Come First-Served))

  SJF (Shortest Job First)   Round-Robin   SRT (Shortest Remaining Time)   Prioridade   Múltiplas Filas   Múltiplas Filas com Realimentação   Escalonamento para Vários Processadores   Escalonamento de Tempo Real

  Earliest Deadline

Page 18: SO-04 Escalonamento de Processos

18 Escalonamento de CPU Eduardo Nicola F. Zagari

  Não preemptivo (Uma vez em execução, é executado até o término)

  O processo que chegar primeiro (first-in) é o primeiro a ser selecionado para execução (first-out)

  Implementado através de fila   Inicialmente criado para sistemas batch   Injusto com jobs curtos (veja exemplos!)   Ineficiente para sistemas de tempo compartilhado   Combinado com outros esquemas

Page 19: SO-04 Escalonamento de Processos

19 Escalonamento de CPU Eduardo Nicola F. Zagari

  Turnaround médio = ( 10 + 12 + 14 ) / 3 = 12 u.t.   Tempo de espera médio = ( 0 + 10 + 12) / 3 = 7,33 u.t.

Suponha que os processos cheguem na ordem P1, P2 e P3

Page 20: SO-04 Escalonamento de Processos

20 Escalonamento de CPU Eduardo Nicola F. Zagari

  Turnaround médio: ( 14 + 2 + 4 ) / 3 = 6,67 u.t.   Tempo de espera médio = ( 4 + 0 + 2) / 3 = 2 u.t.

Suponha que os processos cheguem na ordem P2, P3 e P1

Page 21: SO-04 Escalonamento de Processos

21 Escalonamento de CPU Eduardo Nicola F. Zagari

  Não preemptivo   O processo com o menor tempo para ser completado é

escolhido   quando a informação sobre o tempo de execução não se encontra

disponível deve ser estimado ou usa-se o da última vez   desempate pode ser, por exemplo, por FIFO

  Reduz tempo médio de espera mais do que isto: SJF é ótimo, pois dá o tempo de espera mínimo para um dado conjunto de processos

  No entanto, apresenta uma grande variância no tempo de espera

Page 22: SO-04 Escalonamento de Processos

22 Escalonamento de CPU Eduardo Nicola F. Zagari

  Turnaround médio FIFO: (6+14+21+24)/4 = 16,25 u.t.   Tempo de espera médio: (0 + 6 + 14 + 21)/4 = 10,25 u.t.

  Turnaround médio SJF: (3 + 9 + 16 + 24) / 4 = 13 u.t.   Tempo de espera médio: (3 + 16 + 9 + 0) / 4 = 7 u.t.

Page 23: SO-04 Escalonamento de Processos

23 Escalonamento de CPU Eduardo Nicola F. Zagari

  O processo em execução libera voluntariamente a CPU retornando para a fila de pronto sem a interrupção do sistema operacional (não preemptivo)

  Um programa mal escrito pode monopolizar a CPU   Fila de mensagem é verificada periodicamente (Win 3.11)

Page 24: SO-04 Escalonamento de Processos

24 Escalonamento de CPU Eduardo Nicola F. Zagari

  Define-se uma unidade de tempo denominada quantum ou time-slice (usualmente de 10 a 100ms) que corresponde ao tempo limite para uso da CPU por cada processo

  Após este tempo ter sido passado, o processo sofre preempção e é colocado no final da fila de pronto

  A fila de pronto é tratada como uma fila circular (FIFO)   O escalonador “pega” o primeiro processo da fila de pronto para

ser executado e define um timer para o tempo de 1 quantum   Se o tempo de execução for maior que 1 quantum, o timer gera

uma interrupção e o SO faz o chaveamento de contexto   Projetado para sistemas de tempo compartilhado

  Se houver n processos na fila de pronto e o tempo do quantum for q, então cada processo obtém 1/n do tempo da CPU e fatias de no máximo q unidades de tempo por vez. Nenhum processo espera por mais que (n-1)q unidades de tempo.

Page 25: SO-04 Escalonamento de Processos

25 Escalonamento de CPU Eduardo Nicola F. Zagari

  Claramente preemptivo   O tempo médio de espera é alto   O desempenho depende do tamanho do quantum

  se for muito grande (infinito) FIFO   se for muito pequeno, o overhead com ochaveamento de

contexto se torna alto demais...

tende a

Page 26: SO-04 Escalonamento de Processos

26 Escalonamento de CPU Eduardo Nicola F. Zagari

Quantum = 1 u.t.

  Turnaround médio RR: (16 + 8 + 9) /3 = 11 u.t.   Tipicamente, o turnaround médio é maior que o do SJF, mas o

tempo de resposta é melhor

Page 27: SO-04 Escalonamento de Processos

27 Escalonamento de CPU Eduardo Nicola F. Zagari

  É a contra-partida preemptiva do SJF   O processo com menor tempo para ser completado é escolhido   Um processo em execução é interrompido se um novo processo,

com menor tempo para ser completado aparece na fila de pronto   Apresenta sobrecarga maior que o SJF

  Variações:  Tempo para ser completado pequeno  Tempo para ser completado do processo que chega é pouco

menor

Page 28: SO-04 Escalonamento de Processos

28 Escalonamento de CPU Eduardo Nicola F. Zagari

  Turnaround médio SRT: ((17-0)+(5-1)+(26-2)+(10-3))/4 = 13 u.t.   E qual é o turnaround médio se fosse escalonado segundo SJF?

  Resp.: 14,25 u.t.

Page 29: SO-04 Escalonamento de Processos

29 Escalonamento de CPU Eduardo Nicola F. Zagari

  Uma prioridade é associada a cada processo e a CPU é alocada ao processo de maior prioridade

  SJF é um caso de escalonamento por prioridade em que a prioridade é maior para os processos de menor tempo de execução

  A prioridade é geralmente representada por um número (entre 0-7 ou 0-255), mas não existe uma convenção de qual número (o maior ou o menor) é o de maior prioridade

  Pode ser preemptivo ou não   SJF é um Escalonamento por Prioridade onde a prioridade é

definida de acordo com o tempo de CPU estimado do processo

Page 30: SO-04 Escalonamento de Processos

30 Escalonamento de CPU Eduardo Nicola F. Zagari

  Turnaround médio: (16+1+6+18+19)/4 = 15 u.t.

Page 31: SO-04 Escalonamento de Processos

31 Escalonamento de CPU Eduardo Nicola F. Zagari

  Prioridade definida:   internamente: usa alguma quantidade mensurável para computar a

prioridade. (dinâmica)  Ex.: memória, arq. abertos, razão I/O por CPU usada

  externamente: importância do processo, departamento de origem, fatores políticos, hierarquia. (estática)

  Problema: starvation - processos de baixa prioridade podem ficar indefinidamente no estado de pronto (IBM 7094 no MIT processo rodando por 6 anos)

  Solução: aumentar progressivamente a prioridade dos processos que estão aguardando

Page 32: SO-04 Escalonamento de Processos

32 Escalonamento de CPU Eduardo Nicola F. Zagari

  Os processos são previamente divididos em grupos em função do tipo de processamento realizado   Interativo (foreground)   Batch (background)

  A cada grupo é aplicado um mecanismo de escalonamento adequado   Interativo – RR   Batch – FIFO

Fila de processos batch

Fila de processos interativos

Fila de processos do sistema

Alta prioridade

Baixa prioridade

 Outra alternativa: time-slices entre filas (ex.: 80% para os interativos em RR e 20% para os batch em FIFO)

Possibilidade de starvation

Page 33: SO-04 Escalonamento de Processos

33 Escalonamento de CPU Eduardo Nicola F. Zagari

  Os processos não permanecem em uma mesma fila até o término do processamento

  O SO faz um ajuste dinâmico (mecanismo adaptativo) para ajustar os processos em função do comportamento do sistema

  Os processos não são previamente associados às filas, mas direcionados pelo sistema entre as diversas filas com base no seu comportamento

  Parâmetros:   número de filas,   algoritmo de escalonamento para cada fila,   método para mudar (promover ou rebaixar) o processo de fila,   método para determinar em que fila um processo entra

  Método mais complexo

Page 34: SO-04 Escalonamento de Processos

34 Escalonamento de CPU Eduardo Nicola F. Zagari

  Um exemplo (existem outras variações):   Processos novos entram no fim da primeira fila   Nas filas, os processos são escalonados segundo Round Robin   O quantum varia de uma fila para outra (aumenta em direção às

últimas, quantum 1 para a primeira, 2 para a segunda, etc)   Os processos das primeiras filas têm maior prioridade (um processo

não pode ser escolhido, a menos que, as filas anteriores estejam vazias)

  Um processo em execução é interrompido, caso apareça um processo em uma das filas anteriores à sua

  Sempre que um processo esgotar seu quantum , ele é suspenso na fila da próxima classe de prioridade

  Se o processo liberar a CPU, sem preempção, sai da estrutura de filas   Quando um processo volta à estrutura, é colocado em uma fila de

prioridade mais alta do que estava antes de sair

Page 35: SO-04 Escalonamento de Processos

35 Escalonamento de CPU Eduardo Nicola F. Zagari

Fila 3

Fila 2

Fila 1 Alta

prioridade

Baixa prioridade

Fila N

...

Menor quantum

Maior quantum

Page 36: SO-04 Escalonamento de Processos

36 Escalonamento de CPU Eduardo Nicola F. Zagari

  Vantagens de uma política como esta:   Processos CPU-bound vão caindo em filas de prioridade mais baixas,

sendo escolhidos para rodar com menos freqüência; no entanto, eles recebem quanta maiores, necessitando receber a CPU por um número menor de vezes, o que reduz a quantidade trocas de contexto

  Processos interativos (I/O-bound), normalmente pequenos, são favorecidos, reduzindo-se o tempo de resposta médio do sistema

  Processos interativos grandes, após interação com usuários, retornam em filas de prioridade mais alta

  Problema: pressionar <ENTER> em terminais processando longos jobs não interativos (CPU-bound)

  Moral da história: implementar uma boa política na prática é muitíssimo mais difícil do que idealizá-la

Page 37: SO-04 Escalonamento de Processos

37 Escalonamento de CPU Eduardo Nicola F. Zagari

  Escalonamento mais complexo   Processadores idênticos (homogêneos)

  Compartilhamento de carga (load sharing)   Fila por processador: processador pode ficar ocioso   Fila única: compartilhamento de dados (problemas!)

  Abordagens:   Processamento simétrico

 Cada processador faz seu próprio escalonamento (exclusão mútua!)

  Mestre-Escravo: processamento assimétrico  um algoritmo, executado em um processador reservado para

esse fim, é o escalonador dos outros processadores (alivia a necessidade de compartilhamento de dados)

Page 38: SO-04 Escalonamento de Processos

38 Escalonamento de CPU Eduardo Nicola F. Zagari

  Sistemas de tempo real: requisitos temporais   Tempo compartilhado puro não funciona   Hard real-time: requisitos temporais rígidos requer que uma tarefa

crítica seja completada dentro de um tempo garantido  Ex.: tráfego aéreo, armas, sistemas médicos, controle industrial,

etc   Soft real-time: requisitos temporais flexíveis requer que um processo

crítico receba prioridade sobre outros menos importantes  Ex.: multimídia, realidade virtual, etc

  Sistemas de TR rígidos: processadores dedicados   Sistemas de TR flexíveis:

  Implementados com outros esquemas   Processos críticos devem ter prioridade sobre outros   Implica na degradação do serviço dos outros usuários

Page 39: SO-04 Escalonamento de Processos

39 Escalonamento de CPU Eduardo Nicola F. Zagari

  Escalonamento baseado em prioridades dinâmicas   A idéia básica é atribuir sempre a maior prioridade ao processo que

apresentar o prazo mais próximo a expirar (earliest deadline)   Sempre que um novo processo chega na fila de pronto, são

calculadas e atribuídas novas prioridades a todos   O Earliest Deadline é um algoritmo ótimo, isto é, o fator de

utilização da CPU é 100%   Se os processos não forem independentes:

  Problema da Inversão de Prioridades  Solução: Protocolo de Herança de Prioridade

– Conseqüência: queda no fator de utilização da CPU

Page 40: SO-04 Escalonamento de Processos

40 Escalonamento de CPU Eduardo Nicola F. Zagari

Page 41: SO-04 Escalonamento de Processos

41 Escalonamento de CPU Eduardo Nicola F. Zagari

  Unix Sistema de Tempo Compartilhado   Meta: bom tempo de resposta aos processos interativos

  Escalonamento de 2 níveis   Escalonador de baixo nível: Filas Múltiplas (prioridade) com

realimentação   Processos executando em modo kernel: prioridade negativa (que são as

maiores)   Processos executando em modo usuário: prioridade positiva   Roda primeiro processo da fila prioritária não vazia interrupções de

tempo: incremento do contador de utilização da CPU (que aumentará o valor da prioridade do processo)

  Round-Robin dentro de cada fila   A cada segundo as prioridades são recalculadas:

 Contadores de uso da CPU divididos por 2  Nova prioridade = base + nice + contador de uso da CPU

  Processos interativos voltam do bloqueio com prioridade negativa.

Page 42: SO-04 Escalonamento de Processos

42 Escalonamento de CPU Eduardo Nicola F. Zagari

Page 43: SO-04 Escalonamento de Processos

43 Escalonamento de CPU Eduardo Nicola F. Zagari

  Dois algoritmos: time-sharing e real-time   Time-sharing

  Prioridades baseadas em créditos – processo com mais créditos é o próximo a ser escalonado

  Crédito subtraído quando ocorre uma interrupção por tempo   Quando crédito = 0, outro processo é escolhido   Quando todos os processos têm crédito = 0, ocorre

“recarregamento” de créditos  Baseado em alguns fatores como prioridade e histórico

  Real-time   Soft real-time (TR Flexível)   Aderente ao Posix.1b – duas classes

 FIFO e RR  Processos de maior prioridade sempre executam primeiro

Page 44: SO-04 Escalonamento de Processos

44 Escalonamento de CPU Eduardo Nicola F. Zagari

  Escalonamento Local – Como a biblioteca de threads decide qual thread do usuário executar quando há um LWP disponível

  Escalonamento Global – Como o kernel decide qual kernel thread deve ser a próxima a ser executada

Page 45: SO-04 Escalonamento de Processos

45 Escalonamento de CPU Eduardo Nicola F. Zagari

#include <pthread.h>#include <stdio.h>#define NUM THREADS 5int main(int argc, char *argv[]){ int i; pthread t tid[NUM THREADS]; pthread attr t attr; /* get the default attributes */ pthread attr init(&attr); /* set the scheduling algorithm to PROCESS or

SYSTEM */ pthread attr setscope(&attr, PTHREAD SCOPE SYSTEM); /* set the scheduling policy - FIFO, RT, or OTHER */ pthread attr setschedpolicy(&attr, SCHED OTHER); /* create the threads */ for (i = 0; i < NUM THREADS; i++) pthread create(&tid[i],&attr,runner,NULL);

Page 46: SO-04 Escalonamento de Processos

46 Escalonamento de CPU Eduardo Nicola F. Zagari

/* now join on each thread */ for (i = 0; i < NUM THREADS; i++) pthread join(tid[i], NULL);} /* Each thread will begin control in

this function */void *runner(void *param){ printf("I am a thread\n"); pthread exit(0);}

Page 47: SO-04 Escalonamento de Processos

47 Escalonamento de CPU Eduardo Nicola F. Zagari

  JVM usa um algoritmo de escalonamento baseado em prioridades e preemptivo

  Uma fila FIFO é usada se houver múltiplas threads com a mesma prioridade

  JVM escalona uma thread para executar quando: 1.  A thread “em execução” sai do estado de “executável” 2.  Uma thread de maior prioridade entra no estado “executável”

* Nota – a JVM não especifica se threads são “Time-Sliced” ou não

Page 48: SO-04 Escalonamento de Processos

48 Escalonamento de CPU Eduardo Nicola F. Zagari

Uma vez que a JVM não assegura Time-Slicing, o método yield() pode ser usado:

while (true) { // perform CPU-intensive task . . . Thread.yield(); }

Isto passa o controle a uma outra thread de igual prioridade

Page 49: SO-04 Escalonamento de Processos

49 Escalonamento de CPU Eduardo Nicola F. Zagari

Prioridade Comentário Thread.MIN_PRIORITY Prioridade Mínima de Thread Thread.MAX_PRIORITY Prioridade Máxima de Thread Thread.NORM_PRIORITY Prioridade Default de Thread

As prioridades podem ser ajustadas usando-se o método setPriority():

setPriority(Thread.NORM_PRIORITY + 2);