Escolar Documentos
Profissional Documentos
Cultura Documentos
Distribuída
Aula 1 – conceitos básicos
Remis Balaniuk, PhD
Plano de ensino
• Nota Teórica (NT): (0 a 10) correspondendo às média das 2 provas realizadas ao
longo da disciplina.
espaço de endereçamento
arquivos abertos
processos filho AMBIENTE
sinais
estatísticas de uso
contador de programa (PC)
apontador de pilha (SP)
EXECUÇÃO
conjunto de registradores
estado de execução
Modelo de Processo
• Classificação dos modelos de processos quanto ao
custo de troca de contexto e de manutenção
• “heavyweight” (processo tradicional)
• “lightweight” (threads)
Modelo de Processo Tradicional - Heavyweight
t1 t2 t3
Modelo de Processo Tradicional
• Como, em um dado instante, podem haver vários processos
ativos simultaneamente, o processador é chaveado entre os
diversos processos.
• Por esta razão, fica praticamente impossível prever o tempo de
execução de um processo, pois este dependerá da carga do
sistema.
Modelo de Processo Tradicional
• Todo sistema operacional deve possuir mecanismos que
permitam a criação de processos. Geralmente, um
processo somente é criado por outro processo, o que
nos leva a uma hierarquia em árvore.
init
...
getty getty shell
prog1 prog2
main() main()
{ {
create_process(”prog2”,…); fork();
printf(”sou o prog1\n”); printf(”sou o prog2\n”);
} }
Estados do Processo
• Apesar dos processos serem relativamente auto suficientes, muitas
vezes eles necessitam acessar outros recursos (discos, terminais) ou
mesmo se comunicar com outros processos.
• Quando um processo está ocioso esperando que um evento
aconteça, nós dizemos que ele está bloqueado.
• Em algumas situações, o processo pode ser bloqueado a revelia pelo
sistema operacional.
Estados do Processo
• Os estados básicos de um processo são:
• rodando (running),
• bloqueado (blocked) e
• pronto (ready).
• Em um sistema monoprocessado, só temos um único processo
rodando a cada instante.
Estados do Processo
Rodando
(1) (4)
(3)
Bloqueado (2)
Pronto
início da rotina
#00618 de tratamento de
interrupção do
dispositivo 1
#00650
#0063C Vetor de
#00618 Interrupções
endereço vetor #00500
interrupções #000230
MEMÓRIA FÍSICA
Implementando a Multiprogramação
• A rotina de tratamento de interrupção é executada pelo SO.
• Os registradores que foram empilhados pelo hardware são salvos
na tabela de processos do processo p2.
• A interrupção é tratada.
• O processo p1, que solicitou o serviço, é colocado na fila de
prontos.
• O SO acessa a entrada da tabela de processos do processo
escolhido e carrega o conteúdo da tabela nos registradores de
máquina (restauração).
• O processo escolhido reinicia a execução.
Implementando a Multiprogramação
• Troca de contexto: a operação de salvamento dos
registradores de um processo e posterior restauração
de registradores de outro processo é chamada de
troca de contexto. A troca de contexto permite a troca
de processador entre processos.
p1 CPU
p2 (1) 2 53 4
4 0 0
1 0
4 1
5 5
8 8
9
p1
(1)-restauração
SO p2 (2) (2)-salvamento
Escalonamento de Processos
• O algoritmo de escalonamento de processos é o responsável pela
determinação de qual processo (dentre os prontos) vai rodar e por
quanto tempo.
• O algoritmo de escalonamento define, assim, a política de utilização
do processador pelos processos.
• Quando um processo solicita operações blocantes (E/S, por exemplo),
sua execução fica suspensa até que o evento solicitado ocorra.
Escalonamento de Processos
• Execução de 2 processos sem concorrência:
DIAGRAMA DE GANTT
exec idle exec idle exec P1
P2
idle exec idle exec
tempo
• Execução de 2 processos com concorrência:
exec idle exec idle exec P1
P2
idle exec idle exec
• Executando vários processos concorrentemente,
obtemos uma melhor utilização da CPU
Critérios do Escalonamento
• Ao se projetar um escalonador, devemos observar vários
critérios que devem estar presentes em um bom algoritmo
de escalonamento:
– Justiça (fairness): garantir que todos os processos do sistema terão
chances justas de uso do processador (chances iguais é muito
forte!!)
– Eficiência: quando houver trabalho a fazer, o processador deve
estar ocupado
– Minimizar o tempo de resposta: minimizar o tempo de resposta dos
usuários interativos.
Critérios de Escalonamento
• Minimizar o turnaround: O tempo de turnaround é o tempo que vai
desde o lançamento do processo até o seu término.
• É a soma dos seguintes componentes:
• tempo de espera por memória,
• tempo de espera pelo processador,
• tempo de espera por I/O e
• tempo de utilização da CPU.
• Este critério visa minimizar a espera de resultados. Mais utilizado em
processamento batch.
• Minimizar o waiting time: Este critério visa minimizar o tempo de
espera pela CPU.
• Maximizar o throughput: maximizar o número de jobs executados
em uma unidade de tempo
Critérios de Escalonamento
• Infelizmente, a maioria destes critérios é contraditório:
– minimizar o turnaround x minimizar o tempo de resposta:
– para que os usuários interativos obtenham um tempo de resposta
pequeno, geralmente os usuários batch são penalizados com um tempo de
execução maior e vice-versa.
– Um algoritmo que maximiza o throughput geralmente não é justo
com os processos de execução demorada.
Critérios de Escalonamento
• Infelizmente, a maioria destes critérios é contraditório:
– minimizar o turnaround x minimizar o tempo de resposta: para que os usuários
interativos obtenham um tempo de resposta pequeno, geralmente os usuários
batch são penalizados com um tempo de execução maior e vice-versa.
– Um algoritmo que maximiza o throughput geralmente não é justo com os
processos de execução demorada.
Classificação dos Escalonadores Quanto à Preempção
Não-preemptivo: Preemptivo:
P1->P2 a=? b=? P1->P2 a=? b=?
Algoritmos de Escalonamento
• O problema a ser resolvido pelos algoritmos de escalonamento é o
seguinte: dado um conjunto de processos que devem ser executados,
como dividir a utilização do processador entre estes processos?
• Algoritmos de escalonamento:
• First Come First Served
• Round-Robin
• Prioridades
• Shortest Job First
First Come First Served (FCFS)
Pede I/O
B
A
E E
D D
C C
B CPU
Round-Robin
• Cada processo tem o direito de usar o processador por um intervalo
de tempo pré-definido. Este intervalo de tempo é denominado
quantum. Quando o quantum se esgota, o processador é dado a
outro processo.
Algoritmo justo
Round-Robin
• Funcionamento: Esgotou
quantum
A
E D C B CPU
t1
B
A E D C CPU
t2
Round-Robin
• Um dos maiores problemas do algoritmo de escalonamento round-
robin diz respeito à determinação do valor a ser atribuído ao
quantum. Para a determinação deste valor, devemos levar em
consideração o tempo médio da troca de contexto e o tempo de
resposta desejado.
• normalmente, o quantum fica em torno de 100 ms.
Robin
Escalonamento com Prioridades
• Baseia-se no fato de que alguns processos são prioritários e, assim,
devem ser executados antes dos outros.
• A cada processo é atribuída uma prioridade. Processos com
prioridade maior rodam primeiro.
Escalonamento com Prioridades
• Como atribuir as prioridades?
• de forma estática: os processos são divididos em classes e a
cada classe é atribuída uma prioridade. A cada prioridade
existe uma fila de prontos associada
30 E D C B A
t1 20 G F
CPU
10 I H
30 A E D C B
t2 20 G F
CPU
10 I H
Escalonamento com Prioridades
• de forma dinâmica: o sistema analisa o comportamento dos
processos e atribui prioridades favorecendo um certo tipo de
comportamento.
• Exemplo: processos I/O bound devem possuir prioridade alta.
• Prioridade dinâmica: 1/f, onde f é a fração do quantum de tempo usada na
última rodada do processo.
Shortest Job First
• Algoritmo projetado para sistemas batch
• Objetivo: reduzir o tempo de turnaround
• Requer que o tempo total de execução do job seja conhecido antes
do início da execução
• Algoritmo: Dado um conjunto de jobs prontos, execute os jobs com
menor tempo de execução antes.
Shortest Job First
• Funcionamento:
8 4 4 4
SJF E D C B
ta=20 ta=12 ta=8 ta=4
4 4 4 8
FCFS B D C E
ta=20 ta=16 ta=12 ta=8
SJF
4 taB=4
B
Tamedio= (4+8+12+20)/4=11
4 taC=8
C
4 taD=12
D
8 taE=20
E
tempo
Tamedio= (8+12+16+20)/4=14
FCFS
4 taB=20
B
4 taC=12
C
4 taD=16
D
8 taE=8
E
tempo
Shortest Job First
• Aplicação para sistemas interativos:
• Processo interativo:
espera comando
executa comando
• Se considerarmos cada “executa comando” como um job, podemos
aplicar o SJF para processos interativos.
Shortest Job First
• Problema: Como determinar o tempo de execução do comando?
• Usar a técnica conhecida como aging,que estima um valor baseando-se e
lembrando-se dos valores passados.
• Quando um valor fica muito antigo, ele praticamente não influencia mais na
estimativa.
• Exemplo: T0: tempo médio de execução de um comando, T1: tempo
medido na última rodada
• Tempo estimado = T
• T = aT1 + (1-a) T0
• O que acontece se a=1/2?
Escalonamento em Dois Níveis
• Um caso típico de escalonamento em dois níveis é o algoritmo que
considera tanto os processos que estão em memória como os processos
que estão em disco.
• Primeiro nível: manipula os processos que estão carregados em memória.
• Pode ser usada uma das 4 classes de algoritmos descritas anteriormente
• Segundo nível: examina periodicamente o tempo de execução dos processos
e os tira ou os carrega em memória (operações de swap in/ swap out).
• Quando o modelo de processos inclui threads, podemos ter também
um algoritmo de 2 níveis. O primeiro nível determina que processo irá
rodar e o segundo nível determina qual thread do processo
selecionado irá executar.
Comunicação entre Processos
• Ao longo de sua execução, um processo necessita frequentemente
interagir com outros processos.
• A interação entre os processos pode ser de 2 maneiras:
– competição
– cooperação
Competição entre Processos
• Neste caso, os processos entram em conflito pela utilização de
recursos.
• O processo que utiliza um recurso deve sempre deixá-lo em estado
consistente, pois o mesmo poderá ser utilizado por vários outros
processos que se desconhecem mutuamente.
• As relações de competição afetam todos os processos que
executam em um mesmo computador.
• São ditas relações mínimas entre os processos.
Cooperação entre Processos
• Neste caso, os processos que interagem entre si possuem
conhecimento da existência de outros processos.
• Tipos de Cooperação:
• Por Compartilhamento de variáveis
• Por Troca de mensagens
Cooperação entre Processos
• Cooperação por compartilhamento:
• os processos não se conhecem explicitamente, interagindo
entre si através de variáveis compartilhadas.
• Cooperação por troca de mensagens:
• Neste caso, os processos enviam explicitamente valores a
outros processos. As primitivas de comunicação existentes
são enviar e receber. A comunicação só se completa quando
o par de primitivas enviar-receber é executado.
• A cooperação entre processos é descrita
frequentemente na literatura como IPC (inter-process
communication).
Exemplos
15 15
Condições de Corrida
• Como o sistema operacional determina, através da política de
escalonamento, o processo que vai rodar e por quanto tempo, não
sabemos a priori em que ordem dois processos ativos irão se
executar.
• Condições de corrida: Acontecem quando dois ou mais processos
acessam concorrentemente as mesmas posições de memória.
• Se o valor final contido nestas posições depende da ordem na qual os
processos foram executados, estamos diante de uma condição de corrida
(race condition).
• A existência de condições de corrida em um sistema pode levar a
resultados inesperados, devido ao não-determinismo inerente a estas
condições.
Exemplos - Condição de Corrida
a=0
P1 P2 P1 -> P2 print(15);
… … P2 -> P1 print(0);
a=15; print(a); condição de corrida
… …
a=0
P1 P2
P1 -> P2 a=20;
… …
P2 -> P1 a=15;
a=15; a=20;
condição de corrida
… …
a=0
P1 P2 P1 -> P2 0 0;
… … P2 -> P1 0 0;
print(a); print(a); Não há condição de corrida
… …
Condições de Corrida
• Primeiro exemplo de condições de corrida:
– Considere dois processos A e B com o seguinte código:
Processo A Processo B
x=x+1; x=x+1;
x 0
12
LOAD x,R1 (x=0)
INC R1
STOR x,R1 (x=1) tab. proc.
pid … R1…
----quantum--- 1
PA … 70…
tempo
pid … R1…
INC R1 PA … 70…
1
STOR x,R1 (x=1) PB … 18…
1
STOR x,R1 (x=1)
----quantum---
CPU
R1
Valor final: x=1 18
0
70
1
• Esta situação pode ocorrer? Se sim, em que condições?
• Voce considera que o programador admitia, ao fazer o
seu programa, que a variavel x pudesse assumir o valor
1 ao final da execução?
Condições de Corrida
• Segundo exemplo de condições de corrida:
– Para que um arquivo seja impresso, deve-se colocar o seu
nome em uma fila em memória. Esta fila é controlada por
duas variáveis: out, que indica a posição onde o nome do
arquivo deve ser escrito e in, que indica o arquivo que deve
ser impresso no momento.
– O processo que deseja imprimir arquivos recupera a variável
out, coloca o nome do arquivo na posição indicada por out e
incrementa out de uma posição.
Condições de Corrida
Segundo Exemplo
in=8 out=10
Processo A Processo B
8 teste.c
9 cria.c escreve escreve
(arq.a,&out); (arq.b,&out);
10
out=out+1; out=out+1;
tempo
8 teste.c INC R1
STOR out,R1
9 cria.c (out=11) LOAD out,R1
10 arq.a (out=11)
11 arq.b (coloca arq.b na
posição 11)
INC R1
STOR out,R1
(out=12)
Valores Finais
in=8 out=12
Caso 2:
Processo A -> Processo B -> Processo A
Processo A Processo B
LOAD out,R1 (out=10)
Fila de (coloca arq.a na
Impressão posição 10)
11 INC R1
STOR out,R1
(out=11)
Valores Finais
in=8 out=11
Condições de Corrida
• As condições de corrida levam geralmente a resultados inesperados e,
por isso, devem ser evitadas.
• O que nós precisamos é de um meio de garantir que uma porção de
código seja executada somente por um processo de cada vez.
Fazemos, assim, uma serialização da execução.
Condições de Corrida
• Esta exclusividade na execução de partes de código é garantida por
mecanismos que implementam a exclusão mútua.
• A parte do código protegida pelos mecanismos de exclusão mútua é
denominada seção crítica.
• No exemplo 1, a seção crítica é simplesmente a instrução x=x+1. E no
exemplo 2?
Modelos de Processos
• Classificação dos modelos de processos quanto ao custo
de troca de contexto e de manutenção
“heavyweight”
“lightweight”
• Modelo de processos tradicional (heavyweight)
– Neste caso, o processo é composto tanto pelo
ambiente como pela execução.
– Itens da tabela de processos:
espaço de endereçamento
( código, dados, pilha) AMBIENTE
arquivos abertos
conjunto de registradores
(PC, SP, Uso geral, etc) EXECUÇÃO
estado de execução
Tabela de Processos (heavyweight)
Pid Ppid IniMem TamMem Arquivos Command… R1 R2 … PC SP Estado
35
178
…
Tabelas de Threads
P P2
PC
código 1 código
PC
P
código 1 PC
PC (thread2)
(thread1)
ready running
blocked
requisições
mailbox
s1 s2 sn
- Flexibilidade: podemos
worker
worker
worker
facilmente mudar o número
msg threads
PROCESSO
Modelo Team
thread
thread
thread
- Boa distribuição das
requisições
- Flexibilidade: podemos
mailbox
facilmente mudar o número
PROCESSO
threads
Modelo Pipeline
– Nesta organização, cada thread tem uma
tarefa específica e os dados de entrada de
uma thread são produzidos pela thread
anterior.
thread
thread
thread
- Aplicações produtor/
consumidor
-Menos flexível que as
mailbox
abordagens anteriores
PROCESSO
Gerência de Processos Distribuídos
Comparação entre os modelos de processos
• Modelos:
– Processos tradicionais: Não há concorrência no interior do processo.
Existem chamadas de sistema bloqueadas
– Processos + threads: Há concorrência no interior do processo. Existem
chamadas de sistema bloqueadas
– Máquina de estados finitos: Neste modelo, são guardados os estados
parciais de execução de solicitações. Não há chamadas de sistema
bloqueadas.
#NTHREADS 3 main()
#THREAD0 rot1 {
#THREAD1 rot2 …
#THREAD2 rot1 create_thread(rot2,…);
rot1() …
{ create_thread(rot3,…);
…
rot3(); }
} rot2()
rot2() {
{ }
} rot3()
rot3() {
{ }
}
Gerência de Processos Distribuídos
Aspectos no projeto das threads
• Exemplo de variáveis de condição: Scanner daemon
MEMÓRIA
memory_ FÍSICA
occupation
Usuário
fila ready
SO
T35,0 T78,0
Tabelas de Threads
Tid R1 R2… PC SP Estado
Tabela de Processos 0 READY
1 BLOQ
Pid Ppid IniMem TamMem Arquivos Command …
35
78
… Tid R1 R2… PC SP Estado
0 READY
1 RUN
…
Gerência de Processos Distribuídos
Implementação das threads
thread n-1
thread 0
thread 1
ambiente de execução (runtime)
kernel
Tabela de Threads
P35
fila ready Tid R1 R2… PC SP Estado
0 READY
T0 1 RUN
…
Usuário
fila ready SO
P78