Alexandro Baldassin Programação Concorrente 2sem, 2017

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

Download "Alexandro Baldassin Programação Concorrente 2sem, 2017"

Transcrição

1 Alexandro Baldassin Programação Concorrente 2sem, 2017

2 2 Programação concorrente Desempenho Lock global Complexidade

3 3 Programação concorrente Lock-free Desempenho Locks finos Lock global Complexidade

4 4 Programação concorrente HTM Lock-free Desempenho STM TM Locks finos Lock global Complexidade

5 5 Memória Transacional (TM) No modelo transacional, programadores usam o conceito de transação como abstração Atomicidade Consistência Isolamento Vantagens Nível de abstração maior Potencial ganho de desempenho Dependente de implementação (visto mais adiante) Composição de código

6 6 Memória Transacional (TM) No modelo transacional, programadores usam o conceito de transação como abstração Atomicidade Consistência Isolamento Vantagens Nível de abstração maior Potencial ganho de desempenho Dependente de implementação (visto mais adiante) Composição de código Detalhes de como realizar a sincronização são movidos do programador para o sistema de execução

7 7 Blocos atômicos O termo bloco atômico geralmente é usado quando o enfoque é sobre o suporte em linguagens Memória transacional (TM) é uma forma de se implementar blocos atômicos Nomenclatura ainda não consolidada!

8 8 Programando com blocos atômicos Programador delimita a região que deve ser executada atomicamente Exemplo com lista ligada Sistema de execução (pode ser hardware ou software) cuida de garantir atomicidade, isolamento e consistência public boolean add(int item) { Node pred, curr; boolean valid = false; atomic { pred = head; curr = pred.next; while (curr.key < item) { pred = curr; curr = curr.next; if (item!= curr.key) { Node node = new Node(item); node.next = curr; pred.next = node; valid = true; if (valid) return true; return false;

9 9 Suporte transacional no GCC 4.7 Suporte experimental a TM existe no GCC a partir da versão 4.7 (abril de 2012) As construções adicionadas à linguagem são baseadas no documento Draft Specification of Transactional Language Constructs for C++, versão The support is experimental. In particular, this also means that several parts of the implementation are not yet optimized. If you observe performance that is lower than expected, you should not assume that transactional memory is inherently slow; instead, please just file a bug.

10 10 Construções GCC Principais construções transaction_atomic { transaction_relaxed { transaction_cancel Anotações attribute ((transaction_safe)) attribute ((transaction_callable)) attribute ((transaction_pure)) Opção -fgnu-tm deve ser passada ao compilador

11 11 Exemplo com GCC lista ligada int list_add(list_node_t *head, int item) { list_node_t *pred, *curr; transaction_atomic { pred = head; curr = head->next; while (curr->key < item) { pred = curr; curr = curr->next; list_node_t *node = (list_node_t *)malloc(sizeof(list_node_t)); node->key = item; node->next = curr; pred->next = node; return 1; Demais operações implementadas da mesma forma

12 12 Detalhes da geração e execução O compilador gera duas versões para cada rotina especificada com o atributo transaction_safe A versão transacional é usada quando a rotina é chamada dentro de uma transação O código gerado é linkado com uma biblioteca de runtime chamada libitm Essa biblioteca pode ser substituída em tempo de execução Permite que diferentes implementações possam ser avaliadas de forma simples Especificação segue basicamente a ABI proposta pela Intel Intel Transactional Memory Compiler and Runtime Application Binary Interface, revisão 1.1 maio de 2009

13 13 Teste de stress da lista void *list_exercise(void *arg) { int operations = (int)arg; Todas as threads executam a mesma rotina int add_or_remove, chance, value, last_value = 0; add_or_remove = 1; /* 1 - add, 0 - remove */ while (operations--) { chance = (int)(erand48(seed)*100); value = (int)(erand48(seed)*range*2); if (chance <= UPD_RATE) { if (add_or_remove) { list_add(linked_list, value); last_value = value; else list_remove(linked_list, last_value); add_or_remove ^= 1; else list_contain(linked_list, value);

14 14 Alguns resultados Máquina: Intel(R) Core(TM) i7-2600k [3.4GHz, 8GB RAM] Tamanho do conjunto: elementos Número total de operações:

15 15 Taxa de atualização de 20% 80! 0" 0.1" 0.2" 0.3" 0.4" 0.5" 0.6" 0.7" 0.8" 0.9" 1" 70! 60! Tempo (s)! 50! 40! 30! 20! 1! 2! 3! 4! 5! 6! 7! 8! Número de threads! bloqueio global! bloqueio fino! GCC-STM! Sequencial!

16 16 Taxa de atualização de 50% 80! 0" 0.1" 0.2" 0.3" 0.4" 0.5" 0.6" 0.7" 0.8" 0.9" 1" 70! 60! Tempo (s)! 50! 40! 30! 20! 1! 2! 3! 4! 5! 6! 7! 8! Número de threads! bloqueio global! bloqueio fino! GCC-STM! Sequencial!

17 17 Até o momento Vimos como usar mutexes para prover acesso exclusivo a variáveis compartilhadas (seção crítica) Não vimos situações onde uma thread pode necessitar esperar por uma outra thread (ordem importa!) Em especial, uma thread pode ter sua execução condicionada a um evento realizado por outra thread Exemplo: Duas threads, T1 e T2, estão executando. Por alguma restrição do sistema, T2 só pode prosseguir/terminar DEPOIS que T1 já tiver realizado alguma ação crítica

18 18 Exemplo void * Thread1(void *arg) { /* ação crítica */ // como indicar que ação crítica foi executada? return NULL; void * Thread2(void *arg) { // como esperar pela ação crítica de Thread1? return NULL;

19 19 Solução 1 Busy waiting volatile int done = 0; void * Thread1(void *arg) { /* ação crítica */ done = 1; return NULL; void * Thread2(void *arg) { while (done == 0); return NULL; Funciona?

20 20 Problemas com busy waiting Processador fica ocupado sem fazer nada Dependendo do modelo de consistência de memória o programador deve adicionar instruções extras para forçar a ordem dos load/stores na memória Qual seria a solução ideal para este problema? Colocar a thread para dormir até que a condição se torne verdadeira Possível usar mutexes?

21 21 Solução com mutex? void * Thread1(void *arg) { pthread_mutex_lock(lock); /* ação crítica */ pthread_mutex_unlock(lock); return NULL; void * Thread2(void *arg) { pthread_mutex_lock(lock); pthread_mutex_unlock(lock); return NULL; Funciona?

22 22 Condition variables Para esperar até que uma condição se torne verdadeira, uma thread pode fazer uso de variáveis de condição Uma variável de condição é uma fila na qual as threads podem dormir enquanto alguma condição ainda não estiver satisfeita Quando a condição for satisfeita por alguma outra thread, ela acorda uma (ou mais) thread(s) esperando na fila da condição Duas operações básicas são fornecidas Wait Signal

23 23 Solução com condition variable condicao_critica void * Thread1(void *arg) { /* ação crítica */ signal(condicao_critica); return NULL; void * Thread2(void *arg) { wait(condicao_critica) return NULL; Funciona?

24 24 Solução com condition variable int done = 0; condicao_critica void * Thread1(void *arg) { /* ação crítica */ done = 1; signal(condicao_critica); return NULL; void * Thread2(void *arg) { if (done == 0) wait(condicao_critica) return NULL; Funciona?

25 25 Condition variables e Pthreads A operação wait necessita que um lock tenha sido adquirido antes de ser invocada int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); A operação signal geralmente deve ser invocada somente quando o mesmo lock (usado com wait) estiver sido adquirido int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond);

26 26 Operações WAIT e SIGNAL A operação WAIT internamente trata de liberar o lock associado antes de colocar a thread para dormir WAIT(CV,L) UNLOCK(L) SLEEP() LOCK(L) Existem duas semânticas para SIGNAL em termos de garantia Hoare SIGNAL acorda a thread e a coloca para execução imediatamente (colocando a thread que sinalizou para dormir) Mesa SIGNAL apenas acorda uma thread e a coloca na fila de threads prontas para execução Pthreads!

27 27 Nova versão da solução int done = 0; pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t c = PTHREAD_COND_INITIALIZER; void * Thread1(void *arg) { /* ação crítica */ pthread_mutex_lock(&m); done = 1; pthread_cond_signal(&c); pthread_mutex_unlock(&m); return NULL; void * Thread2(void *arg) { pthread_mutex_lock(&m); if (done == 0) pthread_cond_wait(&c, &m); pthread_mutex_unlock(&m) return NULL; Para esse exemplo é suficiente usar IF, mas para o caso geral é recommendável usar WHILE (mais detalhes adiante)

28 28 Problema do produtor/consumidor Existem dois tipos de threads executando concorrentemente no sistema Produtora Produz um determinado item e o coloca em um buffer compartilhado Consumidora Retira o item do buffer compartilhado e o utiliza de alguma forma Como o buffer é limitado em termos de tamanho, um produtor não pode adicionar um item se o mesmo já estiver cheio Deve esperar por algum item ser consumido Da mesma forma, um consumidor não pode consumir um item se o buffer estiver vazio Deve esperar por algum item ser produzido

29 29 Um buffer simples static int buffer; static int size = 0; int buffer_is_empty() { return size == 0; int buffer_is_full() { return size == 1; void buffer_put (int value) { assert(size == 0); size = 1; buffer = value; int buffer_get() { assert(size == 1); size = 0; return buffer;

30 30 Programa teste /* producer thread */ void *producer(void *arg) { long int i; long int loops = (long int)arg; for (i=0; i<loops; i++) buffer_put(i); /* consumer thread */ void *consumer(void *arg) { int i; for (i=0; i<loops; i++) { int tmp = buffer_get(); fprintf(stdout, "%d\n", tmp); Aplicação teste disponibilizada dispara um certo número de threads produtoras e consumidoras, as quais produzem e consomem uma certa quantidade de itens. Parâmetros: <#producers> <#consumers> <#items> Deve ser múltiplo de #producers e #consumers

31 31 Primeira versão /* producer thread */ void *producer(void *arg) { long int i; long int loops = (long int)arg; for (i=0; i<loops; i++) { pthread_mutex_lock(&mutex); if (buffer_is_full()) pthread_cond_wait(&cond, &mutex); buffer_put(i); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); /* consumer thread */ void *consumer(void *arg) { long int i; long int loops = (long int)arg; for (i=0; i<loops; i++) { pthread_mutex_lock(&mutex); if (buffer_is_empty()) pthread_cond_wait(&cond, &mutex); int tmp = buffer_get(); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); fprintf(stdout, "%d\n", tmp);

32 32 Qual o problema? Lembre-se da semântica Mesa! Imagine 1 produtor e 2 consumidores e buffer == empty cond pthread_mutex_lock(&mutex); if (buffer_is_empty()) pthread_cond_wait(&cond, &mutex); Consumidor 1 int tmp = buffer_get(); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex);

33 33 Qual o problema? Lembre-se da semântica Mesa! Imagine 1 produtor e 2 consumidores e buffer == empty C1 cond Produtor 1 pthread_mutex_lock(&mutex); if (buffer_is_full()) pthread_cond_wait(&cond, &mutex); buffer_put(i); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex);

34 34 Qual o problema? Lembre-se da semântica Mesa! Imagine 1 produtor e 2 consumidores e buffer == empty C1 cond C1 é acordado (colocado na fila de processos READY) mas, antes que consiga continuar, um outro, C2, é executado pthread_mutex_lock(&mutex); if (buffer_is_empty()) pthread_cond_wait(&cond, &mutex); int tmp = buffer_get(); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex);

35 35 Qual o problema? Lembre-se da semântica Mesa! Imagine 1 produtor e 2 consumidores e buffer == empty cond C2 adquire o lock e tira o elemento do buffer pthread_mutex_lock(&mutex); if (buffer_is_empty()) pthread_cond_wait(&cond, &mutex); int tmp = buffer_get(); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex);

36 36 Qual o problema? Lembre-se da semântica Mesa! Imagine 1 produtor e 2 consumidores e buffer == empty cond Quando C1 volta a executar, ele tenta consumir um elemento que não existe! pthread_mutex_lock(&mutex); if (buffer_is_empty()) pthread_cond_wait(&cond, &mutex); int tmp = buffer_get(); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex);

37 37 Qual o problema? Lembre-se da semântica Mesa! A condição testada deve ser colocada dentro de um laço do tipo WHILE

38 38 Segunda versão /* producer thread */ void *producer(void *arg) { long int i; long int loops = (long int)arg; for (i=0; i<loops; i++) { pthread_mutex_lock(&mutex); while (buffer_is_full()) pthread_cond_wait(&cond, &mutex); buffer_put(i); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); /* consumer thread */ void *consumer(void *arg) { long int i; long int loops = (long int)arg; for (i=0; i<loops; i++) { pthread_mutex_lock(&mutex); while (buffer_is_empty()) pthread_cond_wait(&cond, &mutex); int tmp = buffer_get(); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); fprintf(stdout, "%d\n", tmp);

39 39 Qual o problema? Imagine 2 produtores e 2 consumidores e buffer == empty C1 C2 cond Os dois consumidores ficam aguardando na fila

40 40 Qual o problema? Imagine 2 produtores e 2 consumidores e buffer == empty C1 C2 cond Produtor 1 entra e acorda um dos consumidores. Por exemplo, C1

41 41 Qual o problema? Imagine 2 produtores e 2 consumidores e buffer == empty C2 cond Produtor 1 entra e acorda um dos consumidores. Por exemplo, C1

42 42 Qual o problema? Imagine 2 produtores e 2 consumidores e buffer == empty C2 P2 cond Antes que C1 possa executar, um outro produtor (P2) tenta produzir mais um dado. No entanto, o buffer está cheio e ele é colocado na fila

43 43 Qual o problema? Imagine 2 produtores e 2 consumidores e buffer == empty C2 P2 cond C1 finalmente consome elemento do buffer e executa SIGNAL. Qual das threads, C2 ou P2, deve ser acordada? Note que se a C2 for acordada ela novamente vai dormir, já que o buffer estará vazio. O sistema entrará em uma espécie de DEADLOCK!

44 44 Como corrigir o problema anterior? Duas formas principais Primeira (preferida) Usar duas variáveis de condição Uma onde somente as threads esperando pelo evento de buffer vazio (não cheio) esperam, ou seja, as produtoras esperam Outra onde somente as threads esperando pelo evento de buffer cheio (não vazio) esperam, ou seja, as consumidoras esperam Segunda Usar pthread_cond_broadcast(). Por que funciona?

45 45 Semáforos Semáforo é uma primitiva que pode ser usada para qualquer coisa relacionada a sincronização Pode ser usado como mutex ou variável de condição Criado por Edsger Dijkstra Pthreads não suporta a primitiva Pode ser implementada através de mutex e variável de condição Presente no padrão POSIX #include <semaphore.h> Duas operações básicas sem_wait sem_post

46 46 Operações básicas semáforo int sem_wait(sem_t *s) { wait until value of semaphore s is greater than 0 decrement the value of semaphore s by 1 int sem_post(sem_t *s) { increment the value of semaphore s by 1 if there are 1 or more threads waiting, wake 1

47 47 Semáforos como mutexes sem_t m; sem_init(&m, 0, 1); // initialize semaphore to 1 sem_wait(&m); // critical section here sem_post(&m); Valor inicial

48 48 Semáforos como variáveis de condição sem_t s; sem_init(&s, 0, 0); // executed by main thread void * Thread1(void *arg) { /* ação crítica */ sem_post(&s); return NULL; void * Thread2(void *arg) { sem_wait(&s); return NULL;

49 49 Produtor consumidor com semáforos sem_t empty; sem_t full; sem_t mutex; sem_init(&empty, 0, MAX); // MAX buffers are empty to begin with... sem_init(&full, 0, 0); //... and 0 are full sem_init(&mutex, 0, 1); // mutex=1 because it is a lock void *producer(void *arg) { int i; for (i = 0; i < loops; i++) { sem_wait(&empty); sem_wait(&mutex); put(i); sem_post(&mutex); sem_post(&full); // line p3 void *consumer(void *arg) { int i; for (i = 0; i < loops; i++) { sem_wait(&full); sem_wait(&mutex); int tmp = get(); sem_post(&mutex); sem_post(&empty); // line c3 printf("%d\n", tmp);

50 50 Implementando semáforos Construir semáforos a partir de mutexes e variáveis de condição é relativamente simples O inverso não é verdade! typedef struct sem_t { int value; pthread_cond_t cond; pthread_mutex_t lock; sem_t; void sem_wait(sem_t *s) { mutex_lock(&s->lock); while (s->value <= 0) cond_wait(&s->cond, &s->lock); s->value--; mutex_unlock(&s->lock); void sem_post(sem_t *s) { mutex_lock(&s->lock); s->value++; cond_signal(&s->cond); mutex_unlock(&s->lock);

51 51 Barreiras Barreiras são pontos de sincronização A execução só avança quando TODAS as threads atingirem o mesmo ponto barrier_wait(barrier_object) Usos Alguns programas possuem fases de execução só podem prosseguir quando todas as threads finalizarem seus trabalhos Depuração de código Implementável a partir de mutexes e variáveis de condição Versões mais novas de Pthreads já fornecem como tipo

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

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 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

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

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

Ferramentas para Programação em Processadores Multi-Core

Ferramentas para Programação em Processadores Multi-Core Ferramentas para Programação em Processadores Multi-Core Prof. Dr. Departamento de Informática Universidade Federal de Pelotas Sumário Introdução Arquiteturas multi-core Programação multithread Prática

Leia mais

Prof. Silvana Rossetto 9 de julho de DCC/IM/UFRJ

Prof. Silvana Rossetto 9 de julho de DCC/IM/UFRJ Computação Concorrente (MAB117) Gabarito Segunda Prova Prof. Silvana Rossetto 9 de julho de 2015 1 DCC/IM/UFRJ Questão 1 (2,5 pts) O código Java abaixo implementa uma solução para o problema do barbeiro

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 Operativos: Concorrência (Parte 2)

Sistemas Operativos: Concorrência (Parte 2) Sistemas Operativos: Concorrência (Parte 2) Pedro F. Souto (pfs@fe.up.pt) March 23, 2012 Sumário Instruções read-modify-write Atómicas. Problema do Lost Wakeup Semáforos Monitores Variáveis de Condição

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

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

Threads ou Processos Leves

Threads ou Processos Leves Threads ou Processos Leves Sistemas Operacionais Tradicionais Sistemas com Multithreading Legenda: processo thread Contador de programa Threads Processos que compartilham espaço de endereçamento: P1 threads

Leia mais

Programação de Sistemas Array Sistólico

Programação de Sistemas Array Sistólico Programação de Sistemas Array Sistólico Programação de Sistemas Array sistólico : 1/7 Problema (1) [Definição] Um array sistólico 1 é um sistema composto por células dispostas matricialmente. Cada célula

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

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

Programação de Sistemas

Programação de Sistemas Programação de Sistemas Pai Natal Programação de Sistemas Pai Natal : 1/16 Problema (1) Considere o Pai Natal ( Santa Claus ) se encontra a dormir na sua loja em Rovaniemi-Lapónia finlandesa, sendo acordado

Leia mais

7 SINCRONIZAÇÃO DE PROCESSOS

7 SINCRONIZAÇÃO DE PROCESSOS 7 SINCRONIZAÇÃO DE PROCESSOS Quando se trabalha com processos cooperativos, eles podem afetar uns aos outros. Eles compartilham recursos, principalmente posições de memória e arquivos. O acesso a dados

Leia mais

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios SISTEMAS OPERACIONAIS INF09344 - Sistemas Operacionais / INF02780 - Sistemas Operacionais / INF02828 - Sistemas de Programação II Prof a. Roberta Lima Gomes (soufes@gmail.com) 2ª. Lista de Exercícios Data

Leia mais

Sincronização de Threads

Sincronização de Threads Sincronização de Threads Sistema justo quando cada threadobtém ace so suficiente a recursoslimitadosa fim de progredir razoavelmente Starvation ocorre quando uma ou maisthreadsestão impedidasde obter ace

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 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

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

Programação de Sistemas Carris

Programação de Sistemas Carris Programação de Sistemas Carris Programação de Sistemas Carris : 1/18 Problema (1) A fim de incentivar os alfacinhas a deslocar na cidade de Volvo, a Carris-Companhia de Carris de Ferro de Lisboa decidiu

Leia mais

Programação de Sistemas Cafetaria

Programação de Sistemas Cafetaria Programação de Sistemas Cafetaria Programação de Sistemas Cafetaria : 1/14 Problema Uma cafetaria vende duas classes de café, cada um servido por uma fila dedicada: local e levar ( take away ). Ao entrar

Leia mais

MC504 - Sistemas Operacionais

MC504 - Sistemas Operacionais MC504 - Sistemas Operacionais Algoritmo da Padaria Problema dos Produtores e Consumidores Primitivas de Sincronização Islene Calciolari Garcia Primeiro Semestre de 2014 Sumário 1 Algoritmo da Padaria 2

Leia mais

Monitores. Walter Fetter Lages.

Monitores. Walter Fetter Lages. Monitores Walter Fetter Lages w.fetter@ieee.org Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Engenharia Elétrica ENG04008 Sistemas de Tempo Real Copyright (c) Walter Fetter

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Programação Concorrente Problemas clássicos Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Sumário Produtor / consumidor O jantar dos filósofos O barbeiro sonolento

Leia mais

Sincronização e Comunicação de/entre Processos. Na Aula Anterior... Nesta Aula. Comunicação entre Processos. Pipes 07/09/2016

Sincronização e Comunicação de/entre Processos. Na Aula Anterior... Nesta Aula. Comunicação entre Processos. Pipes 07/09/2016 GSI018 Sistemas Operacionais 07/09/2016 Sincronização e Comunicação de/entre Processos Universidade Federal de Uberlândia Faculdade de Computação Prof. Dr. rer. nat. Daniel D. Abdala Na Aula Anterior...

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

Bibliografia. OpenMP. Disponibilidade de OpenMP. Abordagem SPMD. Nicolas Maillard

Bibliografia. OpenMP. Disponibilidade de OpenMP. Abordagem SPMD. Nicolas Maillard Bibliografia Nicolas Maillard nicolas@inf.ufrgs.br Instituto de Informática Universidade Federal do Rio Grande do Sul home-page: http://www.openmp.org/presentations Parallel Programming in. R. Chandra

Leia mais

Programação Concorrente com Thread Java. Luiz Affonso Guedes Sistemas Distribuidos

Programação Concorrente com Thread Java. Luiz Affonso Guedes Sistemas Distribuidos Programação Concorrente com Thread Java Luiz Affonso Guedes Sistemas Distribuidos Definições Básicas Threads são sub-procesos no sistema operacional. É menos custoso gerenciar threads do que processos.

Leia mais

Boas Práticas de Programação Concorrente

Boas Práticas de Programação Concorrente Boas Práticas de Programação Concorrente Evitando surpresas inconvenientes Ronny Moura Súmario Principais problemas da programação concorrente e os mecanismos Java para resolvê-los. Race condition(synchronized,

Leia mais

Programação Orientada a Objetos. Concorrência

Programação Orientada a Objetos. Concorrência Programação Orientada a Objetos Concorrência Cristiano Lehrer, M.Sc. Níveis de concorrência: Introdução Nível de instrução de máquina: Executando duas ou mais instruções de máquina simultaneamente. Nível

Leia mais

Sincronização e memória compartilhada no Linux

Sincronização e memória compartilhada no Linux Sincronização e memória compartilhada no Linux Memória compartilhada Modelo de memória UNIX Processo aloca (allocate) um segmento no qual deseja compartilhar Processos que desejam acessar o segmento alocado,

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

Programação de Alto Desempenho - 2. Prof: Carla Osthoff

Programação de Alto Desempenho - 2. Prof: Carla Osthoff Programação de Alto Desempenho - 2 Prof: Carla Osthoff E-mail: osthoff@lncc.br 3- Modelos de programação paralela Shared Memory/Threads Posix Win32 treads OpenMP Message Passing MPI Data Parallel OpenCL/Cuda

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

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos

Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos Processos Conceitos Básicos Processo (1) Abstração usada pelo S.O. para designar a execução de um programa. É caracterizado por uma thread de execução, um estado corrente e um conjunto associado de recursos

Leia mais

Processos. Conceitos Básicos

Processos. Conceitos Básicos Processos Conceitos Básicos Processo (1) Abstração usada pelo S.O. para designar a execução de um programa. É caracterizado por uma thread de execução, um estado corrente e um conjunto associado de recursos

Leia mais

Programação Concorrente

Programação Concorrente Programação Concorrente Monitores e Troca de Mensagens Monitores Considere que, no projeto da solução do produtor-consumidor com semáforos, os 2 downs tenham sido trocados Se o buffer estiver cheio deadlock

Leia mais

Pthreads. O que são threads? Mario João Junior. Uma thread é um fluxo de execução de instruções que pode ser escalonado pelo sistema operacional.

Pthreads. O que são threads? Mario João Junior. Uma thread é um fluxo de execução de instruções que pode ser escalonado pelo sistema operacional. Pthreads Mario João Junior O que são threads? Uma thread é um fluxo de execução de instruções que pode ser escalonado pelo sistema operacional. O que são threads? No UNIX, uma thread: Existe no interior

Leia mais

Gustavo G. Parma. Objetivos: O aluno deverá ser capaz de compreender os conceitos básicos de VHDL.

Gustavo G. Parma. Objetivos: O aluno deverá ser capaz de compreender os conceitos básicos de VHDL. Introdução à VHDL Gustavo G. Parma Assunto: Introdução à VHDL. Objetivos: O aluno deverá ser capaz de compreender os conceitos básicos de VHDL. 1 Introdução Teórica VHDL, VHSIC (Very High Speed Integrated

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 4: Programação Concorrente Diego Passos Últimas Aulas Processos Compostos por: Código (programa). Estado (memória, registradores). Em um sistema com multiprogramação:

Leia mais

Sistemas Operacionais. Sincronização: Semáforos Problema dos Leitores/Escritores

Sistemas Operacionais. Sincronização: Semáforos Problema dos Leitores/Escritores Sistemas Operacionais Sincronização: Semáforos Problema dos Leitores/Escritores Autoria Autores Eduardo André Mallmann 0905/96-9 João Paulo Reginatto 1530/96-0 Local Instituto de Informática UFRGS disciplina:

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

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

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

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Programação Concorrente Introdução Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Introdução Programa Seqüencial Representado por apenas um processo Existe apenas

Leia mais

for(int x=0; x < width; x++) { for(int y=0; y < height; y++) { finalimage[x][y]=renderpixel(x,y, &scenedata); } }

for(int x=0; x < width; x++) { for(int y=0; y < height; y++) { finalimage[x][y]=renderpixel(x,y, &scenedata); } } Paralelização em OpenMP Identifique os loops pesados ; Distribua-os: Versão sequencial double res[10000]; calculo_pesado(&res[i]); Versão paralela double res[10000]; for calculo_pesado(&res[i]); OMP for

Leia mais

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing,

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing, Filas Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing, pelo uso da CPU Algoritmos e Estruturas de Dados I José

Leia mais

Arquitetura de Computadores Sistemas Operacionais II

Arquitetura de Computadores Sistemas Operacionais II Definição de Processo Arquitetura de Computadores Sistemas Operacionais II Processo é o mesmo de Programa? Programa Estrutura estática Instruções + Dados Processo Entidade Ativa Instância de um Programa

Leia mais

JAVA. Professor: Bruno Toledo

JAVA. Professor: Bruno Toledo JAVA Professor: Bruno Toledo Funcionamento de uma LP Em uma Linguagem de Programação (LP) como C e Pascal, temos o seguinte quadro quando vamos compilar um programa. Código fonte em c Teste.c Gera código

Leia mais

Linguagem de Programação I

Linguagem de Programação I Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Exemplo: Explorar Templates e Exceções Incrementar com o uso de STL 2 Crie uma função verificarpalindromo()

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 11 - Threads e Concorrência

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 11 - Threads e Concorrência Aula 11 - Threads e Concorrência Conteúdo Programático desta aula Apresentar os Conceitos de Threads, Concorrência e Sincronização. Verificar a aplicabilidade destes conceitos no mercado, bem como sua

Leia mais

Segundo trabalho prático de implementação Sistema de reserva de assentos

Segundo trabalho prático de implementação Sistema de reserva de assentos Segundo trabalho prático de implementação Sistema de reserva de assentos 1. Descrição do problema Computação Concorrente (MAB-117) 2016/2 Prof. Silvana Rossetto 1 DCC/IM/UFRJ 17 de novembro de 2016 Um

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 02 Processos e Threads Edirlei Soares de Lima Programas e Processos Programa: Entidade estática e permanente; Composto por sequencias de instruções; Processo:

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 12 - Threads e Concorrência em Java

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 12 - Threads e Concorrência em Java Aula 12 - Threads e Concorrência em Java Conteúdo Programático desta aula Aplicar os conceitos e threads, processos concorrentes e sincronização em pequenos programas. Aplicar e verificar os conceitos

Leia mais

Programação concorrente usando threads POSIX e Java

Programação concorrente usando threads POSIX e Java Programação concorrente usando threads POSIX e Java MAC 431 / MAC 5742 Introdução à Computação Paralela e Distribuída Daniel Cordeiro DCC - IME - USP 13 de agosto de 2012 Introdução Por que escrever programas

Leia mais

Semáforos. Walter Fetter Lages.

Semáforos. Walter Fetter Lages. Semáforos Walter Fetter Lages w.fetter@ieee.org Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Engenharia Elétrica ENG04008 Sistemas de Tempo Real Copyright (c) Walter Fetter

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

Exercício de Estrutura de dados. Java Fila

Exercício de Estrutura de dados. Java Fila Exercício de Estrutura de dados Java Fila Obs.: Esse projeto foi um exercício realizado em sala de aula da matéria de Estrutura de dados com o Profº Frederico Augusto Siqueira Gentil Aqui está sendo relatado

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

Introdução à linguagem C++

Introdução à linguagem C++ Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução à linguagem C++ Introdução à linguagem C++ Conceitos básicos: variáveis, tipos de dados, constantes, I/O, etc. Estruturas

Leia mais

Pilhas e Filas. Algoritmos e Estruturas de Dados Flavio Figueiredo (http://flaviovdf.github.io)

Pilhas e Filas. Algoritmos e Estruturas de Dados Flavio Figueiredo (http://flaviovdf.github.io) Pilhas e Filas Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Pilhas 2 Pilhas (Stack) Estrutura similar às listas lineares que vimos na última aula [Mais Simples]

Leia mais

Ferramentas para Programação em Processadores Multi-Core

Ferramentas para Programação em Processadores Multi-Core Ferramentas para Programação em Processadores Multi-Core Prof. Dr. Departamento de Informática Universidade Federal de Pelotas Sumário Introdução Arquiteturas multi-core Ferramentas de programação Prática

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

Capítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais

Capítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais DCA-108 Sistemas Operacionais Capítulo 2 Luiz Affonso Guedes www.dca.ufrn.br/~affonso affonso@dca.ufrn.br Multiprogramação Luiz Affonso Guedes 1 Luiz Affonso Guedes 2 Conteúdo Caracterização de um SO Moderno

Leia mais

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição Fundamentos de Programação Linguagem C++ Estruturas de controle Parte II Estruturas de repetição Prof. Bruno E. G. Gomes IFRN 1 Estruturas de Controle Permitem o controle da sequência de execução de um

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

Quadratura Adaptativa José Eduardo Talavera Herrera

Quadratura Adaptativa José Eduardo Talavera Herrera Quadratura Adaptativa José Eduardo Talavera Herrera jherrera@inf.puc-rio.br 1. Introdução Este trabalho apresenta algumas variantes do algoritmo da quadratura adaptativa [1], utilizando pthreads e OpenMP.

Leia mais

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas UNIP - Ciência da Computação e Sistemas de Informação Estrutura de Dados AULA Pilhas Estrutura de Dados A Estrutura de Dados Pilha Pilha é uma estrutura de dados usada em programação, que tem uma regra

Leia mais

Principais paradigmas de programação. Programação imperativa Programação funcional Programação lógica Programação OO

Principais paradigmas de programação. Programação imperativa Programação funcional Programação lógica Programação OO Principais paradigmas de programação Programação imperativa Programação funcional Programação lógica Programação OO Programação Imperativa É o paradigma mais usado. Programas são definidos através de sequências

Leia mais

BDII SQL TRANSAÇÃO Revisão 2

BDII SQL TRANSAÇÃO Revisão 2 exatasfepi.com.br BDII SQL TRANSAÇÃO Revisão 2 André Luís Duarte Honra a teu pai e a tua mãe (que é o primeiro mandamento com promessa), para que te vá bem, e sejas de longa vida sobre a terra.(ef 6:2,3)

Leia mais

Modelagem e implementação de programas concorrentes

Modelagem e implementação de programas concorrentes Modelagem e implementação de programas concorrentes Aula 10 DCC-UFMG 2010 Bibliograa Andrews + Ben Ari Da aula passada Se não posso adquirir o lock... Continuar tentando: Spinning, Busy wait (espera ocupada)

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Prof. Jó Ueyama Apresentação baseada nos slides da Profa. Dra. Kalinka Castelo Branco, do Prof. Dr. Antônio Carlos Sementille e da Profa. Dra. Luciana A. F. Martimiano e nas transparências

Leia mais

Trabalho Linguagem e Programação de Compiladores

Trabalho Linguagem e Programação de Compiladores Trabalho Linguagem e Programação de Compiladores Responda as questões. Os exercícios deverão ser desenvolvidos utilizando as estruturas apresentadas em aula e adequadas para cada problema. Forma de entrega:

Leia mais

Sistemas Operacionais. Técnicas de Implementação de Exclusão Mútua. Aula VI Prof. Rosemary Silveira

Sistemas Operacionais. Técnicas de Implementação de Exclusão Mútua. Aula VI Prof. Rosemary Silveira Sistemas Operacionais Técnicas de Implementação de Exclusão Mútua Aula VI Prof. Rosemary Silveira Tópicos de Apresentação Condições de Corrida Técnicas de Implementação de Exclusão Mútua Condições de Corrida

Leia mais

Fila. Algoritmos e Estruturas de Dados I

Fila. Algoritmos e Estruturas de Dados I Fila Algoritmos e Estruturas de Dados I Fila O que é? Para que serve? 2 Biblioteca Problema: automação de uma biblioteca Todos os livros devem ser cadastrados O sistema deve informar se um livro está disponível

Leia mais

Capítulo 3 Programação Concorrente. Nunca encontrei um homem tão ignorante que eu não pudesse aprender algo com ele.

Capítulo 3 Programação Concorrente. Nunca encontrei um homem tão ignorante que eu não pudesse aprender algo com ele. Universidade Federal de Itajubá UNIFEI Instituto de Engenharia de Sistemas e Tecnologias da Informação IESTI CCO 004 Sistemas Operacionais Prof. Edmilson Marmo Moreira 3.1 Introdução Capítulo 3 Programação

Leia mais

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

#include <stdio.h> Void main() { printf( Cheguei!\n); } INTRODUÇÃO A LINGUAGEM C #include Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C ANTES DO C ERA A LINGUAGEM B B foi essencialmente uma simplificação da linguagem BCPL. B só tinha um tipo de dado, que

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Fabio Mascarenhas - 2015.2 http://www.dcc.ufrj.br/~fabiom/lp Introdução Quais das expressões abaixo têm o mesmo significado? (vector-ref a 42) Introdução Quais das expressões

Leia mais

SISTEMA DE ARQUIVOS DO SISTEMA OPERACIONAL

SISTEMA DE ARQUIVOS DO SISTEMA OPERACIONAL . SISTEMA DE ARQUIVOS DO SISTEMA OPERACIONAL 1. A organização de um arquivo define como os dados estão internamente organizados. Explique a organização de arquivos indexada. NA ORGANIZAÇÃO INDEXADO O ARQUIVO

Leia mais

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Listas Encadeadas David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Listas Encadeadas Características: Tamanho da lista não é pré-definido Cada elemento guarda quem é o próximo Elementos não

Leia mais

Curso de Programação Distribuída e Paralela 29/09/2008. Informática UFRGS. Sistemas Operacionais II (C. Geyer) Sincronização 1. Pg.

Curso de Programação Distribuída e Paralela 29/09/2008. Informática UFRGS. Sistemas Operacionais II (C. Geyer) Sincronização 1. Pg. Sistemas Operacionais Professor Cláudio Geyer Instituto de - Sistemas Operacionais II (C. Geyer) Sincronização 1 Sistemas Operacionais Professor Cláudio Geyer Instituto de - Pg. 1 1 Tópicos ensinados no

Leia mais

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos Nesta unidade vamos ver os últimos assuntos de interesse em java. O primeiro deles, bem simples, é o tratamento

Leia mais

Linguagens de Programação Conceitos e Técnicas. Amarrações

Linguagens de Programação Conceitos e Técnicas. Amarrações Linguagens de Programação Conceitos e Técnicas Amarrações Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador

Leia mais

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 1 - Introdução Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir um

Leia mais

Sistemas Distribuídos e Paralelos

Sistemas Distribuídos e Paralelos Sistemas Distribuídos e Paralelos Aula #6: Programação paralela em sistemas de memória compartilhada. ISUTIC - 2016 Eng. Alexander Rodríguez Bonet Aula de hoje Regiões paralelas. Cláusulas de âmbito. Partilha

Leia mais

Programando com Threads em C

Programando com Threads em C Programando com Threads em C O que são Threads? Linhas de execução concorrentes Memória (pilha) independente Podem compartilhar áreas de memória Início Processo 1 Threads Fim Problemas Sincronização entre

Leia mais

Programação Concorrente em Java

Programação Concorrente em Java Programação Concorrente em Java Prof. Orlando Loques - IC/UFF versão 17-04-2001 Referências: - Programação Concorrente em Java, Sérgio Teixeira de Carvalho & Leonardo N. M. Reis IC-UFF - Ousterhout, J.:

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

Array em Java. Figura 1 - Exemplo de um array de inteiros

Array em Java. Figura 1 - Exemplo de um array de inteiros Array em Java 1. Objetivos Nesta lição, abordaremos Array em Java. Primeiro, definiremos o que é array e, então, discutiremos como declará-los e usá-los. Ao final desta lição, o estudante será capaz de:

Leia mais

Rotinas, Modos e Tipos de Passagem de Parâmetros

Rotinas, Modos e Tipos de Passagem de Parâmetros Linguagens de Programação Rotinas, Modos e Tipos de Passagem de Parâmetros Carlos Bazilio carlosbazilio@id.uff.br http://www.ic.uff.br/~bazilio/cursos/lp Chamada de Rotinas Rotina f Rotina g(w) g (k) Passagem

Leia mais

Aula 4 Estruturas de Controle

Aula 4 Estruturas de Controle UNIP Universidade Paulista Ciência da Computação Aula 4 Estruturas de Controle Prof. Célio Ricardo Castelano 1 Tópicos Abordados 1) Instruções de seleção em Java: 2) Instruções de repetição em Java: 2

Leia mais

Pilhas. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP

Pilhas. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP Pilhas Algoritmos e Estruturas de Dados I Nesta aula veremos o ADT pilha Uma pilha é usada em muitas situações tais como avaliação de expressões aritméticas, chamada e retorno de procedimentos e funções

Leia mais

Sistemas Operacionais Aula 08: Sincronização de Processos. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com

Sistemas Operacionais Aula 08: Sincronização de Processos. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Sistemas Operacionais Aula 08: Sincronização de Processos Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Objetivos Introduzir o problema da seção crítica, cujas soluções podem ser usadas

Leia mais

Projeto de Linguagem. Linguagens de Programação

Projeto de Linguagem. Linguagens de Programação Projeto de Linguagem Renato Ferreira Linguagens de Programação Linguagens são adotadas para preencher uma demada Facilitar uma aplicação outrora difícil/impossível Independente da qualidade da linguagem

Leia mais

Concorrência. Sistemas Distribuídos e Tolerância a Falhas. Lia Ribeiro 1

Concorrência. Sistemas Distribuídos e Tolerância a Falhas. Lia Ribeiro 1 Concorrência Sistemas Distribuídos e Tolerância a Falhas Lia Ribeiro 1 Índice Consistência Atómica e sequencial Serializability Controle de concorrência One copy Serializability 2 Exclusão Mútua Técnica

Leia mais