• Nenhum resultado encontrado

Gestão da CPU - Escalonamento

N/A
N/A
Protected

Academic year: 2019

Share "Gestão da CPU - Escalonamento"

Copied!
42
0
0

Texto

(1)
(2)

Toda esta apresentação é uma

adaptação/tradução/versão do

curso de Abraham

Silberschatz

(3)

Gestão da CPU - Escalonamento

Conceitos Básicos

Critérios de Escalonamento

Algoritmos de Escalonamento

Escalonamento de Threads

Exemplos de Sistemas Operacionais

(4)

Objetivos

Introdução ao Escalonamento de CPU, o qual

é a base dos sistemas operacionais

multiprogramáveis.

Descrição de vários algoritmos de

Escalonamento de CPU.

Critérios para a seleção de qual dos algoritmos

(5)

Conceitos Básicos

Máxima utilização da CPU é obtida com

multiprogramação

Ciclo CPU e de E/S

Execução de

processos - fase de execução da CPU e

espera por E/S

(6)

Gráfico de um ciclo de CPU

(7)
(8)

Escalonamento de CPU

Seleciona dentre os processos na memória em

estado

pronto

, e aloca a CPU para um deles.

Decisões de escalonamento da CPU ocorrem quando

um processo:

1. Muda do estado executando para esperando.

2. Muda do estado executando para pronto.

3. Muda do estado esperando para pronto.

4. Termina.

Escalonamento nas condições 1 e 4

é

não-preemptivo.

(9)

Despachante - D

ispatcher

O despachante é o módulo que fornece o controle da

CPU ao processo selecionado pelo escalonador da

CPU. Envolve:

Troca de contexto

Mudança para o modo usuário

Deslocamento para o endereço que reinícia o programa do usuário.

Latência do Despacho é tempo gasto pelo

(10)

Critérios para o Escalonamento

Utilização da CPU – manter a CPU ocupada a maior parte

do tempo

Produtividade (Throughput) – número de processos que

completam sua execução por uma unidade de tempo.

Tempo de Processamento (Turnaround) – quantidade de tempo para executar um processo

Tempo de Espera pela CPU – quantidade de tempo que

um processo esteve esperando na fila de processos prontos.

Tempo de Resposta – intervalo de tempo entre o envio de

(11)

Algoritmos de Otimização para o Escalonamento

Máxima utilização de CPU

Máximo Desempenho/Produtividade

Mínimo tempo de processamento

Mínimo tempo de espera

(12)

Primeiro a requisitar é o primeiro a ser servido First-Come,First-Served (FCFS)

Processo Tempo de Rajada

P1 24 P2 3 P3 3

• Suponha que os processos chegam na ordem: P1 , P2 , P3

• Diagrama de Gantt para a alocação é

• Tempo de espera para P1 = 0; P2 = 24; P3 = 27

• Tempo de espera médio é = (0 + 24 + 27)/3 = 17

P1 P2 P3

24 27 30

(13)

Continuando o Escalonamento FCFS

Suponhamos que os processos cheguem na ordem:

P2 , P3 , P1

• O gráfico de Gantt para o escalonamento fica:

• Os tempos de espera são P1 = 6;P2 = 0; P3 = 3

• Tempo de espera médio = (6 + 0 + 3)/3 = 3

• Bem melhor que o caso anterior.

• Efeito Comboio: processos curtos e após processos longos

P 1 P 3 P 2 6

3 30

(14)

Escalonamento do JOB mais Curto/Menor Primeiro (SJF)

• É associado com cada processo a duração da sua próxima

rajada de uso da CPU. O uso dessas durações é para escalonar o processo com o menor tempo.

• SJF é ótimo já que permite o menor tempo médio de espera para um um conjunto de processos.

(15)

Exemplo SJF

Processo Tempo de Chegada Tempo de Rajada

P1 0.0 6

P2 2.0 8

P3 4.0 7

P4 5.0 3

• Gráfico de Grantt para o Escalonamento SJF

• Tempo médio de espera = (3 + 16 + 9 + 0) / 4 = 7

P4 P P3

1

3 16

0 9

P2

(16)

Determinando a duração da próxima fase de uso da CPU (rajada).

Pode somente determinar a duração.

Pode ser calculada com a duração de uso da CPU na

fase anterior, usando médias exponenciais.

CPU

da

utilização

próxima

a

para

previsto

valor

2.

CPU

de

rajada

e

da

atual

1.

1

n

n

tempo

nésima

t

1

.

1 n n

n

t

(17)

Previsão do tempo

(18)

Exemplos de média exponencial

α = 0

 tn+1 = tn

 História recente não é levada em consideração. α =1

• tn+1 = tn

• Somente a duração da fase de uso da CPU mais recente conta.

Se a fórmula for expandida, temos:

tn+1 = α tn+(1 - α) α tn -1 + …

+(1 - α )j α tn -1 + …

+(1 - α )n=1 tn t0

(19)

Escalonamento por prioridade

• Um número de prioridade (inteiro) é associado com cada processo

• A CPU é alocada para o processo com a maior prioridade (menor inteiro geralmente maior prioridade).

– Preemptivo

– Não-preemptivo

SJF é um escalonador com prioridade, no qual a prioridade é a previsão

da próxima fase de uso da CPU.

• Problema do Starvation (penúria-inanição) – processos de baixa

prioridade podem nunca executar.

• Solução pelo Aging (envelhecimento) – ao passar do tempo,

(20)

Escalonamento Round Robin (RR)

• Cada processo recebe uma pequena unidade de tempo de CPU (quantum), usualmente 10-100 milissegundos. Depois de transcorrido este tempo, o processo é retirado da CPU

(Preempção) e adicionado ao fim da fila de processos prontos. • Se existem n processos na fila de processos prontos e o

quantum é q, então cada processo obtém 1/n do tempo da CPU em blocos de no máximo q unidades de tempo de uma vez.

– Nenhum processo espera mais do que (n-1)q unidades de tempo.

• Desempenho

q alto FIFO

(21)

Exemplo de RR com um Quantum = 4

Processo Tempo de Rajada

P

1

24

P

2

3

P

3

3

O gráfico de Grantt é:

P1 P2 P3 P1 P1 P1 P1 P1

(22)

Utilização de várias filas para alocação da CPU

• Fila de processos prontos é particionada em filas separadas:

– primeiro plano - foreground (interativo)

– segundo plano - background (batch)

• Cada fila tem seu próprio algoritmo de escalonamento,

– Foreground - interativo – (RR)

– Background - batch – Primeiro a requerer, Primeiro a ser servido (FCFS)

• Escalonamento deve ser realizado entre as filas.

– Escalonamento de prioridade fixa; Ex.: a fila de processos (Background/foreground)

interativos pode ter prioridade absoluta sobre a fila de processos batch. Possibilidade de starvation (inanição).

(23)
(24)

Múltiplas filas com Feedback

• Um processo pode se mover entre as várias filas;

envelhecimento (aging) pode ser implementado desta forma.

• Escalonamento com múltiplas filas e transferências entre as filas é, exercido, a saber, por:

– Número de filas

– Algoritmos de escalonamento para cada fila

– Método usado para determinar quando transferir um

processo para uma fila de prioridade mais alta

– Método usado para determinar quando transferir um processo para uma fila de prioridade mais baixa

(25)

Exemplo de múltiplas filas com Feedback

Três filas:

– Q0 – RR com quantum de 8 milissegundos – Q1 –RR com quantum 16 milissegundos – Q2 – FCFS

Escalonamento

– Um novo job entra na fila Q0 a qual utiliza FCFS. Quando ele ganha a CPU, job recebe 8 milissegundos. Se ele não finalizar em 8 milissegundos, o job é movido para a fila Q1. – Na fila Q1 o job é de novo servido por FCFS e recebe 16

(26)
(27)

Escalonamento de Threads

Distinção entre thread do usuário e do

kernel-thread.

Muitas-para-um e o modelo muitas-para-muitas

para executar em LWP. Escolamento local.

Escalonamento Global

Como o kernel decide

(28)

Escalonamento de Pthread

API permitem especificar entre PCS or SCS

durante a criação da thread.

PTHREAD SCOPE PROCESS escalona usando o

escalonamento PCS.

PTHREAD SCOPE SYSTEM escalona utilizando o

(29)

Escalonamento Pthread API

#include <pthread.h> #include <stdio.h>

#define NUM THREADS 5

int 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++)

(30)

/* 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);

}

(31)

Escalonamento com múltiplos processadores

• Escalonamento de CPU é mais complexo quando muitos processadores estão disponíveis

Processadores homogêneos em um multiprocessador Compartilhamento de Carga (Load sharing)

Multiprocessamento assimétrico – somente um

processador acessa as estruturas de dados do sistema, aliviando a necessidade de compartilhamento de dados • A afinidade com o processador - processo tem

afinidade com processador no qual ele está sendo executado

(32)
(33)

Processadores Multicore

Recentemente foram colocados múltiplos

cores em um mesmo chip físico.

CPU ficou mais rápida e consome menos

energia.

Multiplas threads por core também foram

implementadas.

(34)
(35)

Exemplos de Sistemas Operacionais

Escalonamento

Solaris

Windows XP

(36)
(37)
(38)
(39)

Escalonamento Linux

• Dois algoritmos: tempo compartilhado e tempo real. • Tempo Compartilhado

– Baseado em créditos com prioridades – processos com mais créditos são escalonados primeiro. O crédito é subtraído na ocorrência de interrupções de tempo. Quando crédito = 0, outro processo é escolhido

– Quando todos os processos tem crédito = 0, ocorre um

recredenciamento baseado em fatores como prioridade e história

• Tempo Real

– Tempo Real Flexível (soft real-time)

– compatível com Posix.1b – duas classes

(40)

Escalonamento Java Thread

JVM usa um algoritmo de escalonamento

preemptivo e baseado em prioridades

Fila FIFO é usada se existem muitas threads

(41)

JVM escalona a thread para executar quando:

1. A Thread alocada a CPU atualmente sai do estado executando

2. Um Thread de prioridade mais alta entra no estado executando

* Nota

a JVM não especifica quando threads são

tempo compartilhado ou não

(42)

Time-Slicing

Tempo Compartilhado

Como a JVM não garante tempo compartilado, o

método yield() pode ser utilizado:

while (true) {

// realiza uma tarefa com uso intenso de CPU . . .

Thread.yield(); }

Dessa forma libera o controle para outra thread de

Imagem

Gráfico de um ciclo de CPU  Tempo
Tabela de Despache do Solaris

Referências

Documentos relacionados