Sistemas Operativos Cap. VI Sincronização de Threads

Tamanho: px
Começar a partir da página:

Download "Sistemas Operativos Cap. VI Sincronização de Threads"

Transcrição

1 Sistemas Operativos Cap. VI Sincronização de Threads Prof. José Rogado Universidade Lusófona 6.1

2 Sincronização de Threads Noções de Concorrência Secções Críticas Soluções Software Hardware de Sincronização Semáforos Problemas Clássicos de Sincronização Monitores Exemplos de Sincronização Transacções Atómicas 6.2

3 Concorrência Vantagens de utilizar execução concorrente Performance Economia Algumas linguagens de programação suportam programação concorrente de forma nativa (Java, C#) Existem vários paradigmas de programação concorrente Não existem modelos gerais Cada modelo requer uma abordagem específica Os suportes da concorrência a nível dos sistemas operativos são geralmente de baixo nível Implementados no hardware 6.3

4 Problemas Acessos simultâneos (concorrentes) a dados partilhados por vários fluxos de execução podem gerar inconsistências Para manter a consistência dos dados são necessários mecanismos para garantir a serialização de fluxos de execução concorrentes Processos cooperando numa mesma aplicação usando memória partilhada Threads dentro de um mesmo processo utilizando as mesmas varáveis globais Identificação das secções críticas de código Acessos concorrentes a dados comuns 6.4

5 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Analogia: Cruzamento de Tráfego 6.5

6 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Secção Crítica: exemplo shared double balance; Code for th 1 Code for th balance = balance + amount; balance = balance - amount; balance+=amount balance-=amount balance 6.6

7 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Secção Critica: problema Execution of th 1 Execution of th 2 load R1, balance load R2, amount Timer interrupt Timer interrupt add R1, R2 store R1, balance load R1, balance load R2, amount sub R1, R2 store R1, balance 6.7

8 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Secção Crítica: definição Secção Crítica (SC): Zona de código que só pode ser utilizada por uma thread de cada vez, em exclusão mútua Existe uma competição entre threads para executar a secção crítica A secção crítica pode ter forma diferente (código) em cada thread Não é facilmente detectavel por análise estatística Sem exclusão mútua, o resultado da execução das threads é indeterminado São necessários mecanismos do SO para resolver os problemas levantados pela concorrência 6.8

9 Estrutura de uma Secção Crítica do { entrada na secção crítica secção crítica Secção Crítica while (TRUE) ; saída da secção crítica resto da thread 6.9

10 Solução do Problema 1. Exclusão Mútua Se a thread T i está a executar uma secção crítica, então nenhuma outra thread pode estar a executar a mesma secção crítica (SC) em simultâneo 2. Progresso Só as threads que competem para uma secção crítica são elegíveis para entrar nessa secção, e a partir do momento em que uma thread requisita o acesso à SC este não pode ser adiado indefinidamente 3. Espera Limitada Depois de uma thread ter requisitado o acesso à SC, só um número limitado de outras threads podem entrar na SC antes deste 6.10

11 Algumas Soluções Possíveis Desactivar as interrupções Só válido em mono-processadores Kernel não preemptivo Perca de performance Utilizar soluções de Software (Peterson) Soluções complexas válidas para poucas threads Situações de bloqueio difíceis de evitar Utilizar soluções de Hardware Instruções específicas do processador Geralmente utilizadas no kernel Fornecidas às aplicações através de APIs de programação de mais alto nível Pthreads Java 6.11

12 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Desactivar as Interrupções shared double balance; Code for th 1 Code for th 2 disableinterrupts(); balance = balance + amount; enableinterrupts(); disableinterrupts(); balance = balance - amount; enableinterrupts(); As interrupções podem ficar desactivadas durante tempos demasiados longos Ao sincronizar th 1 e th 2 está-se a impedir que outras threads possam continuar a sua execução 6.12

13 lock = TRUE Interrupt Interrupt lock = FALSE Interrupt Blocked at while Utilização de uma Variável de Sincronização shared boolean lock = FALSE; shared double balance; Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Code for th 1 Code for th 2 /* Acquire the lock */ /* Acquire the lock */ while(lock) while(lock) ; ; lock = TRUE; lock = TRUE; /* Execute critical sect */ /* Execute critical sect */ balance = balance + amount; balance = balance - amount; /* Release lock */ /* Release lock */ lock = FALSE; lock = FALSE; Espera activa!! p 2 p

14 Falsa Solução!! shared boolean lock = FALSE; shared double balance; Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Code for th 1 Code for th 2 /* Acquire the lock */ /* Acquire the lock */ while(lock) ; while(lock) ; lock = TRUE; lock = TRUE; /* Execute critical sect */ /* Execute critical sect */ balance = balance + amount; balance = balance - amount; /* Release lock */ /* Release lock */ lock = FALSE; lock = FALSE; A thread th 1 testa a variável, e encontra-a com o valor FALSE Decide entrar na secção crítica, sai do while e é interrompido O A thread th 2 testa a variável e encontra-a também a FALSE Decide entrar também na secção crítica Resultado: duas threads na mesma secção crítica 6.14

15 Sincronização Hardware A maioria dos processadores modernos fornecem instruções específicas para implementar secções críticas Atómicas = não interruptíveis Dois tipos mais frequentes Test-and-set Teste de uma variável em memória e modificação do seu valor Swap Troca (swap) os valores de duas variáveis em memória 6.15

16 Instrução Test-and-Set Definição formal: boolean atomic TestAndSet (boolean *target) { boolean rv = *target; *target = TRUE; return rv: 6.16

17 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Detalhe do Test and Set TS(m): [Reg_i = memory[m]; memory[m] = TRUE;] R3 Data Register CC Register Data Register CC Register R3 FALSE =0 m FALSE m TRUE Primary Memory (a) Antes de executar TS Primary Memory (b) Depois de executar TS 6.17

18 Solução utilizando Test-and-Set Variável booleana partilhada lock, inicializada a FALSE. boolean lock = FALSE; // Critical section while (TestAndSet (&lock )) ; // wait // Enter critical section lock = FALSE; // Exit critical section 6.18

19 Solução!! Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. shared boolean lock = FALSE; shared double balance; Code for th 1 Code for th 2 // Acquire the lock // Acquire the lock while(tas(&lock)) while(tas(&lock)) ; ; // Execute critical section // Execute critical section balance = balance + amount; balance = balance - amount; // Release lock // Release lock lock = FALSE; lock = FALSE; A thread th 1 testa a variável, e encontra-a com o valor FALSE Mas a instrução TAS mudou o valor para TRUE no mesmo ciclo A thread th 2 testa a variável e encontra-a com o valor TRUE Espera para entrar na secção crítica Resultado: uma só thread de cada vez na secção crítica 6.19

20 Problema A espera à entrada da secção crítica é feita através de uma espera activa Busy wait Embora não entre na secção crítica, a thread em espera consome CPU e realiza acessos contínuos à memória O Test-and-Set implica acesso à variável de sincronização Esta solução não permite esperas longas Solução: Definição de objectos de sincronização mais complexos que garantam exclusão mútua sem esperas activas Criação de uma Hierarquia de Sincronização 6.20

21 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Semáforos 6.21

22 Definição de Semáforo A noção de Semáforo foi inicialmente proposta por Edsger Dijkstra em Um semáforo contém um valor inteiro que só pode ser modificado através de duas operações indivisíveis (atómicas): Originalmente chamadas P() e V() Proberen (testar) e Verhogen (incrementar) em holandês O nome das operações evoluíram para wait() e signal() Mais de acordo com as suas funcionalidades 6.22

23 Operações sobre um Semáforo Definição de P() - wait() e V() - signal() atomic wait (S) { while (S <= 0) S--; ; // wait atomic signal (S) { S++; atomic wait (S) { waitfor (S > 0); S = S - 1; 6.23

24 Ferramenta de Sincronização Genérica Um semáforo pode ser de contagem (counting) ou binário (mutex) Counting -> sincronização de n recursos distintos O valor inicial do semáforo é um inteiro entre 1 e N. Mutex -> exclusão mútua de secções críticas O valor do semáforo só pode ser 1 ou 0 O Mutex permite criar exclusão mútua em secções críticas Semaphore S; // initialized to 1 wait (S); Critical Section signal (S); 6.24

25 semaphore mutex = 1; thread_create(th_0, 0); thread_create(th_1, 0); Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Exemplos de Utilização th_0() { th_1() { while(true) { while(true { <compute section>; <compute section>; wait(mutex); wait(mutex); <critical section>; <critical section>; signal(mutex); signal(mutex); 6.25

26 Problema do Balanço de Conta semaphore mutex = 1; shared int balance; thread_create(th_0, 0); thread_create(th_1, 0); Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. th_0() { th_1() { /* Enter the CS */ /* Enter the CS */ wait(mutex); wait(mutex); balance += amount; balance -= amount; signal(mutex); signal(mutex);

27 Implementação de Semáforos É preciso garantir que não há mais de uma thread a executar wait() e signal() no mesmo semáforo ao mesmo tempo A implementação reduz-se ao problema da criar uma secção crítica para proteger o código internos das funções wait() e signal() Um semáforo binário pode ser implementado simplesmente com uma instrução Test-and-Set e uma variável binária O valor FALSE indica que o semáforo está livre e TRUE ocupado Mas a espera não pode ser feita desta forma! boolean s = FALSE; // Wait definition wait(s) { while(ts(s)) ; // wait // Signal Definition signal(s) { s = FALSE; 6.27

28 Espera Activa Numa implementação básica de semáforos, a operação wait() implicaria uma espera activa pelo valor positivo do semáforo Busy wait ou Spin lock atomic wait (S) { while (S <= 0) ; // busy wait S = S - 1; A thread testa o valor e caso este seja menor ou igual a zero, volta a testar, continuando a concorrer com os outras threads Está a consumir recursos quando não tem condições para se executar!! 6.28

29 Semáforos sem Espera Activa Uma solução mais correcta é pôr a thread em espera através de invocações explícitas do Scheduler wait(): retira a thread da Ready Queue no caso do semáforo estar ocupado signal(): se houver threads à espera do semáforo, transfere pelo menos um para a Ready Queue (RQ) Assim a espera num semáforo assemelha-se a qualquer outra operação de espera por recursos (p.ex.: I/O) Ao semáforo é associada uma fila de espera de threads e duas rotinas: sleep() retira o processador à thread corrente e coloca-a na em estado waiting fila de espera associada ao semáforo. wakeup() retira pelo menos uma thread da fila de espera do semáforo e volta a inseri-la em estado active na Ready Queue. A nova thread a executar depende dos critérios de scheduling do sistema 6.29

30 Implementação do Semáforo Genérico A implementação de um semáforo com contador é mais complexa e necessita de uma estrutura com três campos: struct semaphore { boolean mutex = FALSE; int value = <initial value>; struct thread *queue = NULL; ; O campo mutex permite criar e proteger a secção crítica correspondente à modificação do valor do semáforo O campo value contém o valor do semáforo (nº de recursos livres) que é negativo no caso de haver threads em espera O campo queue permite colocar a thread numa fila de espera no caso do valor do semáforo ser <= 0 Todos os campos do semáforo são modificados em exclusão mútua através de instruções Test-and-Set sobre o mutex Um semáforo binário é um semáforo genérico com valor inicial =

31 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Implementação com Fila de Espera struct semaphore { struct thread *queue; int value = <initial value>; boolean mutex = FALSE; ; shared struct semaphore s; wait(struct semaphore s){ while(ts(s.mutex)) ; // wait s.value--; if(s.value < 0) { s.mutex = FALSE; sleep(s.queue); else s.mutex = FALSE; signal(struct semaphore s){ while(ts(s.mutex)) ; // wait s.value++; if(s.value <= 0) { while(s.queue == NULL) ; // wait wakeup(s.queue); s.mutex = FALSE; 6.31

32 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Implementação com Fila de Espera struct semaphore { struct thread *queue; int value = <initial value>; boolean mutex = FALSE; ; shared struct semaphore s; O wakeup é feito pela primitiva signal() sempre s.value <= 0 ou seja, sempre que haja threads em espera Neste caso o recurso é transferido da thread que o liberta para uma das threads que está à espera em sleep() wait(struct semaphore s){ while(ts(s.mutex)) ; // wait s.value--; if(s.value < 0) { s.mutex = FALSE; sleep(s.queue); else s.mutex = FALSE; signal(struct semaphore s){ while(ts(s.mutex)) ; // wait s.value++; if(s.value <= 0) { while(s.queue == NULL) ; // wait wakeup(s.queue); s.mutex = FALSE; 6.32

33 Exemplo Th 1 Th 2 Semáforo 6.33

34 Exemplo Th 1 Th 2 Th 2 Semáforo 6.34

35 Exemplo Th 1 Th 2 Semáforo 6.35

36 Deadlock e Starvation Deadlock duas ou mais threads esperam para sempre por um evento que só uma das threads bloqueados pode produzir Se S e Q forem dois semáforos inicializados a 1, a ordem de invocação apresentada conduz a um deadlock T 0 T wait (S); wait (Q); 3 4 wait (Q); signal (Q); signal (S); Deadlock! wait (S); signal (S); signal (Q); Starvation bloqueamento indefinido: uma thread nunca mais é removida da fila de espera em que está colocada, por ser removida numa ordem diferente da que foi colocada 6.36

37 Problemas Clássicos de Sincronização São problemas que retratam de forma simplificada a essência de alguns problemas de sincronização existentes em situações reais Partilha de Dados Problema do Buffer Limitado Problema dos Leitores e Escritores Problema dos Filósofos à Mesa 6.37

38 Sincronização: Partilha de 2 Variáveis Problema: Dois processos P1 e P2 trabalham em cooperação Utilizam duas variáveis partilhadas x e y para trocar valores Os processos têm de se sincronizar para que os valores das variáveis sejam significativos Algoritmo: P1 actualiza x e continua a execução P2 deve ler o valor posto em x por P1 e actualizar y P1 deve esperar que P2 actualize y e ler o seu valor Sincronização Dois semáforos S1 e S2 associados a x e y Os semáforos servem de sincronização entre P1 e P2 Podem também criar um deadlock se forem mal geridos 6.38

39 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Partilha de 2 Variáveis (Cont.) semaphore s1 = 0; // Protects x, initially wait semaphore s2 = 0; // Protects y, initially wait shared int x, y; create_thread(proc_a, 0); create_thread(proc_b, 0); proc_a() { while(true) { <compute section A1>; update(x); /* Signal proc_b */ signal(s1); <compute section A2>; /* Wait for proc_b */ wait(s2); retrieve(y); proc_b() { while(true) { /* Wait for proc_a */ wait(s1); retrieve(x); <compute section B1>; update(y); /* Signal proc_a */ signal(s2); <compute section B2>; 6.39

40 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Problema do Buffer Limitado Empty Pool Data in Producer Consumer Data out Full Pool Um processo produz dados que outro consome Utilizam uma pool de buffers para passar dados de um para o outro O produtor pode funcionar enquanto houver buffers vazios, e espera quando estiverem todos cheios, até que um esteja vazio O consumidor pode funcionar enquanto houver buffers cheios e espera quando estiverem todos vazios, até que um esteja cheio 6.40

41 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Problema do Buffer Limitado (2) semaphore mutex = 1; semaphore full = 0; /* A general (counting) semaphore */ semaphore empty = N; /* A general (counting) semaphore */ buf_type buffer[n]; create_thread(producer); create_thread(consumer); producer() { buf_type *data_in, *buffer; while(true) { produce_item(data_in); /* Get an empty buffer */ wait(empty); wait(mutex); buffer = get(emptypool); signal(mutex); copy_buffer(data_in, buffer); wait(mutex); release(buffer, fullpool); signal(mutex); /* Signal a full buffer */ signal(full); consumer() { buf_type *data_out, *buffer; while(true) { /* Get a full buffer */ wait(full); wait(mutex); buffer = get(fullpool); signal(mutex); copy_buffer(buffer, data_out); wait(mutex); release(buffer, emptypool); signal(mutex); /* Signal an empty buffer */ signal(empty); consume_item(data_out); 6.41

42 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Problema do Buffer Limitado (2) semaphore mutex_empty = 1, mutex_full = 1; semaphore full = 0; /* A general (counting) semaphore */ semaphore empty = N; /* A general (counting) semaphore */ buf_type buffer[n]; create_thread(producer); create_thread(consumer); producer() { buf_type *data_in, *buffer; while(true) { produce_item(data_in); /* Get an empty buffer */ wait(empty); wait(mutex_empty); buffer = get(emptypool); signal(mutex_empty); copy_buffer(data_in, buffer); wait(mutex_full); release(buffer, fullpool); signal(mutex_full); /* Signal a full buffer */ signal(full); Um mutex por cada pool: melhor consumer() { buf_type *data_out, *buffer; while(true) { /* Get a full buffer */ wait(full); wait(mutex_full); buffer = get(fullpool); signal(mutex_full); copy_buffer(buffer, data_out); wait(mutex_empty); release(buffer, emptypool); signal(mutex_empty); /* Signal an empty buffer */ signal(empty); consume_item(data_out); 6.42

43 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Problema dos Leitores e Escritores Escritores Leitores 6.43

44 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Problema dos Leitores e Escritores (2) Reader Reader Reader Reader Reader Reader Reader Reader Writer Writer Writer Writer Writer Writer Writer Shared Resource Um conjunto de processos realizam acessos a um recurso comum, uns para escrever, outros para ler o seu conteúdo Ficheiro, BD, É necessário garantir a coerência dos valores 6.44

45 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Problema dos Leitores e Escritores (3) Writer Writer Writer Writer Writer Writer Writer Reader Reader Reader Reader Reader Reader Reader Reader Shared Resource N leitores podem-se executar simultaneamente 6.45

46 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Problema dos Leitores e Escritores (4) Reader Reader Reader Reader Reader Reader Reader Reader Writer Writer Writer Writer Writer Writer Shared Resource Writer Só um escritor se pode executar de cada vez Quando um escritor está activo, os leitores esperam Quando há leitores activos, o escritor espera 6.46

47 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. resourcetype *resource; int readcount = 0; semaphore mutex = 1; semaphore writeblock = 1; create_thread(reader, 0); create_thread(writer, 0); reader() { while(true) { <other computing>; wait(mutex); readcount++; if(readcount == 1) wait(writeblock); signal(mutex); read(resource); /* Critical section */ wait(mutex); readcount--; if(readcount == 0) signal(writeblock); signal(mutex); Primeira Solução O primeiro leitor bloqueia os escritores O primeiro escritor bloqueia os leitores O último leitor desbloqueia os escritores Qualquer escritor espera por todos os leitores Os leitores podem causar starvation dos escritores porque as actualizações não passam writer() { while(true) { <other computing>; /* Critical section */ wait(writeblock); write(resource); signal(writeblock); 6.47

48 Segunda Solução O algoritmo é modificado para privilegiar os escritores Os leitores continuam a poder ler sem exclusão mútua Se aparece um escritor e está um leitor activo, o escritor espera Se um leitor aparece com um escritor em espera, o leitor espera que o escritor saia Se um segundo escritor aparece, tem prioridade sobre os leitores que podem esperar indefinidamente Esta solução é complexa e necessita uma implementação cautelosa para evitar deadlocks e starvation Veremos uma solução mais robusta baseada em monitores 6.48

49 Prioridade aos Escritores Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. int readcount = 0, writecount = 0; semaphore mutex1 = 1, mutex2 = 1; semaphore readblock = 1, writeblock = 1; create_thread(reader, 0); create_thread(writer, 0); reader() { while(true) { <other computing>; wait(readblock); wait(mutex1); readcount++; if(readcount == 1) wait(writeblock); signal(mutex1); signal(readblock); read(resource); wait(mutex1); readcount--; if(readcount == 0) signal(writeblock); signal(mutex1); writer() { while(true) { <other computing>; wait(mutex2); writecount++; if(writecount == 1) wait(readblock); signal(mutex2); wait(writeblock); write(resource); signal(writeblock); wait(mutex2) writecount--; if(writecount == 0) signal(readblock); signal(mutex2); 6.49

50 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Problema dos Filósofos à Mesa Cinco filósofos estão sentados a uma mesa a comer massa: Cada um tem um talher de cada lado, que partilha com o seu vizinho do lado Cada filósofo só pode comer quando ficam livres simultaneamente os dois talheres de cada lado do seu prato Dois filósofos sentados ao lado um do outro não podem comer ao mesmo tempo. 6.50

51 Problema dos Filósofos à Mesa Para resolver o problema vamos atribuir um índice a cada filósofo, com i variando de 0 a 4 A cada garfo associa-se um semáforo designado por garfo(i) O filósofo i pode comer quando estão livres simultaneamente os semáforos garfo (i) e garfo ((i+1) % 5), ou seja: garfo(0) e garfo(1) garfo(1) e garfo(2) garfo(2) e garfo(3) garfo(3) e garfo(4) garfo(4) e garfo(0) 6.51

52 Primeira Solução Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. semaphore garfo[5] = (1,1,1,1,1); fork (filosofo, 1, 0); fork (filosofo, 1, 1); fork (filosofo, 1, 2); fork (filosofo, 1, 3); fork (filosofo, 1, 4); filosofo (int i) { while(true) { // Think // Eat wait(garfo[i]); wait(garfo[(i+1) % 5]); eat(); signal(garfo[(i+1) % 5]); signal(garfo[i]); garfo(i) filosofo(i) garfo(i+1) 6.52

53 Primeira Solução Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. semaphore garfo[5] = (1,1,1,1,1); fork (filosofo, 1, 0); fork (filosofo, 1, 1); fork (filosofo, 1, 2); fork (filosofo, 1, 3); fork (filosofo, 1, 4); filosofo (int i) { while(true) { // Think // Eat wait(garfo[i]); wait(garfo[(i+1) % 5]); eat(); signal(garfo[(i+1) % 5]); signal(garfo[i]); Se todos os filósofos acederem simultaneamente aos talheres do mesmo lado (esquerdo ou direito), cria-se uma solução de Deadlock 6.53

54 Segunda Solução Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. semaphore garfo[5] = (1,1,1,1,1); fork (filosofo, 1, 0); fork (filosofo, 1, 1); fork (filosofo, 1, 2); fork (filosofo, 1, 3); fork (filosofo, 1, 4); filosofo (int i) { while(true) { // Think // Eat j = i % 2; wait(garfo[(i+j) % 5]); wait(garfo[(i+1-j) % 5]); eat(); signal(garfo[(i+1-j) % 5]); signal(garfo[[(i+j) % 5]); Na primeira escolha, os filósofos de índice par acedem ao garfo esquerdo, e os de índice ímpar, o garfo direito Na segunda escolha inverte-se a ordem 6.54

55 Segunda Solução Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. semaphore garfo[5] = (1,1,1,1,1); fork (filosofo, 1, 0); fork (filosofo, 1, 1); fork (filosofo, 1, 2); fork (filosofo, 1, 3); fork (filosofo, 1, 4); garfo(3) filosofo(2) garfo(2) filosofo (int i) { filosofo(3) while(true) { // Think // Eat j = i % 2; garfo(4) wait(garfo[(i+j) % 5]); wait(garfo[(i+1-j) % 5]); eat(); signal(garfo[(i+1-j) % 5]); signal(garfo[[(i+j) % 5]); 6.55 filosofo(4) filosofo(1) garfo(0) Na primeira escolha, os filósofos de índice par acedem ao garfo esquerdo, e os de índice ímpar, o garfo direito Na segunda escolha inverte-se a ordem garfo(1) filosofo(0)

56 Problemas de Utilização dos Semáforos As operações sobre os semáforos têm de ser usadas correctamente Se há troca de ordem, pode haver vários processos na secção crítica wait (mutex) // Secção Crítica wait (mutex) Se houver troca de funções, gera-se um deadlock signal (mutex) // Secção Crítica wait (mutex) Se houver omissão de uma das funções, um dos dois casos anteriores pode acontecer É relativamente frequente em programas complexos acontecerem situações deste tipo que não são fáceis de detectar Para evitar estas situações, algumas linguagens utilizam ferramentas de sincronização mais fáceis de utilizar 6.56

57 Monitores Uma extensão do conceito de semáforo de mais alto nível que fornece uma interface eficaz e fácil de utilizar para sincronização de threads ou processos Conceito de programação Orientada aos Objectos Embebida nas linguagens Concurrent Pascal, Java e C# Gerida pelo compilador O monitor encapsula (esconde) a sua implementação Só são acessíveis métodos e dados públicos Os métodos e dados privados são só utilizados pelo monitor O monitor garante exclusão mútua dos processos que o executam: monitor mon { private: semaphore mutex = 1; // Implícito... public: method_i( ) { wait(mutex); // Implícito <code for proc_i>; signal(mutex); // Implícito ; ; 6.57

58 Exemplo: Shared Balance O problema da partilha da variável balance é resolvido através da declaração de um monitor contendo: Uma variável privada balance Dois métodos públicos que são executados no interior do monitor com exclusão mútua implícita monitor sharedbalance { private: double balance; public: credit(double amount){ balance += amount; debit(double amount){ balance -= amount;

59 Balanço de Conta c/ Monitores monitor sharedbalance; thread_create(deposit); thread_create(withdraw); Os métodos deposit() e withdraw() são executados no interior do monitor, que garante a exclusão mútua da secção crítica através de uma variável de sincronização implícita deposit() {... sharedbalance.credit(amount);... withdraw() {... sharedbalance.debit(amount);

60 Representação de um Monitor 6.60

61 Variáveis de Condição Os monitores fornecem também mecanismos que permitem às threads esperar que se verifiquem condições específicas Designam-se por Variáveis de Condição Geralmente, são definidas duas operações sobre uma VC x condition_wait (x) permite a uma thread que invoca esta operação ser suspensa até a condição se verificar condition_signal (x) permite a uma thread sinalizar o facto de que a condição se verificou, e activar uma das threads que estiverem em espera Não é geralmente garantido que a thread activada seja a que mais tempo tenha esperado A forma como as threads são reactivadas por condition_signal() depende da implementação do monitor e do algoritmo de scheduling 6.61

62 Um Monitor com Variáveis de Condição 6.62

63 Estrutura de um Monitor Variáveis de Sincronização do Monitor Um mutex para exclusão mútua no monitor, inicializado a 1 Um mutex de sinalização no monitor, inicializado a 0 Um contador de processos em espera semaphore mutex = 1; // monitor mutex, initially = 1 semaphore other = 0; // signaling mutex, initially = 0 int others_waiting = 0; // number waiting for signaling Variáveis de Condição do Monitor: para cada condição é introduzida uma variável com a seguinte estrutura Um semáforo de sinalização inicializado a 0 Um contador de processos em espera na variável struct condvar x { semaphore sem; // initially = 0 int count = 0; // waiting on x ; 6.63

64 Source: Operating Systems, Gary Nutt Copyright 2004 Pearson Education, Inc. Readers & Writers com Monitores monitor readerwriter { int numberofreaders = 0; boolean busy = FALSE; condition oktoread, oktowrite; public: startread() { if(busy (oktowrite.queue()) oktoread.wait(); numberofreaders++; oktoread.signal(); finishread() { numberofreaders--; if(numberofreaders == 0) oktowrite.signal(); startwrite() { if((numberofreaders!= 0) busy) oktowrite.wait(); busy = TRUE; finishwrite() { busy = FALSE; if(oktoread.queue()) oktoread.signal() else oktowrite.signal() 6.66

65 Hierarquia de Sincronização Os vários objectos que descrevemos formam uma hierarquia de sincronização Baseada em suporte hardware Cada nível utiliza as funcionalidades do anterior e estende-a com capacidades adicionais Permite garantir a vários níveis de implementação a correcção de aplicações concorrentes Monitor Semáforo Mutex Spin-lock Test -and-set 6.67

66 Exemplos de Sincronização Windows POSIX Linux 6.68

67 Sincronização em Windows São fornecidos dois mecanismos para exclusão mútua Mutexes Critical Sections Os mutexes são geridos pelo sistema operativo através das primitivas HANDLE CreateMutex(attributes, Owner, Name) WaitforSingleObject(HANDLE, timeout) ReleaseMutex(HANDLE) As CriticalSections secções críticas permitem criar zonas de código protegido sem ter explicitamente de manipular mutexes InitializeCriticalSection( ) EnterCriticalSection( ) LeaveCriticalSection( ) 6.69

68 Sincronização POSIX A sincronização POSIX permite gerir exclusão mútua em ambientes multiprogramados utilizando a API das pthreads A API é independente do Sistema Operativo e fornece: mutex locks condition variables Extensões não dependentes do SO fornecem também: read-write locks spin locks 6.70

69 API POSIX para Sincronização Gestão de Mutexes pthread_mutex_init (mutex,attr) pthread_mutex_lock (mutex) pthread_mutex_trylock (mutex) pthread_mutex_unlock (mutex) Gestão de Condition Variables pthread_cond_init (condition,attr) pthread_cond_wait (condition,mutex) pthread_cond_signal (condition) pthread_cond_broadcast (condition) Utilização pthread_cond_wait deve ser invocada com um mutex locked, a função liberta-o implicitamente pthread_cond_signal deve ser invocada com um mutex locked que é necessário depois libertar para que uma thread que está em espera possa ser reactivada 6.71

70 Sincronização no Kernel Linux Utiliza spinlocks baseados em TAS em ambiente multiprocessador O kernel é preemptível desde a versão 2.6, mas quando um processo kernel obtém um lock, esta possibilidade é suspensa através da manutenção de um contador do número de preempções em curso (preempt_count) por processo kernel Quando as secções críticas de código são extensas, utilizam-se semáforos System call futex() Fast Userspace mutexes permite a implementação de mutex e semáforos em modo utilizador com recurso mínimo a funções do kernel

71 Exemplo 1: API POSIX Uma thread produtora recebe dados de um canal de I/O Para os armazenar, retira um buffer da lista dos buffers vazios, preenche-o com os dados recebidos e insere-o na lista dos buffers cheios Uma outra thread consumidora retira um buffer da lista dos buffers cheios, envia os dados para tratamento e volta a colocar esse buffer na lista dos buffers vazios A thread produtora espera que haja buffers vazios A thread consumidora espera que haja buffers cheios Inicialmente os buffers estão todos vazios Ver ficheiro

72 Exemplo 2: API POSIX Uma thread insere processos em N filas de espera ordenando-os por prioridade Uma outra thread retira-os por ordem de prioridade decrescente Duas actividades concorrentes que criam uma secção crítica ao poderem modificar simultaneamente as filas de espera Solução: utilização de um mutex para proteger a secção crítica Por outro lado, a remoção de processos deve ser comandada por um evento (sinal) que activa a thread Solução: utilização de uma variável de condição na qual a thread de selecção vai esperar Ver ficheiro

73 Fim do Capítulo

Sistemas Operativos 6ª parte - Sincronização de Processos

Sistemas Operativos 6ª parte - Sincronização de Processos Sistemas Operativos 6ª parte - Sincronização de Processos Prof. José Rogado jrogado@ulusofona.pt Prof. Pedro Gama pedrogama@gmail.com Universidade Lusófona Adaptação LIG e Notas por Dr. Adriano Couto 1

Leia mais

Sistemas Operacionais: Sincronização entre processos

Sistemas Operacionais: Sincronização entre processos Sistemas Operacionais: Sincronização entre processos Sincronização Programa concorrente Executado por diversos processos Acesso concorrente a dados Paralelismo real x Paralelismo aparente Multiprocessadores:

Leia mais

Sistemas Distribuídos Aula 5

Sistemas Distribuídos Aula 5 Sistemas Distribuídos Aula 5 Aula passada Sincronização Race condition Região crítica Locks Algoritmo de Peterson Aula de hoje Atomicidade test-and-set Locks revisitado Semáforos Dois problemas Atomicidade

Leia mais

Comunicação entre Processos

Comunicação entre Processos Programação Paralela e Distribuída Ordenação e Sincronização Prof. Msc. Marcelo Iury de Sousa Oliveira marceloiury@gmail.com http://sites.google.com/site/marceloiury/ Comunicação entre Processos Processos

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Processos - Parte 2 Prof. Dr. Fábio Rodrigues de la Rocha (Processos - Parte 2) 1 / 33 (Processos - Parte 2) 2 / 33 (Processos - Parte 2) 3 / 33 (Processos - Parte 2) 4 / 33 (Processos

Leia mais

LabSO Gerência de Processos. Retrospectiva da aula passada... Na aula passada... Na aula passada...

LabSO Gerência de Processos. Retrospectiva da aula passada... Na aula passada... Na aula passada... LabSO Gerência de Processos Retrospectiva da aula passada... AULA 4 Flávia Maristela (flavia@flaviamaristela.com) Romildo Martins (romildo@romildo.net) Na aula passada... Processos Estados do processo

Leia mais

Capítulo 6: Sincronização de Processos. Operating System Concepts 8th Edition

Capítulo 6: Sincronização de Processos. Operating System Concepts 8th Edition Capítulo 6: Sincronização de Processos Módulo 6: Sincronização de Processos Fundamentos O problema das Regiões Críticas Solução de Peterson Hardware de Sincronização Travas com Mutex Semáforos Problemas

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 5: Exclusão Mútua Diego Passos Última Aula Programação Concorrente Programas compostos por mais de um processo ou thread. Pode trazer benefícios: Simplificar o

Leia mais

Sistemas Operativos: Concorrência (Parte 2)

Sistemas Operativos: Concorrência (Parte 2) Sistemas Operativos: Concorrência (Parte 2) Pedro F. Souto (pfs@fe.up.pt) April 1, 2014 Sumário Monitores Variáveis de Condição Semáforos Leitura Adicional Sumário Monitores Variáveis de Condição Semáforos

Leia mais

Sincronização e comunicação entre entidades de processamento. Mutex Volnys Bernal 1. Tópicos. Exclusão Mútua (mutex) Exclusão Mútua (Mutex)

Sincronização e comunicação entre entidades de processamento. Mutex Volnys Bernal 1. Tópicos. Exclusão Mútua (mutex) Exclusão Mútua (Mutex) 2004-2013 Volnys Bernal 1 2004-2013 Volnys Bernal 2 Tópicos Exclusão Mútua (mutex) Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Exclusão Mútua () Objetivo, utilidade, requisitos

Leia mais

Exclusão Mútua (mutex)

Exclusão Mútua (mutex) 2004-2017 Volnys Bernal 1 Exclusão Mútua (mutex) Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos Escola Politécnica da USP 2004-2017 Volnys Bernal 2 Tópicos Exclusão Mútua (Mutex)

Leia mais

Sistemas Operacionais Concorrência. Carlos Ferraz Jorge Cavalcanti Fonsêca

Sistemas Operacionais Concorrência. Carlos Ferraz Jorge Cavalcanti Fonsêca Sistemas Operacionais Concorrência Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br) POSIX Threads... ... POSIX Threads (2) Exercício } Executando n vezes e verificando a ordem

Leia mais

Sistemas de Computação. Threads e Sincronização

Sistemas de Computação. Threads e Sincronização Threads e Sincronização Processos concorrentes Os processos em execução sob um sistema operacional podem ser: independentes (não há interferência entre eles) cooperativos (há interferência entre eles)

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Processos Exclusão Mútua Mecanismos para se Obter Exclusão MútuaM Mecanismos de Hardware: Inibição de Interrupções Instrução TSL (Test and Set Lock) Mecanismos de Software: Com Espera

Leia mais

Sistemas Operativos: Concorrência

Sistemas Operativos: Concorrência Sistemas Operativos: Concorrência Pedro F. Souto (pfs@fe.up.pt) March 16, 2012 Sumário Race Conditions e Secções Críticas Exclusão Mútua via Programação Exclusão Mútua via Inibição de Interrupções. Locks

Leia mais

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 6. Primitivas de Sincronização

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 6. Primitivas de Sincronização Aula 6 Primitivas de Sincronização Primitivas de Sincronização Lock / Unlock Sleep / Wakeup Semáforo Monitores Mensagens Sincronização no Linux Lock / Unlock Funcionam como as primitivas vistas até agora

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto

Sistemas Operacionais. Prof. André Y. Kusumoto Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Fundamentos Paradigma do produtor-consumidor Sincronização de Processos Produtor while (count == BUFFER_SIZE) ; //no-op //adiciona

Leia mais

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação SISTEMAS OPERACIONAIS Aula 7 Regiane Kawasaki kawasaki@ufpa.br Slides adaptados da Profa. Sarita Mazzini Bruschi

Leia mais

Aula 7. Problemas Clássicos de Sincronização. 1.1 O Jantar dos Filósofos. 1.2 Leitores e Escritores. 1.3 O Barbeiro Dorminhoco

Aula 7. Problemas Clássicos de Sincronização. 1.1 O Jantar dos Filósofos. 1.2 Leitores e Escritores. 1.3 O Barbeiro Dorminhoco Aula 7 Problemas Clássicos de Sincronização 1.1 O Jantar dos Filósofos 1.2 Leitores e Escritores 1.3 O Barbeiro Dorminhoco Problemas Clássicos de Sincronização Porque estudá-los: Arquétipos: Representação

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Processos Semáforos Semáforos Mecanismo de sincronização que não requer espera ocupada Dijkstra propôs usar uma variável inteira para contar o n o de WAKEUPs para uso futuro Menos

Leia mais

Sistemas Distribuídos Aula 7

Sistemas Distribuídos Aula 7 Sistemas Distribuídos Aula 7 Aula passada Atomicidade Test-and-set Locks revisitado Semáforos Dois problemas Aula de hoje Limitação dos semáforos Monitores Variáveis de condição Semântica do signal Sincronização

Leia mais

Sincronização de Processos (2)

Sincronização de Processos (2) Sincronização de Processos (2) Tipos de Soluções (cont.) Soluções de Hardware Inibição de interrupções Instrução TSL (apresenta busy wait) Soluções de software com busy wait Variável de bloqueio Alternância

Leia mais

Concorrência. Condições de Corrida. 5a. Tentativa. Dificuldades: Sincronização de Processos (2) Aula 11 Profa. Patrícia Dockhorn Costa

Concorrência. Condições de Corrida. 5a. Tentativa. Dificuldades: Sincronização de Processos (2) Aula 11 Profa. Patrícia Dockhorn Costa Concorrência Dificuldades: Sincronização de Processos (2) Aula 11 Profa. Patrícia Dockhorn Costa Compartilhamento de recursos globais. Gerência de alocação de recursos. Localização de erros de programação

Leia mais

Escalonamento. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 28

Escalonamento. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 28 Escalonamento Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Abril, 2016 1 / 28 Sumário 1 Multiprogramação 2 Escalonamento 3 Concorrência 2 / 28 Multiprogramação

Leia mais

Sistemas Operativos. Objetivo. Entrega do Questionário. Exercício 1. Exercício 2. Exercício 3. Exercício 4. Grupo 1 Introdução

Sistemas Operativos. Objetivo. Entrega do Questionário. Exercício 1. Exercício 2. Exercício 3. Exercício 4. Grupo 1 Introdução Sistemas Operativos Objetivo O objetivo deste questionário é levá-lo a rever os conceitos básicos dos sistemas operativos, bem como os algoritmos de scheduling e mecanismos de sincronização estudados.

Leia mais

Mecanismos de Sincronização com Variáveis Compartilhadas

Mecanismos de Sincronização com Variáveis Compartilhadas Mecanismos de Sincronização com Variáveis Compartilhadas Rômulo Silva de Oliveira Edição do Autor, 2018 www.romulosilvadeoliveira.eng.br/livrotemporeal Outubro/2018 1 Introdução Problema da seção crítica

Leia mais

Threads e Sincronização no Linux

Threads e Sincronização no Linux Threads e Sincronização no Linux MCTA026-13 - Sistemas Operacionais Emilio Francesquini e Fernando Teubl Ferreira e.francesquini@ufabc.edu.br / fernando.teubl@ufabc.edu.br 2019.Q1 Centro de Matemática,

Leia mais

Monitores. Paulo Sérgio Almeida. Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho

Monitores. Paulo Sérgio Almeida. Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho Monitores Paulo Sérgio Almeida Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho c 2006 2008 Paulo Sérgio Almeida Monitores 1 Problemas com semáforos Semáforo é uma primitiva

Leia mais

Programação concorrente (processos e threads)

Programação concorrente (processos e threads) Programação concorrente (processos e threads) Programação concorrente Por que precisamos dela? Para utilizar o processador completamente Paralelismo entre CPU e dispositivos de I/O Para modelar o paralelismo

Leia mais

Sincronização de Processos (2)

Sincronização de Processos (2) Sincronização de Processos (2) Tipos de Soluções (cont.) Soluções de Hardware Inibição de interrupções Instrução TSL (apresenta busy wait) Soluções de software com busy wait Variável de bloqueio Alternância

Leia mais

Comunicação entre processos (2)

Comunicação entre processos (2) Comunicação entre processos (2) Pedro Cruz EEL770 Sistemas Operacionais Lembretes Proposta de trabalho Enviar para cruz@gta.ufrj.br Prazo: dia 02 de abril 2 Aula passada Comunicação entre processos é útil

Leia mais

Unidade 3. Controle de Concorrência. Primitivas de Programação Concorrente Clássica

Unidade 3. Controle de Concorrência. Primitivas de Programação Concorrente Clássica Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica Programação Concorrente A abstração de programação concorrente é o estudo de sequênciasde execução intercaladas, de instruções

Leia mais

Problema do Produtor -Consumidor. Solução por semáforos

Problema do Produtor -Consumidor. Solução por semáforos Problema do Produtor -Consumidor Solução por semáforos Autoria Autores alunos da disciplina SO II Local Instituto de Informática UFRGS Versão v7 agosto de 2008 por C. Geyer Visão geral do assunto...2 Conceito...3

Leia mais

Introdução Aplicações Concorrentes Especificação de Concorrência em Programas Problemas de Compartilhamento de Recursos Exclusão Mútua Sincronização

Introdução Aplicações Concorrentes Especificação de Concorrência em Programas Problemas de Compartilhamento de Recursos Exclusão Mútua Sincronização Sincronização e Comunicação entre Processos Introdução Aplicações Concorrentes Especificação de Concorrência em Programas Problemas de Compartilhamento de Recursos Exclusão Mútua Sincronização Condicional

Leia mais

Unidade III Gerência de Processos

Unidade III Gerência de Processos Sistemas Operacionais Unidade III Gerência de Processos http://www.lncc.br/~lrodrigo Professor: Luis Rodrigo lrodrigo@lncc.br Página: 1 de 34 Unidade III: Gerência de Processos Conceito de Processo Materialização

Leia mais

Só podem ser executados por uma Thread que detenha o lock do objecto

Só podem ser executados por uma Thread que detenha o lock do objecto Transferência de controle entre Threads Os métodos wait(), notify() notifyall(), da classe Object, Permitem a transferência de controlo de uma Thread para outra. Só podem ser executados por uma Thread

Leia mais

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS C SISTEMAS OPERATIVOS

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS C SISTEMAS OPERATIVOS UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS C1203 - SISTEMAS OPERATIVOS 2º Semestre 2005/2006 27/7/2007 Resolução 1. Identifique três situações em que ocorra uma transição do modo de execução utilizador

Leia mais

Sistemas Operativos 4ª parte - Threads

Sistemas Operativos 4ª parte - Threads Sistemas Operativos 4ª parte - Threads Prof. José Rogado jrogado@ulusofona.pt Prof. Pedro Gama pedrogama@gmail.com Universidade Lusófona Adaptação LIG e Notas por Dr. Adriano Couto Threads Objectivos do

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 6: Monitores, Troca de Mensagens e Deadlock Diego Passos Última Aulas Mecanismos de Exclusão Mútua Operações atômicas. Protocolos de controle de acesso. Spin-locks.

Leia mais

Sistemas Operacionais

Sistemas Operacionais Introdução Sistemas Operacionais Sincronização de processos Aula 07 Em sistemas multiprogramados há interação entre processos para comunicação, que pode ser feita via compartilhamento de memória/arquivos

Leia mais

Monitores. Programação Concorrente September 11, 2012

Monitores. Programação Concorrente September 11, 2012 September 11, 2012 mecanismo de sincronização clássico Brinch-Hansen e Hoare, circa 1974 nível de proteção diferente do apresentado em outras propostas o que são? construção sintática: parte da linguagem

Leia mais

Sistemas Operativos I

Sistemas Operativos I Sincronização de Processos Luis Lino Ferreira / Maria João Viamonte Fevereiro de 2006 Sumário Problemas inerentes à gestão de recursos Inconsistência de dados versus sincronização de processos O problema

Leia mais

SO: Sincronização. Sistemas Operacionais Flavio Figueiredo (http://flaviovdf.github.io)

SO: Sincronização. Sistemas Operacionais Flavio Figueiredo (http://flaviovdf.github.io) SO: Sincronização Sistemas Operacionais 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Mapa da Disciplina Fim da Seção de Processos SOs geralmente são lecionados em três grandes temas Processos

Leia mais

Execução Concorrente

Execução Concorrente Sincronização Parte I Primitivas de Sincronização Sistemas Operativos 2015 / 2016 Execução Concorrente struct { int saldo; /* outras variáveis,ex. nome do titular, etc. */ conta_t; int levantar_dinheiro

Leia mais

SSC0640 Sistemas Operacionais I

SSC0640 Sistemas Operacionais I SSC0640 Sistemas Operacionais I 8ª Aula Comunicação e Sincronismo de Processos Profa. Sarita Mazzini Bruschi sarita@icmc.usp.br Slides adaptados de Marcos José Santana / Regina H. C. Santana / Luciana

Leia mais

Sincronização e Comunicação entre Processos. Adão de Melo Neto

Sincronização e Comunicação entre Processos. Adão de Melo Neto Sincronização e Comunicação entre Processos Adão de Melo Neto 1 INTRODUÇÃO Em um sistema multitarefa os processos alternam sua execução segundo critérios de escalonamento estabelecidos pelo sistema operacional.

Leia mais

Monitores. Setembro de Monitores

Monitores. Setembro de Monitores Setembro de 2010 mecanismo de sincronização clássico referência influência de conceitos de programação estruturada C. A. R. Hoare, Monitors: an operating system structuring concept, Communications of the

Leia mais

Sistemas Operacionais

Sistemas Operacionais Introdução Inst tituto de Info ormátic ca - UF FRGS Sistemas Operacionais i Introdução à Programação Concorrente Aula 05 Em sistemas multiprogramados há interação entre processos para comunicação, que

Leia mais

Programação Concorrente Locks

Programação Concorrente Locks Programação Concorrente Prof. Eduardo Alchieri Variáveis do tipo trava (lock) Lock: É um mecanismo de sincronização de processos/threads, em que processos/threads devem ser programados de modo que seus

Leia mais

Sistemas Operacionais. Comunicação entre processos

Sistemas Operacionais. Comunicação entre processos Sistemas Operacionais Comunicação entre processos Comunicação entre Processos Os SO s hoje são multi-tarefa Alguns processos precisam cooperar para cumprir seus objetivos Sugestões de implementação? Exemplos

Leia mais

Comunicação entre processos

Comunicação entre processos Universidade Federal do Acre Centro de Ciências Exatas e Tecnológicas Bacharelado em Sistemas de Informação Comunicação entre processos Macilon Araújo Costa Neto macilon@ufac.br Capítulo 2 do livro do

Leia mais

Teste de Sistemas de Operação 30 de Maio de 2009

Teste de Sistemas de Operação 30 de Maio de 2009 Teste de Sistemas de Operação 30 de Maio de 2009 Duração: 30 min B NOME: Indique apenas uma das alternativas. Respostas erradas descontam na nota. 1. Um pedido de entrada e saída sem buffering: (letra

Leia mais

Sincronização e Comunicação

Sincronização e Comunicação Sincronização e Comunicação Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Maio, 2017 1 / 28 Sumário 1 Concorrência 2 Sistemas Multiprogramáveis Troca de mensagens

Leia mais

Sistemas Operacionais

Sistemas Operacionais Introdução Sistemas Operacionais Sincronização de processos Aula 08 Em sistemas multiprogramados há interação entre processos para comunicação, que pode ser feita via compartilhamento de memória/arquivos

Leia mais

Tipos de Soluções (cont.)

Tipos de Soluções (cont.) Sincronização de Processos (2) Tipos de Soluções (cont.) Soluções de Hardware Inibição de interrupções Instrução TSL (apresenta busy wait) Soluções de software com busy wait Variável de bloqueio Alternância

Leia mais

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I SEM/12 PROVA I. Tempo de Prova: 100 minutos / Escore Máximo: 300 pontos

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I SEM/12 PROVA I. Tempo de Prova: 100 minutos / Escore Máximo: 300 pontos DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I - 1 0 SEM/12 PROVA I Tempo de Prova: 100 minutos / Escore Máximo: 300 pontos Aluno: G A B A R I T O Escore: Responda às perguntas de forma

Leia mais

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período Redes de Computadores INF201 - Fundamentos de Sistemas Operacionais - 2º Período PARTE II: PROCESSOS E THREADS SUMÁRIO 7. SINCRONIZAÇÃO E COMUNICAÇÃO ENTRE PROCESSOS: 7.1 Introdução; 7.2 Aplicações Concorrentes;

Leia mais

Sistemas Operativos Cap. IV Threads. Prof. José Rogado Universidade Lusófona

Sistemas Operativos Cap. IV Threads. Prof. José Rogado Universidade Lusófona Sistemas Operativos Cap. IV Threads Prof. José Rogado jose.rogado@ulusofona.pt Universidade Lusófona Threads Necessidades e Conceito Modelos de Multithreading Problemas de Threading As Pthreads Windows

Leia mais

Sincronização e Comunicação entre Processos. Adão de Melo Neto

Sincronização e Comunicação entre Processos. Adão de Melo Neto Sincronização e Comunicação entre Processos Adão de Melo Neto 1 MOTIVAÇÃO 2 INTRODUÇÃO Em um sistema multiprogramado (concorrente) os processos alternam sua execução (ou seja, são executados alternadamente

Leia mais

Sincronização e Comunicação entre Processos. Sincronização e Comunicação Volnys Bernal 1. Agenda

Sincronização e Comunicação entre Processos. Sincronização e Comunicação Volnys Bernal 1. Agenda entre Processos 004-006 Volnys Bernal 004-006 Volnys Bernal Agenda entre Processos Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Região Crítica Classificação dos mecanismos de sincronização

Leia mais

Sincronização e comunicação entre processos

Sincronização e comunicação entre processos Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Sincronização e comunicação entre processos Em um sistema multiprogramável com

Leia mais

UFRJ IM - DCC. Sistemas Operacionais I. Unidade II Concorrência

UFRJ IM - DCC. Sistemas Operacionais I. Unidade II Concorrência UFRJ IM - DCC Sistemas Operacionais I Unidade II 19/2/2007 Prof Antonio Carlos Gay Thomé Prof Aux Simone Markenson Pech 1 Organização da Unidade Processos Threads Princípios da ncia Exclusão o Mútua M

Leia mais

Sistemas Operacionais. Condição de corrida e Região crítica

Sistemas Operacionais. Condição de corrida e Região crítica Sistemas Operacionais Condição de corrida e Região crítica Região Crítica Parte do código que acessa a área compartilhada Condição em que dois processos lêem e escrevem um dado compartilhado e o resultado

Leia mais

Sincronização. Cooperação entre Processos

Sincronização. Cooperação entre Processos Sincronização Parte II Programação Concorrente Cooperação entre Processos Vários processos executam em conjunto uma ou mais tarefas, nas quais Competem por recursos Indicam uns aos outros a: Ausência/existência

Leia mais

Concorrência entre Processos

Concorrência entre Processos Concorrência entre Processos Prof. Dr. André Carvalho andre@icomp.ufam.edu.br Agenda n Concorrência entre Processos Condições de disputa, seções críticas n Soluções para Seções Críticas n Problemas clássicos

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto

Sistemas Operacionais. Prof. André Y. Kusumoto Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Semáforos Sincronização de Processos Um semáforo é uma estrutura de dados que consiste em um número inteiro e em uma fila Seu

Leia mais

Trincos Lógicos: Implementações. Trincos lógicos: Propriedades

Trincos Lógicos: Implementações. Trincos lógicos: Propriedades Trincos Lógicos: Implementações Algorítmicas Hardware Sistema Operativo Trincos lógicos: Propriedades Exclusão mútua Progresso (liveness) Ausência de interblocagem (deadlock) Ausência de míngua (starvation)

Leia mais

Programação Concorrente e Paralela August 28, 2013

Programação Concorrente e Paralela August 28, 2013 August 28, 2013 Notação Andrews: atomicidade e await para definir ações atômicas, Andrews introduz a notação e para especificar sincronização, Andrews introduz a notação: await(b)s; que significa que S

Leia mais

Programação concorrente em Java

Programação concorrente em Java Programação concorrente em Java Paulo Sérgio Almeida Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho 2007/2008 c 2000 2007 Paulo Sérgio Almeida Programação concorrente

Leia mais

1 a Questão Unidade I e II (45 pontos)

1 a Questão Unidade I e II (45 pontos) DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO CURSO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I - 1 0 SEM/08 Teste 1 Unidades I e II Total: 200 pontos Aluno: Escore: 1 a Questão Unidade I e II (45 pontos)

Leia mais

Sistemas Operacionais II

Sistemas Operacionais II O problema da seção crítica... Instituto de Informátic ca - UFRGS Sistemas Operacionais II Exclusão mútua (implementação) Aula 04 Seção crítica Porção de código que não pode ser executado por dois ou mais

Leia mais

Sistemas Operacionais II

Sistemas Operacionais II Mecanismos de sincronização de processos Instituto de Informátic ca - UFRGS Sistemas Operacionais II Da teoria à prática... (Processos, threads, mutex, semáforos, variáveis de condição e monitores) Aula

Leia mais

Sincronização. Objectivos da aula de hoje

Sincronização. Objectivos da aula de hoje Sincronização Parte II Programação Concorrente Objectivos da aula de hoje Como resolver problemas mais complexos de sincronização Produtores-consumidores, leitores-escritores, jantar dos filósofos Como

Leia mais

Sistemas Operacionais

Sistemas Operacionais Introdução 2 a edição Revisão: Fev/2003 Sistemas Operacionais Programação concorrente Capítulo 3 Programa executado por apenas um processo é dito de programa seqüêncial Existe apenas um fluxo de controle

Leia mais

Sistemas Operativos. Processos cooperantes e processos independentes

Sistemas Operativos. Processos cooperantes e processos independentes Processos (complementos) Processos cooperantes e processos independentes! Os processos que se executam de forma concorrente podem ser: Cooperantes podem afectar ou ser afectados pela execução de outros

Leia mais

Paradigmas de Computação Paralela (UCE Computação Paralela Distribuída)

Paradigmas de Computação Paralela (UCE Computação Paralela Distribuída) Paradigmas de Computação Paralela (UCE Computação Paralela Distribuída) Modelos de consistência de memória João Luís Ferreira Sobral jls@... 29 Março 2011 Resumo Revisão: modelos de threads Qual a necessidade

Leia mais

MC504 Sistemas Operacionais MC514 Sistemas Operacionais: Teoria e

MC504 Sistemas Operacionais MC514 Sistemas Operacionais: Teoria e Instituto de Computação Universidade Estadual de Campinas Nome: MC504 Sistemas Operacionais MC514 Sistemas Operacionais: Teoria e Prática Profa. Islene Calciolari Garcia 18 de setembro de 2013 Questão

Leia mais

Tipos de Soluções (cont.)

Tipos de Soluções (cont.) Tipos de Soluções (cont.) Sincronização de Processos: Semáforos Aula 12 Profa. Patrícia Dockhorn Costa Soluções de Hardware Inibição de interrupções Instrução TSL (apresenta busy wait) Soluções de software

Leia mais

INE5645 PROGRAMAÇÃO PARALELA E DISTRIBUÍDA - Prova 1 12/05/2014 Aluno: Bosco

INE5645 PROGRAMAÇÃO PARALELA E DISTRIBUÍDA - Prova 1 12/05/2014 Aluno: Bosco INE5645 PROGRAMAÇÃO PARALELA E DISTRIBUÍDA - Prova 1 12/05/2014 Aluno: Bosco 1. Um servidor acessa as variáveis i e j. O servidor oferece duas operações para seus clientes: read(i) retorna o valor de i

Leia mais

Os processos concorrentes necessitam muitas vezes de trocar dados entre si.uma das formas

Os processos concorrentes necessitam muitas vezes de trocar dados entre si.uma das formas 1 Conjunto de protocolos usados para manter a integridade do sistema e/ou controlar o acesso a Os processos concorrentes necessitam muitas vezes de trocar dados entre si.uma das formas 2 programador de

Leia mais

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação

Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação Universidade Federal do Pará Instituto de Ciências Exatas e Naturais Faculdade de Computação SISTEMAS OPERACIONAIS Aulas 6 Regiane Kawasaki kawasaki@ufpa.br Slides adaptados da Profa. Sarita Mazzini Bruschi

Leia mais

Sistemas Operacionais Aula 6

Sistemas Operacionais Aula 6 Sistemas Operacionais Aula 6 Anderson L. S. Moreira anderson.moreira@recife.ifpe.edu.br http://dase.ifpe.edu.br/~alsm Curso de Análise e Desenvolvimento de Sistemas de Informação Recife - PE O que fazer

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Programação Concorrente Sincronização entre processos Edson Moreno edsonmoreno@pucrsbr http://wwwinfpucrsbr/~emoreno Sumário Conceituação Princípios de concorrência Região crítica

Leia mais

Fundamentos. Módulo 6: Sincronização de Processos. Bounded-Buffer (Cont.) Bounded-Buffer

Fundamentos. Módulo 6: Sincronização de Processos. Bounded-Buffer (Cont.) Bounded-Buffer Módulo 6: Sincronização de Processos Fundamentos Fundamentos O problema das regiões críticas Hardware de Sincronização Semáforos Problemas Clássicos de Sincronização Regiões Críticas Monitores Sincronização

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais I Índice 2 Processos... 1 2.2.5 Semáforos... 1 2.2.6 Monitores... 2 2.2.7 Passagem de Mensagens... 5 2 Processos 2.2.5 Semáforos Para resolver este problema, Dijkstra propôs em 1965

Leia mais

Sincronização. Cooperação entre Processos

Sincronização. Cooperação entre Processos Sincronização Parte II Programação Concorrente Cooperação entre Processos Vários processos executam em conjunto uma ou mais tarefas, nas quais Competem por recursos Indicam uns aos outros a: Ausência/existência

Leia mais

Programação Concorrente e Paralela. Noemi Rodriguez

Programação Concorrente e Paralela. Noemi Rodriguez 2016 o que é programação concorrente e paralela? programação concorrente: composição de linhas de atividades independentes programação paralela: execução simultânea de linhas de atividades Go blog (Rob

Leia mais

Cooperação entre Processos

Cooperação entre Processos Sincronização Parte II Programação Concorrente Sistemas Operativos 2010 / 2011 Cooperação entre Processos Vários processos executam em conjunto uma ou mais tarefas, nas quais Competem por recursos Indicam

Leia mais

1B Conceitos Básicos: Indique Verdade/Falso

1B Conceitos Básicos: Indique Verdade/Falso INE5645 - Programação Paralela e Distribuída - Prova 1B 24/04/2017 Nome 1B Conceitos Básicos: Indique Verdade/Falso a) (Verdade/Falso) Threads distintas em um processo não são tão independentes quanto

Leia mais

Programação Concorrente e Paralela

Programação Concorrente e Paralela Semáforos e Monitores 2010.2 Notação Andrews: atomicidade e await para definir ações atômicas, Andrews introduz a notação e para especificar sincronização, Andrews introduz a notação: await(b)s; que significa

Leia mais

Sistemas Operativos: Implementação de Processos

Sistemas Operativos: Implementação de Processos Sistemas Operativos: Implementação de Processos Pedro F. Souto (pfs@fe.up.pt) March 8, 2012 Sumário: Implementação de Processos Contexto (Estado) dum Processo Comutação de Processos Escalonamento de Processos

Leia mais

1 Porque o estado de um processo deve ser salvo quando ele deixa a CPU?

1 Porque o estado de um processo deve ser salvo quando ele deixa a CPU? 1 Porque o estado de um processo deve ser salvo quando ele deixa a CPU? 2 O que é ambiente de execução? 3 Qual a finalidade da PCB? 4 Quais os componentes básicos da PCB? 5 Quais os 3 grupos de elemento

Leia mais

O PROBLEMA DOS LEITORES E ESCRITORES LABORATORIO 1

O PROBLEMA DOS LEITORES E ESCRITORES LABORATORIO 1 O PROBLEMA DOS LEITORES E ESCRITORES LABORATORIO 1 O PROBLEMA DOS LEITORES E ESCRITORES O problema dos leitores e escritores é o próximo problema abstrato em programação concorrente que resolveremos. É

Leia mais

SISTEMAS OPERATIVOS I

SISTEMAS OPERATIVOS I Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática SISTEMAS OPERATIVOS I Programação Concorrente em Linux: Memória Partilhada e Semáforos Versão 1.03 Maio de 2006 Luís Lino

Leia mais

Teste de Sistemas de Operação 15 de Abril de 2010

Teste de Sistemas de Operação 15 de Abril de 2010 Teste de Sistemas de Operação 15 de Abril de 2010 Duração: 1 h (prática + teórica) D NOME: Indique apenas uma das alternativas. Respostas erradas descontam na nota. 1. Em um sistema que suporta multiprogramação

Leia mais

Aula 6: Comunicação entre processos. Instituto Federal da Bahia INF009 - Sistemas Operacionais Profª Flávia Maristela

Aula 6: Comunicação entre processos. Instituto Federal da Bahia INF009 - Sistemas Operacionais Profª Flávia Maristela Aula 6: Comunicação entre processos Instituto Federal da Bahia INF009 - Sistemas Operacionais Profª Flávia Maristela (-- motivação --) Processos em execução no sistema operacional podem ser: Independentes:

Leia mais

INE5645 Programação Paralela e Distribuída - Prova 1 22/10/2012 Aluno: Parte 1 Controle de Concorrência Conceitos Básicos (2,5)

INE5645 Programação Paralela e Distribuída - Prova 1 22/10/2012 Aluno: Parte 1 Controle de Concorrência Conceitos Básicos (2,5) INE5645 Programação Paralela e Distribuída - Prova 1 22/10/2012 Aluno: Parte 1 Controle de Concorrência Conceitos Básicos (2,5) 1.1 (Verdade/Falso) Itens próprios de processos são: Espaço de endereçamento,

Leia mais

Sincronização e Comunicação entre Processos

Sincronização e Comunicação entre Processos Sincronização e Comunicação entre Processos Monitores/Semáforos Semáforos Mecanismos de sincronização nãoestruturados; Exige do desenvolvedor bastante cuidado, pois qualquer engano pode levar a problemas.

Leia mais

INTRODUÇÃO AOS SISTEMAS OPERACIONAIS SEMANA 10. Operações nos processos. Processos cooperativos, comunicação entre processos.

INTRODUÇÃO AOS SISTEMAS OPERACIONAIS SEMANA 10. Operações nos processos. Processos cooperativos, comunicação entre processos. INTRODUÇÃO AOS SISTEMAS OPERACIONAIS outubro/2013 SEMANA 10 Operações nos processos. Processos cooperativos, comunicação entre processos. 1 - Introdução Um processo, ao longo da sua vida, passa por diferentes

Leia mais

Capítulo 2 Processos e Threads

Capítulo 2 Processos e Threads Capítulo 2 Processos e Threads 2.1 Processos 2.2 Threads 2.3 Comunicação interprocesso 2.4 Problemas clássicos de IPC 2.5 Escalonamento 1 Processos O Modelo de Processo Multiprogramação de quatro programas

Leia mais