Anda di halaman 1dari 54

Captulo 2 Processos e Threads

2.1 Processos 2.2 Threads 2.3 Comunicao interprocesso 2.4 Problemas clssicos de IPC 2.5 Escalonamento
1

Processos
O Modelo de Processo

Considere a multiprogramao de 4 programas:


a) O contador de programa (PC) alternadamente assume endereos de cada programa b) Conceitualmente so 4 processos sequenciais independentes c) Somente um programa est ativo a cada momento 2

Criao de Processos
Um sistema pode executar uma conjunto muito grande de processos simultneos/ concorrentes. Principais eventos que levam criao de processos: 1. Ao iniciar o sistema operacional 2. Um processo pai cria um novo processo (chamda fork())

3

Usurio executa comando/ inicia programa atravs da shell Incio de um programa e em momento prdeterminado (atravs do cron daemon)

Trmino de Processos
Condies que levam ao trmino de processos:
1. 2. 3. 4. Sada normal (voluntria) Sada por erro (voluntria) Erro fatal (involuntrio) Cancelamento por um outro processo (involuntrio), atravs de um sinal.

Hierarquias de Processos
Processo pai cria um processo filho, processo filho pode criar seu prprio processo, etc. Forma-se uma hierarquia de processos
UNIX chama isso de grupo de processos

Windows no possui o conceito de hierarquia de processos


Todos os processos so criados no mesmo nvel
5

Estados de Processos

Ao longo de sua execuo, um processo pode assumir , os seguintes estados:


new: processo foi criado. running: instrues sendo executadas. waiting: Processo aguarda a ocorrncia de algum sinal/interrupo. ready: Processo aguarda alocao do processador. terminated: Processo terminou a sua execuo.
6

Implementao de Processos (1)


A cada processo esto associadas informaes sobre o seu esatdo de execuo (o seu contexto de execuo), Estas ficam armazenadas em uma entrada da Tabela de Processos (ou Process Control Block)

Fig.: Campos da entrada de uma tabela de processos

Process Control Block (PCB)


P1 P2 P3

PCB1 PCB2 PCB3 PCB a representao de um processo no ncleo. Pode ser uma entrada na Tabela de Processos ou um elemento na lista de processos. Para ser capaz de reiniciar um processo interrompido (ou esperando) o estado em que deixou a CPU precisa ser restaurado

10

Fila dos prontos e de espera por E/S

11

Troca de Contexto

12

Troca de Contexto
Consiste de salvar o estado dos recursos em uso (especialmente CPU) do processo interrompido na tabela de processos, e carregar a CPU com um novo estado (PC, registradores, stack pointer, PSW, etc.) Esta troca precisa ser:
Completa e consistente Eficiente

O ncleo no pode ser interrompido durante o processo


Precisa-se garantir a atomicidade da operao

Realizado por um tratador de interrupo genrico, tratador de interruo de primeiro nvel


13

Tratamento de Interrupes

Para desviar o controle de execuo, o valor do contador de programa (PC) da CPU precisa ser trocado. Isso feito pelo HW ao receber uma interrupo
14

Interrupes vs. Excees


O conjunto de interrupes depende da arquitetura do sistema. A especificao da Intel Architecture IA-32 distingue dois tipos de sinais que um processador pode receber:
Interrupes
Notificam o processador que um evento ocorreu, e/ou que o estado de um recurso (p.ex. dispositivo de E/S )mudou Gerado por um dispositivo externo ao processador

Exceo
Indica a ocorrncia de um erro, de hardware ou causado por uma instruo sendo executada Classificados como faults, traps or aborts

15

Tipos de Interrupes
Tipos de interrupo reconhecidos pela Intel Architecture IA-32:.

Tipo
I/O

Descrio para cada tipo


Iniciados pelo HW, notificam o processador de que o estado do dispositivo de E/S mudou (p.ex. E/S finalizada) evento peridico para agendamento de aes e/ou monitoramento de desempenho

Timer

Inter-CPU Em sistemas multi-processadores, para comunicao e sincronizao entre processadores

16

Tratamento de Interrupes
First Level Int. Handler (FLIH), em Assembly Dispositivo -> I/O Interrupt Segmentation Fault -> Error System Call -> Trap send message -> Trap Clock Interrupt - desabilita interrupes - salva contexto em tabela de processos/PCB - Cria nova pilha temporria no kernel - carrega no PC o end. do Vetor de Interrupes - habilita interrupes

Tratador de interrupo especfico(): - trata a interrupo (p.ex. Escreve/le dados de buffer do driver) - se algum processo foi desbloqueado ento - retorna Scheduler(): - Dispatcher, em Assembly: - desabilita interrupes - carrega o contexto na CPU & mapeamento de memria do processo a ser executado - - insere o processo desbloqueado na fila de prontos q Escolhe prximo processo retorna 17

- habilita interrupes

Tratamento de Interrupes
Esqueleto do que o nvel mais baixo do SO faz quando ocorre uma interrupo

Vetor de Interrupo: Localizado em endereo baixo de memria (ncleo) Uma entrada para cada tipo de interrupo (trap, clock, E/S) e cada tipo de dispositivo floppy, HD, teclado, mouse, etc.) Cada entrada contm endereo para um procedimento tratador da interrupo (tratamento do servio da interrupo)

18

Processos em Android
Cada aplicativo Android executa em um processo separado, e tem a sua prpria instncia de Dalvik (mquina virtual Java) O Dalvik uma VM otimizada, de forma que muitas instncias de Dalvik podem executar em um smartphone Dalvik acessa os recursos de HW do dispositivo atravs de chamadas ao Linux kernel Os executveis que rodam na VM Dalvik (.dex) usarem pouca memria RAM Processos com baixa prioridade podem ser terminados Aplicativos podem interagir com "Servios" que so processos executando em background

Fonte: http://mobworld.wordpress.com Memory Management in Android

19

Visualizar/Gerenciar Processos
Unix e Android

ps, kill, etc.

Active Processes Viewer/killer

20

Escalonamento
A cada instante um ou mais processos podem estar no estado pronto, e.g.:
Processos do sistema e de usurios Processos de vrios usurios (sistema time-sharing) Mix de processos interativos e batch (simulao, folha de pagamento)

Escalonador responsvel por gerenciar a fila de prontos, e escolher qual dos processos prontos vai ser o prximo a usar CPU

22

Escalonamento
O algoritmo poder lidar com objetivos conflitantes. Por exemplo:
Garantir justia (fairness): cada processo ganha fatia igual da CPU Aumentar eficincia: manter utilizao de CPU alta (prxima a 100%) Minimizar tempo de resposta (para processos interativos) Minimizar de tempo de retorno (t entre incio-fim de processos batch) Maximizar taxa de sada: nmero de processos processados por unidade de tempo

Sempre que se beneficia uma classe de processos, prejudica-se outras classes.

23

10

Escalonamento
Tipos de sistemas e objetivos do escalonamento

24

A poltica de escalonamento deve ser independente do mecanismo (carregamento da CPU com um contexto) Tm parmetros que precisam ser ajustados para: maximizar a satisfao geral dos usurios e garantir execuo mais eficiente das tarefas essenciais ao sistema

Escalonamento

Principal problema : o comportamento futuro de um processo no previsvel (fases de uso intensivo da CPU, fases de E/S frequente)

25

11

Escalonamento
1. Escalonamento de longo prazo
ao ser criado, processo vai para fila dos prontos Questo: quando isso feito e em qual posio ele entra?

2. dispatching
escalonamento de curto prazo Escolhe um dos processos da/s lista/s de prontos para executar

Usa-se o termo escolanamento para ambos

27

Formas de implementar o escalonador


embutido na execuo do processo
Ao final do tratamento da interrupo, o procedimento para escalonamento chamado Executa como parte do fluxo de controle do processo que estava em execuo

autnomo
Executa como um processo independente Pode estar dedicado a uma CPU em uma arquitetura multicore Em mquinas com 1 processador, executado uma vez a cada quantum de tempo H uma alternncia entre o processo escalonador e os demais processos

28

12

Tipos de Escalonamento
Com relao: ao momento da invocao do escalonador:
preemptivo: processo corrente interrompido (por exemplo, aps ter decorrido quantum de tempo) e escalonador escolhe outro processo para executar no-preemptivo: escalonador s chamado quando processo termina ou bloqueado

ao mtodo de seleo do processo mais prioritrio:


Uso da funo P = Priority(p) Regra de desempate (para processos de mesma prioridade)
Escolha randmica Cronolgica (FIFO) Cclica (Round Robin)
29

Escalonamento por prioridade


Funo de prioridade retorna valor P para processo p: P = Priority(p)
Prioridade esttica: no muda ao longo da execuo de p; Prioridade dinmica: muda em tempo de execuo

Prioridades separam todos processos em nveis:


Implementado atravs de filas de pronto multi-nvel (e.g. vrias Ready Lists RLs) p @ RL[i] executa antes de q @ RL[j] se i>j p, q na mesmo nvel so ordenados usando outro critrio

30

13

Algoritmo geral para um escalonador preemptivo para multi-processador


Scheduler() { do { // some CPU is idle Find highest priority ready_a process p; Find a free cpu; if (cpu != NIL) Allocate_CPU(p,cpu); } while (cpu != NIL); do { // all CPUs are in use Find highest priority ready_a process p; Find lowest priority running process q; if (Priority(p) > Priority(q)) Preempt(p,q); } while (Priority(p) > Priority(q)); if (self->Status.Type!=running) Preempt(p,self); }
31

Parmetros tpicos da Funo Prioridade


Internos (do sistema)
Tipo do processo (sistema vs usurio) Quantidade de memria necessria Tempo total de CPU requisitado Tempo de servio obtido / alcanado Tempo total de permanncia no sistema

Externos
Prazo para trmino de ao (Deadline) Prioridade do usurio: root vs normal (funo na empresa, valor desembolsado)

32

14

Funo Prioridade
Possveis parmetros:
a = tempo de servio alcanado r = tempo de permanncia no sistema t = tempo total de servio d = Periodicidade (para tempo real) deadline (expltio ou definido pelo perodo) e = prioridade externa Requisitos de memria (p/ processamento em lotes)
r a d
33

tempo

Algortmos de escalonamento
Nome, Modo deciso, Priorid., Desempate FIFO: no-preemptivo P = r randomico SJF: no-preemptivo P = t cron./randomico SRT: preemptivo P = (ta) cron./randomico RR: preemptivo P=0 cclico ML: preemptivo P=e cclico no-preemptivo P = e cronolgico
n nveis de prioridade fixa nvel P atendido quando as filas n a P+1 esto vazias
SJF= Shortest Job First; SRT = Shortest Remaining Time; RR= RoundRobin; ML = Multi-level a = servio alcanado; r = permanncia no sistema, t = tempo total de servio e = prioridade externa

34

15

First In First Out (FIFO)


Execuo por ordem de chegada Job A B C Tempo de CPU 8 1 1

A 0 8

B C 9 10

Tempo mdio de espera (0 + 8 + 9) / 3 = 5.7


35

Shortest Job First


Job A B C Tempo de CPU 8 1 1

B C 0 1 2

A 10

Tempo mdio de espera timo: (0 + 1 + 2) / 3 = 1


36

16

Escalonamento com mltiplas filas (ML) Para sistemas com mix de processos interativos e em lote Processos so classificados segundo prioridade, e cada
classe tem sua prpria fila de prontos. Priority 1 Priority 2 Priority 3

Processos sistema Processos interativos Processos lote

Executa todos de prioridade 1, depois 2 Para evitar o problema de inanio (= alguns processos nunca
ganham a vez), pode-se definir perodos de tempo mximos para cada categoria: por exemplo, 70% para 1, 20% para 2
37

...

...

ML Princpio Geral
No ML adaptou-se SJF para processos interativos, considerando o tempo efetivo de CPU entre requisies de E/S
P1 P2

Principal problema: como descobrir qual dos processos prontos requisitar a CPU por menor perodo de tempo. Princpio adotado: Estimar a prxima fatia de tempo necessria, olhando para o passado. Exemplo: Seja T0 a estimativa de tempo de uso de CPU e T1 o tempo de CPU efetivamente utilizado da ltima vez. Ento, a estimativa para a prxima vez, T2, deveria ser ajustada. T2 = *T1 + (1-)*T0. Se > 0.5 d-se mais importncia para o comportamento mais recente, e < 0.5 maior importncia para o comportamento mais no passado

38

17

Algortmos de escalonamento
Multiplos nveis com feedback - MLF (Multilevel with feedback):
Similar ao ML, mas com uma prioridade que muda dinamicamente Todo processo comea no nvel mais alto n Cada nvel P prescreve um tempo mximo tP tP aumenta medida que P diminui geralmente:
tn = t (constante) tP = 2 tP+1
39

Filas em mltiplos nveis com feedback


Idia: Maior prioridade para processos que precisam de fatia (ou quantum) de tempo (t) menor. Se um processo repetidamente gasta todo seu quantum t, passa para prioridade mais baixa. Priority 1 1x t Queue Priority 2 Priority 3

Queue Queue

2x t 4x t

Problema: processos longos, p.ex. que precisam de 100x t


Percorrem 7 prioridades: 1, 2, 4, 8, 16, 32, 64 Grande vantagem para processos com alta frequncia de E/S
40

...

...

...

18

Algortmos de escalonamento
Rate Monotonic (RM):
Usado para processos peridicos (em sistemas de tempo real) Preemtivo Prioridade maior para menor perodo: P = d

Earliest Deadline First (EDF):


Usado para processos peridicos (tempo real) Preemtivo Prioridade maior para aquele com menor tempo at a prxima deadline:
r / d r % d d r % d P = (d r % d) nmero de perodos completados tempo executado no perodo atual tempo residual no perdodo atual

42

Comparao
Sistemas em lote
FIFO, SJF, SRT: FIFO o mais simples SJF/SRT possuem tempos mdios de turnaround (# processos/tempo) menores

Sistemas time-sharing
Tempo de resposta crtico RR puro ou MLF (c/ RR por nvel) so apropriados A escolha do quantum de tempo q determina o overhead
Quando q , RR se aproxima de FIFO Quando q 0, overhead de troca de contexto (TC) 100% Quando q >> overhead de TC, n processos executam desempenho 1/n CPU velocidade
43

19

Outras polticas de escalonamento


Escalonamento garantido cada um dos n usurios recebe aproximadamente 1/n dos ciclos de CPU Muito simples, e s feito para processos do usurio (e no de sistema) Escalonamento por sorteio (lottery scheduling) Sorteio quase aleatrio de procesos (todos ou em cada nvel de prioridade) Vantagem: simplicidade e distribuio unifore de valores sorteados geralmente garante igualdade de chances Para garantir justia, impe-se um limite no nmero de vezes que um processo pode ser sorteado em determinado perodo

54

Escalonamento no Minix 3
Algoritmo de escalonamento mul1-nvel (16 nveis). Tarefas so escalonadas sem preempo. Demais processos com Round-Robin Adaptado: se processo desbloqueado ainda 1ver parte de seu quantum, posicionado no comeo da la. Processos servidores tem quantum de tempo maior. Nveis de prioridade:
Task_Q 1. Tarefas Sistema e Relgio 2. Tarefa Tty 3. Tarefas Disco, log e mem 4. Servidores RS e PM 5. Servidor FS User_Q 6. Processos usurio 7. Idle_Q 16. IDLE

vetores rdy_head[16] e rdy_tail[16], apontam para o comeo e nal de cada la Leitura: seo 2.5.4 no livro do Tanenbaum e Woodhull

20

Threads
Thread = linha de execuo independente dentro de um mesmo processo Multiplas threads so necessrias quando >1 pedidos de E/ S devem ser tratados concorrentemente, e que precisam compartilhar algumas estruturas de dados (e.g. uma cache em um servidor de arquivos ou conexes TCP em um servidor Web;

67

Processos com 1 ou mais treads

68

21

Principais Caractersticas
Cada thread tem a sua pilha prpria, mas compartinha o mesmo espao de endereamento do processo em que foi criada; Se duas threads executam o mesmo procedimento/mtodo, cada uma ter a sua prpria cpia das variveis locais; As threads podem acessar todas os dados globais do programa, e o heap (memria alocada dinamicamente) Nesse acesso a dados globais (i.e. quando acesso inclui mais do que uma instruo de mquina), ento threads precisam ter acesso em regime de excluso mtua (p.ex. usando locks())
69

Exemplo de uso de threads

Fig.: Um processador de texto com trs threads


70

22

Um servidor web com mltiplas threads

Exemplo de uso de Threads

71

Diagrama de estados de threads


A1vo Executando new ThreadExample(); New Thread thread.start(); while () { } Runnable Dead Thread Mtodo run() retorna Blocked

Object.wait() Thread.sleep() blocking IO call wai1ng on a monitor

73

23

Gerenciamento de Threads
Ao contrrio de processos, threads compartilham a mesma regio de memria

Cada thread possui sua prpria pilha e contexto de CPU (contedo de PC, SP, registradores, PSW, etc.) Uma tread pode estar nos estados: running, blocked & ready

74

O Descritor de Thread
Para cada thread, o kernel (ou biblioteca de threads) mantm a seguinte informao, que mantida independente dos descritores de processos (PCBs) Contexto: program counter (PC) process status word (PSW) stack pointer (SP) registers state priority host_process thread_Id processID /* prxima instruo */ /* resultado da operao, ex: carry-bit */ /* pilha de execuo do thread */ /* contedo dos registradores da CPU */ /* blocked, running, ready */ /* processo hospedeiro ou kernel */ /* identificador do thread */ /* processo ao qual a thread pertence */

75

24

Gerenciamento processos vs threads

76

Tipos de Threads
Kernel-level threads (1 para 1): thread a unidade de escalonamento do ncleo A biblioteca de chamadas de sistema inclui operaes para gerenciar threads Algoritmo de escalonamento o implementado pelo ncleo Exemplos: Windows NT/XP/2000 Solaris (anterior vers. 9) Linux: LinuxThreads ou "Native Posix Thread Library (NPTL) Apple: Multiprocessing Services Unix: NetBSD, FreeBSD User-level threads (N para 1): todas as threads no processo so mapeadas em nica unidade escalonvel do ncleo O processo no aproveita o paralelismo de arquiteturas multi-core o desenvolvedor no fica limitado s polticas de escalonamento do ncleo Exemplos:
GNU Portable threads, Thread manager (Apple), Netscape Portable Runtime, State Threads, LWP (SunOS) POSIX P-threads, C-threads

25

Tipos de Threads
Threading hbrido (N para M): N theads de um processo so mapeadas em M threads do ncleo Mais difcil de implementar (pois os escalonadores do modo usurio e do modo kernel precisam se coordenar) troca de contexto pode ser muito eficiente, pois no requer sempre uma chamda de sistema Exemplos:
Microsoft Windows7, IRIX HP-UX Tru64 UNIX Solaris 8

Exemplo de 3 para 2

Mais informaes em: http://www.ibiblio.org/pub/Linux/docs/faqs/Threads-FAQ/html/ThreadLibs.html

Threads em Modo Usurio

79

Biblioteca de threads em nvel usurio: Escalonamento das threads de acordo com as necessidades do programa de aplicao. Quando uma thread requisita E/S, bloqueia todo o processo. Exemplos: POSIX P-threads, C-threads

26

Threads em modo Kernel


Kernel chaveia entre threads, independente do processo ao qual pertencem: Principais problemas: Troca de contexto entre threads precisa considerar proteo de memria (limites de processo) Cada troca de contexto requer um trap no ncleo (troca modo usurio para modo supervisor)
80

Fig.: Threads gerenciadas pelo ncleo

Implementaes Hbridas

81

Multiplexao de threads de usurio sobre threads de ncleo

27

Sincronizao entre Threads


int pthread_join( pthread_t tid, void* status ) // a thread invocadora bloqueada at que a thread tid termina
tid status A threadID pela qual deseja-se esperar; O valor de retorno da thread execurando o exit(), ser copiada para s

void main() { pthread_t tid; void *thread_main( ){ int status; int result; pthread_create(&tid,NULL,thread_main,NULL); .... . Pthread_exit((void*) result); pthread_join(tid, (void*) &status); } printf(Return value is: %d\n, status); }
82

Exemplo de Uso de Threads


#include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { printf("\n%d: Hello World!\n", threadid); /* do other things */ pthread_exit(NULL); /*not necessary*/ } int main() { pthread_t threads[NUM_THREADS]; int t; for(t=0;t < NUM_THREADS;t++) { printf("Creating thread %d\n", t); pthread_create(&threads[t], NULL, PrintHello, (void *)t); } for(t=0; t < NUM_THREADS; t++) pthread_join(threads[t],NULL); /* wait for all the threads to terminate*/ } 83

28

Algumas Implementaes Posix Threads (P-threads)


POSIX Threads = modelo de programao, coleo de interfaces que permitem criar, controlar e efetuar o escalonamento, a comunicao e a sincronizao entre threads. Threads em modo kernel: Native POSIX Threading Library (NPTL) LinuxThreads (para Linux) Win32 Phtreads

Threads em modo usurio: FSU Pthreads (SunOS 4.1.x, Solaris 2.x, SCO UNIX, FreeBSD and Linux) LPW (SunOS 3/4, mips-ultrix, 386BSD, HP-UX and Linux) PCthreads PThreads Mais informaes em: http://www.ibiblio.org/pub/Linux/docs/faqs/Threads-FAQ/html/ThreadLibs.html

84

Prs e contras
Threads implementados pelo ncleo? VANTAGENS: threads nvel usurio no permitem E/S concorrente se uma thread pede E/S, todo o processo bloqueado DESVANTAGENS: Troca de contexto menos eficiente (requer troca entre modos: usurio kernel usurio) Kernel fica mais complexo (precisa implementar tabelas de threads e de processos) Desenvolvedor de aplicao tem menos controle sobre o escalonamento das threads de seu processo
85

29

Outras questes de projeto


O que ocorre se processo com >1 threads executa um FORK?, O processo filho dever ter o mesmo nmero de threads do pai? E quando a thread do pai est esperando por E/S, e aparece interrupo sinalizando o trmino da E/S. As threads no processo pai e no filho recebem o dado? O que acontece se uma thread executa um close(fd) e arquivo fd ainda est em uso por outra thread? Em algumas bibliotecas malloc no reentrante (possui estado). Portanto, pode haver problemas se >1 thread executam esta chamada concorrentemente. O que acontece se uma thread faz chamda de sistema, e antes que seja capaz de ler varivel global errno, outra thread faz outra chamada a sistema e sobre escreve errno incial? Concluso: quando suporte a threads incluido no ncleo, a semntica de algumas chamadas de sistema precisa ser re-definida (e bibliotecas re-implementadas). 86

Comunicao Inter-processos (IPC)


Existem inmeras situaes em que processos do sistema (ou do usurio) precisam interagir para se comunicar ou sincronizar as suas aes, por exemplo, no acesso compartilhado a dados ou recursos. Comunicao Inter-processos envolve:
sincronizao de atividades troca de dados

88

30

Comunicao Inter-processos (IPC)


Exemplos: Processo A e B trocam dados atravs de um duto (pipe): processo leitor bloqueia at que o outro processo tenha escrito algum dado na pipe;

Dois ou mais processos precisam ler e escrever no mesmo arquivo; Jobs de impresso de dois processos devem ser processados de forma atmica, para garantir que as sadas (listagem) no saiam misturadas Threads compartilham uma lista (ou vetor) de elementos com escrita: atualizao requer escritas combinadas em vrios endereos de memria

89

Comunicao Inter-processos (IPC)


rocessos e threads so entidades independentes, P que podem ser executados em qualquer ordem. ordem de escalonamento imprevisvel. A Precisa-se de mecanismos para evitar problemas de inconsitncia de dados compartilhados decorrentes da execuo concorrente.

recurso compartilhado

Dado compart.

IPC entre processos

IPC entre threads

90

31

Comunicao e Sincronizao entre Processos: Duas Abordagens


1. Baseada em memria compartilhada
Assume que processos/threads conseguem escrever & ler em memria compartilhada Comunicao implcita (atravs do comparithamento) mas Sincronizao precisa ser explicita
process
send(msg)

Dados

thread

thread

2. Baseada em troca de mensagens


Comunication explicita; Sincronizao impcita

data

process
receive(msg)

Na comunicao entre processos (Inter-Process Communication - IPC), o principal problema so as condies de corrida.

91

IPC: Condio de Corrida

Dois processos querem acessar memria compartilhada ao mesmo tempo (e de forma concorrente e imprevisvel) Exemplo:
processo A l memria compartilhadain=7, e logo depois interrompido, Processo B faz o mesmo e adiciona um novo arquivo no diretrio de spool de impresso Quando A re-inicia , sobre-escreve o slot 7 com seu arquivo.
92

32

Condio de Corrida
Ocorre sempre que: existem dois ou mais processos concorrentes Cada processo precisa executar um conjunto de aes (a1,..aN) que envolvem mais de um dado/recurso compartilhado, e os dados/recursos precisam manter um estado consistente entre s; antes que complete a execuo de todo o conjunto de aes, um dos processos interrompido pelo outro Processo2: Processo1: r Dado1 w B1 A1 x x B2 A2 Recurso1 B3 A3 w Dado2
93

Condio de Corrida
Anlogo vale para troca de mensagens (entre processos clientes e processos servidores) Exemplos: 1. Para requisitar um servio, cliente precisa enviar duas mensagens (1.consulta ao estado, e 2.confirmar requisio do servio) 2. S faz sentido confirmar a requisio, se outro servio (complementar, ou anterior) j tiver sido completado.
Ready?

client

Confirm req.

server

94

33

Condio de Corrida
exemplo do dia-a-dia: ligao telefnica

95

Condio de Corrida
Problemas associados
1. Ausncia de atomicidade das aes feitas em dados compartilhados (requer excluso mtua ou bloqueio) 2. Processos tentam acessar dados compartilhados que ainda no esto prontos para serem acessados 3. Operaes simultneas (no previstas) se bloqueiam mutuamente Para permitir uma cooperao correta entre processos preciso: Estabelecer um controle na ordem de execuo Garantir que algumas execues ocorram de forma atmica
96

34

Regio Crtica
Memria/Recursos compartilhados deveriam ser acessados em regime de excluso mtua (um processo de cada vez) Regio crtica (ou Sesso crtica) = parte do programa em que esto as aes que manipulam os recursos (dados) compartilhados.
Quatro condies para garantir excluso mtua: 1. Nunca, dois ou mais processos executam simultaneamente em suas sesses crticas 2. No deve haver qualquer suposio sobre velociades e/ou nmero de processos 3. Quando executa cdigo fora de uma sesso crtica, um processo nunca bloqueia outro processo 4. Qualquer processo que entrou em sua sesso crtica, em algum momento deixa a mesma.
97

Regio Crtica
Para implementar uma regio crtica deve haver um mecanismo/protocolo para garantir a entrada e saida segura (sincronizada, coordenada) desta desta parte do cdigo.
Cdigo em um processo: Enter_region; // bloqueia se outro processoe estiver dentro A1; A2; A3; Exit_region; // sai da regio, e libera outros processos esperando

Veremos agora algumas possveis abordagens e mecanismos

98

35

Regio Crtica

Excluso mtua usando Regies Crticas


99

Possibilidades: Desabilitar interrupes: Pode ser usado em modo supervisor, mas no em modo usurio Usar uma flag lock compartilhada: se lock=0, trocar valor para 1 e processo entra RC, seno processo espera Se leitura & atribuio do lock no for atmica, ento problema permanece Alternncia regular de acesso por dois processos (PID= 0; PID= 1) um problema, se os processos alternantes requisitam o recurso com alta frequncia

Excluso Mtua com Espera ocupada (Busy Waiting)

100

36

Regio Crtica com Espera Ocupada

Soluo de Peterson: turn e vetor interested[] so variveis compartilhadas Se dois processos PID = {0,1} executam simultaneamente enter_region, o primeiro valor de turn ser sobreescrito (e o processo correspondente vai entrar), mas interested[first] vai manter o registro do intersse do segundo processo 101

Excluso Mtua com Espera Ocupada


TSL (Test-and-Set-Lock) = instruo de mquina atmica para leitura de um lock e armazenamento de um valor 0 Processos que desejam entrar RC executam TSL: se lock=0. Entram na RC, seno esperam em loop

102

37

Espera Ocupada vs. Bloqueamento


P1 P2 P1 P2

Enter()!

Enter()!

Enter()!

Enter()!

Critical region
Exit()! Exit()!

Critical region
Exit()! Exit()!

kernel
Esp.Oc: para arq. multi-core Bloqu:.o ncleo garante atomicidade
103

Espera Ocupada vs. Bloqueamento


Soluo de Peterson e TSL apresentam o problema que o loop de espera consome ciclos de processamento. Outro possvel Problema: Inverso de prioridades
Se um processo com baixa prioridade estiver na RC, demorar mais a ser escalonado (e a sair da RC), pois os processos de alta prioridade que esperam pela RC estaro em espera ocupada.

A alternativa: Primitivas que bloqueiam o processo e o fazem esperar por um sinal de outro processo: Por exemplo:
sleep :: suspende o processo at que seja acordado wakeup(PID) :: envia sinal para acordar o processo PID
104

38

Problema do Produtor e Consumidor


Sincronizao de 2 processos que compartilham um buffer (um produz itens, o outro consome itens do buffer), e que usam uma varivel compartilhada count para controlar o fluxo de controle. se count=N, produtor deve esperar, e se count=0 consumidor deve esperar, Qualquer processo deve acordar o outro quando estado do buffer permite prosseguimento do processamento
count

Produtor
buffer

Consumidor

Esse tipo de sincronizao est relacionada ao estado do recurso Sincronizao de condio

105

Problema do Produtor e Consumidor

Condio de corrida: consumidor verifica que count=0, mas antes que execute sleep, o produtor escalonado, acrescenta item e executa wakeup. Mas como consumidor ainda no executou sleep, consumidor ficar bloqueado e sistema entrar em um impasse.

106

39

Semforos
Em 1965 E.W. Dijkstra (1965) props o conceito de semforos como mecanismo bsico para sincronizao entre processos. A inspirao: sinais de trens.

107

Semforos
Trata-se de um contador que representa o nmero de processsos que podem entrar em uma Regio Crtica. A cada semforo est associado uma lista de processos bloqueados. Para um semforo s existem duas operaes atmicas (P/V ou Down/Up): Down(&s) :: se s=0 processo invocador bloqueia nesta chamada. Se s 0, decrementa s e continua execuo Up(&s) :: incrementa s, desbloqueia um dos processos bloqueados (se houver) e continua execuo p2
up

down

p1

p4

p3

p7

Processos bloqueados

Operaes Down e Up geralmente so implementadas como chamadas ao sistema operacional, e durante a sua execuo o ncleo desabilita temporariamente as interrupes (para garantir a atomicidade)
108

40

Semforos: implementao

109

Mutex: semforos binrios


Um Mutex, um semforo s que pode somente ter dois estados: Livre e Ocupado (s=1 e s=0, respectivamente) E as operaes recebem outro nome: Mutex_lock Mutex_unlock Os mutexes so usados para implementar excluso mtua simples, isto , onde apenas 1 processo pode estar na regio crtica.

110

41

Semforos: Exemplo de Uso

O Problema Produtor-Consumidor usando 1 mutex e 2 semforos

111

Monitor
Idia bsica: Usar o princpio de encapsulamento de dados tambm para a sincronisao: Vrias threads podem estar executando o mesmo monitor; A cada momento, apenas um procedimento do monitor pode estar sendo executado;

113

42

Monitor
Monitor um elemento da linguagem de programao que combina o encapsulamento de dados com o controle para acesso sincronizado Usa-se variveis de condio (com operaes wait e signal), quando o procedimento em execuo no consegue completar e precisa que outro procedimento seja completado; Em Java, tem-se algo similar: classe com mtodos synchronized

wait(c)

signal(c)

114

Monitor: Exemplo de Uso

Resolvendo o problema do produtor-consumidor com monitores


Excluso mtua dentro do monitor e controle explcito de sincronizanao garante a coerencia do estado do buffer 115 buffer tem N entradas

43

O Jantar dos Filsofos


Sincronizao para compartilhamento de recursos 2 a 2 Definio do Problema: Filsofos s tem 2 estados: comem ou pensam; Para comer, precisam de dois garfos, cada qual compartilhado com os seus vizinho; S conseguem pegar um garfo por vez; Questes globais:
Como garantir que nenhum filsofo morre de fome? Como evitar o impasse?

116

O Jantar dos Filsofos


Abordagem Tentativa 1:

Problema: Cada filsofos tenta pegar o garfo esquerdo, e se conseguir, espera pelo garfo direito? E se todos pegarem o esquerdo ao mesmo tempo? Outra abordagem: Tente pegar garfo esquerdo; Se garfo direito estiver disponvel, ok, seno devolve tambm o garfo esquerdo e espera. 117 Qual o problema agora?

44

Jantar dos Filsofos

Soluo (parte 1)

118

Jantar dos Filsofos


Soluo (parte 2): usar um vetor state[] para verificar o estado dos vizinhos e dos vivizinhos deos vizinhos.

119

45

O Problema dos Leitores e Escritores


Vrios leitores podem entrar a RC ao mesmo tempo, mas escritores precisam executar em excluso mtua.

r r w w
db

120

O Problema do Barbeiro Dorminhoco


Pode haver at 5 clientes esperando servio. e todas cadeiras S ocupadas, cliente sai Se no h clientes, barbeiro tira soneca Quando chega cliente, barbeiro acordado
121

46

O Problema do Barbeiro sem Dorminhoco

122

Sincronizaco de Barreira

Quando todos os processos precisam alcanar um mesmo estado, antes de prosseguir (exemplo: processamento paralelo em rodadas com troca de informaes) Processos progridem a taxas distintas Todos que chegam a barreira, so bloqueados para esperar pelos demais Quando o retardatrio chega, todos so desbloqueados e podem prosseguir

123

47

Sincronizao de Barreira
Processo { bool last = false; Semaphore barrier; Mutex m; Int count = N Init (&barrier, 0) down(&m) count--; if (count == 0) last= true; up(&m) if (NOT last) down (&barrier); else for (i=0; i< N; i++) up (&barrier); }
124

Semforos
Todas bibliotecas de threads (ou system calls) provm operaces para semforos:
sem_t semaphore sem_init(&semaphore, 0, some_value); sem_down(&semaphore); sem_up(&semaphore);

Em Pthreads usa-se: wait = down; post = up.

125

48

Envio de Mensagens
uma forma natural de interao entre processos Duas primitivas:
send(dest, &message) tam da mensagem fixo ou varivel receive(fonte, &message) - fonte pode ser ANY

Requer que processos se conheam mutuamente


definem um enlace de comunicao Mensagens so tipadas e possuem (header e dados)

Um enlace de comunicao pode ser


fsico (e.g., memria compartilhada, barramento, rede) lgico (e.g., propriedades lgicas)

126

Envio de Mensagens
Envio de mensagens um mecanismo de sincronizao mais genrico, porque:
Permite tambem a troca de dados independente se processos compartilham memria ou no. Qualquer soluo baseada em semforos pode ser resolvida por envio de mensagens (considere: Down receive, Up send, valor do semforo = nmero de mensagens)

Decises de projeto do mecanismo:


Com ou sem bufferizao (send assncrono ou Rendezvous) Quando a comunicao remota (pela rede) mensagens podem ser perdidas: so necessrios acks, timeouts e retransmisses Na verso Rendezvous podem ocorrer impasses
127

49

Tipos de Env. de Mensagem


Rendezvous (bloqueante)
producer consumer

Request-Reply sncrono
producer consumer

kernel

kernel

No-bloquenate
producer consumer

Request-Reply, no-bloqueante
producer consumer

kernel kernel
128

Idia: consumidor envia mensagem vazia, e produtor responde com a mensagem preenchida.

Problema do Produtor-Consumidor com envio de N Mensagens

129

50

Mecanismos de Comunicao
Sockets Remote Procedure Calls

130

Sockets
Um socket um ponto de comunicao: um objeto asbrato atravs do qual mensagens podem ser enviadas e recebidas. Concatenao de endereo IP address e porta Socket 161.25.19.8:1625 se refere a porta 1625 no host 161.25.19.8 Uma conexo consiste de um par de sockets

132

51

Chamada Remota de Procedimento


(Remote Procedure Call, Remote Method Invocation)

RPC cria uma abstrao de uma chamada de procedimento entre processos em uma rede; Stubs proxy no lado do cliente para o procedimento no lado servidor O stub cliente encontra o servidor, estabelece uma conexo e faz o marshalling dos parmetros Stub do lado servidor (skeleton) recebe a mensagem, desempacota os parmetros, faz a chamada do procedimento, empacota o resultado e envia de volta ao stub cliente.
133

RPC: Exemplo

136

52

Comunicao em Minix
O ncleo implementa os seguintes tipos de comunicao:
send(dest, &message) receive(src, &message) send_rec(src_dst, &message) notify (dest, &message) Observaes: Ncleo copia dados da rea do processo fonte (src) para o processo destinatrio (dest), usando CopyMess. Existem 6 formatos de mensagem (mess_1, mess_2,) para diferentes conjuntos de parmetros (= union com source, type e tipos de dados), definidos em kernel/proc.h Parmetros podem ser ponteiros para estruturas de dados do sistema Chamadas do sistema, interrupes de HW, do relgio, sinais, etc. todos so convertidos para envios de mensagens (p.ex. _syscall traduz cdigo de chamada em mensagem)
138

IPC no Minix
Todos os processos e tarefas de Minix interagem atravs de envio de mensagens Send, receive e send_recv implementam Rendezvous, sempre entre pares de processos Quando remetente e destinatrio executaram essas primitivas, a mensagem copiada da rea do remetente para a rea de memria do destinatrio. Os campos p_caller_q e p_q_link (nas entradas do dest e src, na tabela de processos do ncleo) apontam para a entrada dos processos dos quais se esperando uma mensagem, ou o receive, respectivamente. Notify um envio assncrono e possui prioridade mais alta. Quando o destinatrio no est bloqueado, ncleo guarda informao de pendncia, e quando o mesmo ficar bloqueado, e recria a mensagem original (BuildMess)
139

53

Filas de processos
Todos os processos esperando por enviar uma mensagem so enfileriados. Exemplo: processos 3 e 4 esperando para enviar msg ao processo 0;
P_q_link P_q_link P_q_link

140

54

Anda mungkin juga menyukai