Programação com memória partilhada
|
|
- Salvador Canário Madureira
- 6 Há anos
- Visualizações:
Transcrição
1 Programação com memória partilhada 1
2 Multiprocessadores com memória partilhada Qualquer localização de memória pode ser acedida por qualquer processo. Só existe um espaço de endereçamento. Exige o controlo de acesso a dados partilhados. 2
3 Shared memory multiprocessor using a single bus 3
4 Diferenças entre processos e threads 4
5 Ordem de execução das instruções Exemplo Process 1 Process 2 Instruction 1.1 Instruction 2.1 Instruction 1.2 Instruction 2.2 Instruction 1.3 Instruction 2.3 Várias ordens possíveis, por exemplo: Instruction 1.1 Instruction 1.2 Instruction 2.1 Instruction 1.3 Instruction 2.2 Instruction 2.3 Assumindo que as instruções já não são divisíveis. 5
6 Otimizações do compilador / processador Para otimizar o desempenho de um programa o compilador pode trocar a ordem das instruções. Exemplo As instruções: a = b + 5; x = y + 4; Podem ser executadas pela ordem inversa: x = y + 4; a = b + 5; A lógica do programa não é alterada. 6
7 Threads em python: class threading.thread (group=none, target=none, name=none, args=(), kwargs={}, daemon=none) group - deve ser None; reservado para futura implementação de uma classe ThreadGroup target - callable object (função) que será invocado no método run. Name nome da thread, por omissão: Thread-N com n inteiro args - argumentos para a função target 7
8 Threads em python: class threading.thread (group=none, target=none, name=none, args=(), kwargs={}, daemon=none) kwargs - dicionário de arguments para a função target daemon - explicita se a thread é daemon Se uma subclasse de Thread sobrepõe o construtor, tem de invocar o construtor da classe Thread (Thread. init ()) antes de qualquer outra instrução. 8
9 Threads em python: #Hello_world.py # Importar Thread e sleep from threading import Thread from time import sleep # A classe exemplo irá ser subclasse de Thread class Exemplo1(Thread): def init (self): Thread. init (self) self.message = "Hello Parallel example!\n" #Método que imprime a mensagem def print_message(self): print (self.message) 9
10 Threads em python: ##O método run vai ser executado pela thread def run(self): print ("Thread Starting\n") x=0 while (x < 10): self.print_message() sleep(2) x += 1 print ("Thread Ended\n") 10
11 # Início do processo principal print ("Process Started") Threads em python: # Criar uma instância da classe Exemplo1 hello_python = Exemplo1() # Iniciar a thread hello_python.start() #Fim do processo principal print ("Process Ended") 11
12 Output: Process Started Thread Starting Hello Parallel example! Process Ended Hello Parallel example! Hello Parallel example! Hello Parallel example! Hello Parallel example! Hello Parallel example! Hello Parallel example! Hello Parallel example! Hello Parallel example! Hello Parallel example! Thread Ended 12
13 Threads em python: # Exemplo2 criar thread usando diretamente a classe #Thread import threading def function(i): print ("function called by thread %i\n" %i) return Função a ser invocada no run da Thread threads = [] for i in range(5): t = threading.thread (target=function, args=(i,)) threads.append(t) t.start() t.join() # processo principal espera que a t termine 13
14 Threads em python: # Exemplo 2 cria 5 threads Podemos substituir: threads = [] for i in range(5): t = threading.thread (target=function, args=(i,)) threads.append(t) t.start() t.join() Por: threads = [ threading.thread (target=function, args=(i,)) for i in range (5) ] [t.start() for t in threads] [t.join() for t in threads] 14
15 Output: function called by thread 0 function called by thread 1 function called by thread 2 function called by thread 3 function called by thread 4 15
16 # Obter o nome da thread import threading import time Threads em python: def first_function(): print (threading.currentthread().getname()+\ str(' is Starting \n')) time.sleep(2) print (threading.currentthread().getname()+\ str( ' is Exiting \n')) return 16
17 def second_function(): def third_function(): Threads em python: if name == " main ": t1 = threading.thread\ (name='first_function', target=first_function) t1.start() t1.join() 17
18 first_function is Starting Threads em python: Output: second_function is Starting third_function is Starting first_function is Exiting second_function is Exiting third_function is Exiting 18
19 Exemplo3 Threads em python: import threading import time Subclasse de Thread class mythread (threading.thread): def init (self, threadid, name, counter): threading.thread. init (self) self.threadid = threadid self.name = name self.counter = counter Sobrepor init 19
20 Threads em python: Exemplo3 def run(self): print ("Starting " + self.name + "\n") print_time(self.name, self.counter, 5) print ("Exiting " + self.name + "\n") Sobrepor run def print_time(threadname, delay, counter): while counter: time.sleep(delay) print ("%s: %s" % (threadname, time.ctime(time.time()))) counter -= 1 20
21 Exemplo3 Threads em python: #Main if name == ' main ': # Criar duas threads thread1 = mythread(1, "Thread-1", 1) thread2 = mythread(2, "Thread-2", 2) # Iniciar as threads criadas thread1.start() thread2.start() # Esperar que as threads terminem a execução thread1.join() thread2.join() print ("Exiting Main Thread") 21
22 Starting Thread-1 Threads em python: Starting Thread-2 Thread-1: Sun Mar 4 22:00: Thread-2: Sun Mar 4 22:00: Thread-1: Sun Mar 4 22:00: Thread-1: Sun Mar 4 22:00: Thread-2: Sun Mar 4 22:00: Thread-1: Sun Mar 4 22:00: Thread-1: Sun Mar 4 22:00: Exiting Thread-1 Thread-2: Sun Mar 4 22:00: Thread-2: Sun Mar 4 22:00: Thread-2: Sun Mar 4 22:00: Exiting Thread-2 Exiting Main Thread 22
23 Thread-Safe Routines Uma função diz-se Thread safe se pode ser chamada simultaneamente por várias threads e produzir sempre resultados corretos. Standard I/O é thread safe (as mensagens são impressas sem intercalação de carateres.) Funções que acedem a dados partilhados devem ser thread safe. 23
24 Acesso a dados partilhados: Sejam dois processos, cada um vai adicionar uma unidade à variável partilhada x: É necessário ler a variável x, adicionar 1 e escrever o resultado novamente em x. 24
25 Conflito no acesso à variável partilhada 25
26 Secção crítica e exclusão mútua É necessário um mecanismo que assegure que apenas um processo de cada vez acede às secções de código que envolvem variáveis partilhadas (secções críticas), (sto é, evitar race conditions. Isto é, queremos assegurar que cada secção crítica (S.C.) é executada em exclusão mútua. 26
27 Locks Mecanismo mais simples, para assegurar exclusão mútua. Um lock é uma variável que contém o valor 1 se um processo entrou na S.C e tem o valor 0 se nenhum processo está na S.C.. Um processo que tenta entrar na S.C e vê que o lock está 0, avança, fechando o lock, isto é, colocando lock a 1. Quando sai da S.C volta a abrir o lock (isto é, coloca-o a 0). 27
28 Controlo de S.C. através de espera ativa 28
29 Locks em Python GIL Global Interpreter Lock Em python, existe um lock global, GIL, que qualquer thread tem que deter para conseguir executar. O interpretador vai escalonar uma nova thread após um número de instruções pré-determinado. O GIL é também libertado quando ocorre uma operação de I/O. 29
30 Locks em Python my_lock= threading.lock() my_lock.acquire() s.c. my_lock. release() 30
31 Deadlock Pode ocorrer entre dois processos, quando P1 necessita de um recurso detido por P2, e P2 necessita de um recurso detido por P1. 31
32 Deadlock (deadly embrace) 32
33 Locks em Python [ Variáveis partilhadas em python: xpto = 10 def f1(): print (xpto) def f2(): print(xpto) if name == " main ": f1() f2() print(xpto) output:? 33
34 xpto = 10 def f1(): xpto = xpto +1 print (xpto) def f2(): print(xpto) Locks em Python Nova variável local a f1() if name == " main ": f1() f2() print(xpto) Erro: **** f1() File "D:\_PPD_17_18-mestrado\pratica\gblobais1.py", line 4, in f1 xpto = xpto +1 UnboundLocalError: local variable 'xpto' referenced before assignment 34
35 xpto = 10 Locks em Python def f1(): global xpto xpto += 2 print (xpto) def f2(): global xpto xpto -= 1 print(xpto) if name == " main ": f1() f2() print (xpto) Output:?? Estudar: - passagem de parâmetros em python 35
36 class c: def init (self, att=none ): self.att = att def set_att(self, x): self.att = x def get_att (self): return self.att Locks em Python def str (self): return "Conteúdo do objeto: " + str(self.att) if name == " main ": c1 = c() c1.set_att("abc") c2 = c("xpto") print (c1.str()) print (c2.str()) Output: Conteúdo do objeto: ABC Conteúdo do objeto: XPTO 36
37 Locks em Python c1 = c() def f1(c): c.set_att("f1") print (c1.str()) def f2(c): c.set_att("f2") print (c.str()) if name == " main ": print (c1.str()) f1(c1) f2(c1) print (c1.str()) c2 = c("xpto") print (c2.str()) Output:??? 37
38 Locks em Python Output: Conteúdo do objeto: None Conteúdo do objeto: F1 Conteúdo do objeto: F2 Conteúdo do objeto: F2 Conteúdo do objeto: XPTO 38
39 Exemplo: Locks em Python import threading shared_resource_with_lock = 0 COUNT = shared_resource_lock = threading.lock() S.C. executada em exclusão mútua def increment_with_lock(): global shared_resource_with_lock for i in range(count): shared_resource_lock.acquire() shared_resource_with_lock += 1 shared_resource_lock.release() 39
40 Exemplo: Locks em Python def decrement_with_lock(): global shared_resource_with_lock for i in range(count): shared_resource_lock.acquire() shared_resource_with_lock -= 1 shared_resource_lock.release() S.C. executada em exclusão mútua if name == " main ": t1 = threading.thread(target = increment_with_lock) t2 = threading.thread(target = decrement_with_lock) t1.start() t2.start() t1.join() t2.join() print ("the value of shared variable with lock management is %s"\ %shared_resource_with_lock) 40
41 RLocks em Python threading.rlock Lock reentrante ou recursivo rlock = threading.rlock() rlock.acquire() S.C. rlock.release() Exemplo 41
42 RLocks em Python class Box: lock = threading.rlock() # variável de classe def init (self): self.total_items = 0 def execute(self,n): Box.lock.acquire() self.total_items += n Box.lock.release() def add(self): Box.lock.acquire() self.execute(1) Box.lock.release() def remove(self): Box.lock.acquire() self.execute(-1) Box.lock.release() 42
43 def adder(box,items): while items > 0: print ("adding 1 item in the box\n") box.add() time.sleep(5) items -= 1 RLocks em Python def remover(box,items): while items > 0: print ("removing 1 item in the box") box.remove() time.sleep(5) items -= 1 43
44 RLocks em Python if name == " main ": items = 5 print ("putting %s items in the box " % items) box = Box() # ojecto partilhado t1 = threading.thread(target=adder,args=(box,items)) t2 = threading.thread(target=remover,args=(box,items)) t1.start() t2.start() t1.join() t2.join() print ("%s items still remain in the box " % box.total_items) 44
45 RLocks em Python Output: putting 5 items in the box adding 1 item in the box removing 1 item in the box removing 1 item in the box adding 1 item in the box removing 1 item in the box adding 1 item in the box adding 1 item in the box removing 1 item in the box adding 1 item in the box removing 1 item in the box 0 items still remain in the box 45
46 Semáforos Tipo abstrato de dados representado por um valor inteiro e manipulado por duas operações: Operação P num semáforo s - O processo espera até que s seja maior que 0, após o que decrementa s de 1 e continua a execução Operação V num semáforo s - O processo incrementa s de 1 e liberta um dos processos em espera (se algum) 46
47 - P e V são operações atómicas. - O mecanismo para ativar os processos em espera é implícito nas operações P e V. É esperado que o algoritmo seja justo. - Processos suspensos por P(s) permanecem em espera até serem libertados por uma operação V(s) no mesmo semáforo. - Proposto por Dijkstra in Letra P vem da palavra alemã passeren, que significa passar a letra V vem da palavra alemã vrijgeven, que significa libertar. 47
48 Exclusão mútua entre secções criticas pode ser obtida com um semáforo que pode ter os valores 0 ou 1 (semáforo binário) que atua como um lock. Process 1 Process 2 Process 3 Noncritical section Noncritical section Noncritical section P(s) P(s) P(s) Critical section Critical section Critical section V(s) V(s) V(s) Noncritical section Noncritical section Noncritical section 48
49 Semáforo não binário Pode tomar valores positivos diferentes de 0 e 1. Permite por exemplo quantificar o número de processos que pode aceder simultaneamente a um recurso. 49
50 Semáforos em python class threading.semaphore(value=1) Representa um contador atómico que contém o número de invocações ao método release() menos o número de invocações ao método acquire() mais o valor inicial do semáforo (valor de omissão: 1). Se é atribuído um valor negativo à variável do semáforo, é gerada a exceção (ValueError) sem = threading.semaphore(1) sem.acquire() s.c. sem.release() 50
51 Semáforos em python Exemplo (produtor/consumidor): import threading import time import random semaphore = threading.semaphore(0) def consumer(): global item print ("consumer is waiting.") semaphore.acquire() print ("Consumer notify : consumed item nº %s " %item) 51
52 Semáforos em python def producer(): global item time.sleep(10) item = random.randint(0,1000) print ("producer notify : producted item number %s" %item) semaphore.release() if name == ' main ': for i in range (0,5) : t1 = threading.thread(target=producer) t2 = threading.thread(target=consumer) t1.start() t2.start() t1.join() t2.join() print ("program terminated.") 52
53 Um output: Semáforos em python consumer is waiting. producer notify : producted item number 349 Consumer notify : consumed item number 349 consumer is waiting. producer notify : producted item number 37 Consumer notify : consumed item number 37 consumer is waiting. producer notify : producted item number 355 Consumer notify : consumed item number 355 consumer is waiting. producer notify : producted item number 876 Consumer notify : consumed item number 876 consumer is waiting. producer notify : producted item number 400 Consumer notify : consumed item number 400 program terminated. 53
54 Monitores Conjunto de procedimentos que fornecem o único acesso a um recurso partilhado. Apenas um processo de cada vez pode executar um procedimento do monitor. Pode ser implementado usando um semáforo ou um lock para proteger a execução do método: monitor_proc1() { lock(x); monitor body. unlock(x); return; } 54
55 Condition Variables Muitas vezes uma S.C. deve ser executada se uma determinada condição ocorre, por exemplo se uma variável atinge um determinado valor. Com locks, a condição tem de estar sistematicamente a ser testada (pooled) dentro da S.C. Tarefa que consome tempo e pouco produtiva e que pode ser evitada com condition variables. 55
56 Em python: Condition Variables (c.v.) cond = Condition() # Uma c.v. tem um lock associado cond.acquire() # A tread adquire o lock cond.release() # A thread liberta o lock 56
57 Condition Variables (c.v.) cond.wait() # o lock é libertado e a thread é suspensa até que uma outra execute um notify na mesma c.v. cond.notify() # uma das threads suspensas na c.v. é acordada e pode readquirir o lock, após este ser libertado pela thread que executa o notify. cond.notify_all() # todas as threds suspensas no lock são acordadas # e podem competir pelo lock. 57
58 Condition Variables (c.v.) Exemplo: from threading import Thread, Condition import time items = [] condition = Condition() class consumer(thread): def init (self): Thread. init (self) 58
59 Condition Variables (c.v.) def consume (self): global condition global items condition.acquire() if len(items) == 0: print("consumer notify : no item to consume") condition.wait() items.pop() print("consumer notify : consumed 1 item") print("consumer notify : items to consume are + str(len(items))) condition.notify() condition.release() 59
60 Condition Variables (c.v.) def run(self): for i in range(0,20): time.sleep(10) self.consume() # thread Consumer class producer(thread): def init (self): Thread. init (self) 60
61 def produce(self): global condition global items Condition Variables (c.v.) condition.acquire() if len(items) == 10: condition.wait() print("producer notify : items produced are + str(len(items))) print("producer notify : stop the production!!") items.append(1) print("producer notify : total items produced + str(len(items))) condition.notify() condition.release() 61
62 def run(self): for i in range(0,20): time.sleep(5) self.produce() Condition Variables (c.v.) if name == " main ": producer = producer() consumer = consumer() producer.start() consumer.start() producer.join() consumer.join() 62
63 Events Um evento é um objeto que serve para comunicar entre Threads. e = Event() São baseados numa flag que suporta as operações: e.set() # atribui o valor true e.clear() # atribuiu o valor false e.wait() # bloqueia a thread até que a flag seja true. 63
64 Exemplo: Events import time from threading import Thread, Event import random items = [] event = Event() class consumer(thread): def init (self, items, event): Thread. init (self) self.items = items self.event = event 64
65 Exemplo: Events def run(self): while True: time.sleep(2) self.event.wait() item = self.items.pop() print ('Cons. notify : %d popped from list by %s' %(item, self.name)) self.event.clear() print ('Produce notify : event cleared by %s \n' % self.name) 65
66 Exemplo: class producer(thread): def init (self, integers, event): Thread. init (self) self.items = items self.event = event Events def run(self): for i in range(100): time.sleep(2) item = random.randint(0, 256) self.items.append(item) print ('Prod notify: item %d appended to list by %s' % (item, self.name)) print ('Producer notify : event set by %s' % self.name) self.event.set() 66
67 Exemplo: Events if name == ' main ': t1 = producer(items, event) t2 = consumer(items, event) t1.start() t2.start() t1.join() t2.join() 67
68 Exemplos noutras linguagens: 68
69 Program To sum the elements of an array, a[1000]: int sum, a[1000]; sum = 0; for (i = 0; i < 1000; i++) sum = sum + a[i]; 69
70 UNIX Processes Calculation will be divided into two parts, one doing even i and one doing odd i; i.e., Process 1 Process 2 sum1 = 0; sum2 = 0; for (i = 0; i < 1000; i = i + 2) for (i = 1; i < 1000; i = i + 2) sum1 = sum1 + a[i]; sum2 = sum2 + a[i]; Each process will add its result (sum1 or sum2) to an accumulating result, sum : sum = sum + sum1; sum = sum + sum2; Sum will need to be shared and protected by a lock. Shared data structure is created: 70
71 Shared memory locations for UNIX program example 71
72 72
73 73
74 74
75 75
76 76
77 77
78 Pthreads Example n threads created, each taking numbers from list to add to their sums. When all numbers taken, threads can add their partial results to a shared location sum. The shared location global_index is used by each thread to select the next element of a[]. After index is read, it is incremented in preparation for the next element to be read. The result location is sum, as before, and will also need to be shared and access protected by a lock. 78
79 Shared memory locations for Pthreads program example 79
80 80
81 81
82 Java Example 82
83 83
84 84
Programação em sistemas de memória distribuída
Programação em sistemas de memória distribuída (Message-Passing Computing) Slides for Parallel Programming Techniques & Applications Using Networked Workstations & Parallel Computers 2nd Edition, by B.
Programação com memória partilhada (exemplos)
Programação com memória partilhada (exemplos) 1 A classe queue.queue Classe que implementa uma fila (FIFO) sincronizada. - Usa locks para bloquear threads que competem pelo acesso aos elementos da fila.
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:
Universidade da Beira Interior. Sistemas Distribuídos. Folha 4-1. Threads Daemon Threads
Threads Daemon Threads Folha 4-1 Uma Thread Daemon é uma Thread, geralmente usada para executar serviços em background, que tem a particularidade de terminar automaticamente após todas as Threads não Daemon
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
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
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
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
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,
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
Programação Concorrente e Paralela. Noemi Rodriguez
2013 Objetivos princípios e técnicas de programação concorrente multiprocessadores memória compartilhada troca de mensagens obs: diferentes níveis de abstração! que princípios e técnicas são esses? notações
[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.
Programação Concorrente [Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999. [Gosling] The Java Language Specification James Gosling, Bill Joy and Guy Steele,
[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.
Cap. IV - Programação Concorrente [Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999. [Gosling] The Java Language Specification James Gosling, Bill Joy and
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
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
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.
Introdução a Programação Concorrente. Aula 02. Prof. André Luis Meneses Silva
Introdução a Programação Concorrente Aula 02 Prof. André Luis Meneses Silva Agenda Pthreads Trabalhando com Threads Exclusão Mútua Semáforos Pthreads Históricamente, fabricantes de hardware implementam
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
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
[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.
Cap. IV - Programação Concorrente [Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999. [Gosling] The Java Language Specification James Gosling, Bill Joy and
Introdução ao IDE Netbeans (Programação Java)
Universidade Federal do ABC Disciplina: Processamento da Informação (BC-05045) Assunto: Introdução ao IDE Netbeans Introdução ao IDE Netbeans (Programação Java) Conteúdo 1. Introdução... 1 1.1. Programas
Comparando threads em Python vs. Java
Comparando threads em Python vs. Java Bruno Menegola 1 1 Instituto de Informática Universidade Federal do Rio Grande do Sul (UFRGS) Caixa Postal 15.064 91.501-970 Porto Alegre RS Brazil bmenegola@inf.ufrgs.br
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
Python: Exceções, Iteradores e Geradores. Claudio Esperança
Python: Exceções, Iteradores e Geradores Claudio Esperança Exceções Quando um programa encontra dificuldades não previstas, diz se que uma condição excepcional ou uma exceção ocorreu Um erro é uma exceção
Arquitetura de Sistemas Operativos
Arquitetura de Sistemas Operativos Sistemas Operativos 2011/2012 1 Um processo é uma instância em execução de um programa. No sistema operativo Unix a única forma de se criar um novo processo (processo-filho)
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
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
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
Threads. O que é uma Thread? Paralelismo
Threads em Java 1 O que é uma Thread? Paralelismo Threads Multi- threading é o mecanismo de concorrência suportado explicitamente pela linguagem Java. Os mecanismos de gerenciamento e sincronização de
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
Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.
Threads Folha 5-1 Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads. Uma Thread é similar a um processo no sentido em que corresponde a um conjunto de instruções
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.
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
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
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
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
Threads. Leonardo Gresta Paulino Murta
Threads Leonardo Gresta Paulino Murta leomurta@ic.uff.br Aula de hoje Estudaremos a execução em paralelo de programas em Java por meio de Threads Leonardo Murta Threads 2 Por que usar Threads? Threads
Capítulo 7. Expressões e Sentenças de Atribuição
Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário
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
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
Programação em Paralelo OpenMP
Programação em Paralelo OpenMP N. Cardoso & P. Bicudo Física Computacional - MEFT 2012/2013 N. Cardoso & P. Bicudo Programação em Paralelo: OpenMP 1 / 15 Introdução Potencial do GPU vs CPU Cálculo: 367
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
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
Programação Orientada a Objectos - P. Prata, P. Fazendeiro
3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem
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
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
Threads em Java. Java Threads. Java Componentes: JVM JVM:
Threads em Java (Aula 17) Java Threads Difícil de classificar com user thread ou kernel thread As threads Java são gerenciadas pela JVM. Threads em Java podem ser criadas das seguintes maneiras: Fazendo
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.:
Informática II Cap. 4-2
Cap. 4-2 1 Estruturas de Controlo O VBA tem diversas estruturas de controlo que podemos utilizar para controlar o fluxo de execução dos programas (procedimento ou conjunto de procedimentos que participam
Threads. Linguagem Java. Adenilso da Silva Simão 17/05/05
17/05/05 Uma thread é uma linha de execução dentro de um programa Conceito de SO Java implementa suporte nativo a threads Duas formas de se implementar Implementando a interface Runnable Deve-se sobrepor
AULAS TEÓRICO-PRÁTICAS DE COMPILADORES. 2º semestre de 2002/ Algoritmo Iterativo para Determinar Funções Recursivas
AULA EÓICO-ÁICA DE COMILADOE AULA Nº 3 (3 horas) 2º semestre de 2002/2003 1 Algoritmo Iterativo para Determinar Funções ecursivas Esta aula pretende representar uma classe de algoritmos muito utilizada
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
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
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
FUNDAMENTOS DA PROGRAMAÇÃO 2º Teste, 1 de junho de 2013, 1h30m
FUNDAMENTOS DA PROGRAMAÇÃO 2º Teste, 1 de junho de 2013, 1h30m 1. (3.25) Escreva um programa que pede o nome (mais de 2 caracteres) e o sobrenome (mais de 4 caracteres) a um utilizador e gera um username
Programação I Aula 17 Correção de programas Pedro Vasconcelos DCC/FCUP
Programação I Aula 17 Correção de programas DCC/FCUP DCC/FCUP 2019 1/ 30 Nesta aula 1 Classes de erros 2 Execução passo-a-passo 3 Testes na documentação 4 Asserções 5 Outros erros comuns DCC/FCUP 2019
Concorr^encia. A classe Thread (java.lang)
Concorr^encia I Concorr^encia em Java I MultiThreadin I sincronizac~ao I interface Runnable I rupos de threads I exemplos Complementos de Proramac~ao e Aloritmos { LEIC A classe Thread (java.lan) Os threads
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
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
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
PROGRAMAÇÃO E PYTHON. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes
Sjsoft, http://westmarch.sjsoft.com/2012/11/zen-of-python-poster/ PROGRAMAÇÃO E PYTHON Laboratórios de Informática 2014-2015 João Paulo Barraca, André Zúquete, Diogo Gomes Porquê Programar? Com ferramentas
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
Pragmática das Linguagens de
Instituto Superior Técnico Pragmática das Linguagens de Programação 2004/2005 Primeiro Exame/Segundo Teste 17/12/2004 Número: Turma: Nome: Escreva o seu número em todas as folhas do teste. O tamanho das
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)
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
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
Programação orientada a objetos
Programação orientada a objetos Python fornece suporte para programação orientada a objetos: foco na criação de objetos, contendo simultaneamente dados e funcionalidade definição de objetos corresponde
Curso de Python em 5 Horas
Curso de Python em 5 Horas Classes e Trabalhando com Arquivo Gustavo Sverzut Barbieri GPSL - UNICAMP 12 de maio de 2005 ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de
Aula 21 Ordenação externa
MC3305 Algoritmos e Estruturas de Dados II Aula 21 Ordenação externa Slides adaptados de Brian Cooper (Yahoo Research) Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 2Q-2015 1 Números de Ackermann
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
Programação Concorrente e Paralela
2010.2 Objetivos princípios e técnicas de programação paralela multiprocessadores memória compartilhada troca de mensagens arquiteturas alternativas multicomputadores troca de mensagens obs: Essa troca
Computadores e Programação
Computadores e Programação Engenharia Física Engenharia Biomédica 2008 2009 2 o semestre Helmut Wolters, Jorge Landeck, Miguel Oliveira helmut@coimbra.lip.pt 2009-04-01 H.Wolters, J.Landeck, M.Oliveira
Lista de Linguagens de Programação 16
Lista de Linguagens de Programação 16 Nome: Matrícula: Os exercícios desta lista devem ser todos implementados em Python. 1. Este exercício faz referência às classes implementadas em Python disponíveis
Prova Final de Linguagens de Programação - DCC024 - Sistemas de Informação
Prova Final de Linguagens de Programação - DCC024 - Sistemas de Informação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta.
Arquitetura de Sistemas Operativos
Arquitetura de Sistemas Operativos Sistemas Operativos 2011/2012 1 Threads Conceito Um processo é um programa em execução. A execução de um processo é sequencial: pode-se caracterizar um processo pelo
Lição 4 Fundamentos da programação
Lição 4 Fundamentos da programação Introdução à Programação I 1 Objetivos Ao final desta lição, o estudante será capaz de: Identificar as partes básicas de um programa em Java Reconhecer as diferenças
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
Fundamentos da Programação
Fundamentos da Programação Solução do Primeiro Teste 29 de Março de 2014 09:00 10:30 1. (1.0) O que é um processo computacional? Qual a relação entre um programa e um processo computacional? Um processo
Fundamentos da Programação
Fundamentos da Programação Solução do Exame 13 de Janeiro de 2017 09:00 11:00 1. Indique se cada uma das seguintes afirmações é verdadeira ou falsa. No caso de ser falsa, justifique de forma sucinta. (a)
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
Expressões e Instruções de Atribuição. George Darmiton da Cunha Cavalcanti
Expressões e Instruções de Atribuição George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução Expressões Aritméticas Operadores Sobrecarregados Conversões de Tipo Expressões Relacionais
Usando gráficos python e arduino
[1] maregito [1] 11:04 30 jun, 2015 [2] Bom final de dia Galerinha do Módulo 2! Segue um pequeno exemplo de como juntar o arduino com o pyhon. Este gráfico permite até 6 linhas simultaneamente, basta conectar
Arquitetura de Sistemas Operativos
Arquitetura de Sistemas Operativos Sistemas Operativos 2011/2012 1 Requisitos de uma Secção Crítica Requisitos de uma Secção Crítica Antes de analisarmos as várias soluções para assegurar que um bloco
Threads. Agenda. Threads. Processo. Processo. Processo. Processo. (c) Volnys B. Bernal Versão de 22/3/2012
1 2005-2009 Volnys Bernal 1 2005-2009 Volnys Bernal 2 Agenda Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Interface de threads Interfaces de threads de usuário x threads de núcleo
Programação em Matlab. Apenas Âmbito e Erros de programação
Programação em Matlab Apenas Âmbito e Erros de programação Âmbito O âmbito de um identificador é o conjunto das regiões de código dentro das quais esse identificador pode ser usado. Uma variável definida
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
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
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
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
Estruturas de controle no nível de sentença
Estruturas de controle no nível de sentença Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons
Lista de Linguagens de Programação 7
Lista de Linguagens de Programação 7 Nome: Matrícula: 1. Dizemos que uma linguagem é segura quando esta linguagem não permite que operações sejam aplicadas a argumentos que não possuam os tipos previstos
Fundamentos da Programação
Fundamentos da Programação Solução do Exame 1 de Fevereiro de 2019 09:00 11:00 1. Usando palavras suas e, no máximo, em cinco linhas responda às seguintes questões. Respostas dadas através de exemplos
Prova Final de Linguagens de Programação - DCC024B -
Prova Final de Linguagens de Programação - DCC024B - Ciência da Computação Nome: Eu dou minha palavra de honra que não trapacearei neste exame. Número de matrícula: As regras do jogo: A prova é sem consulta.
Sistemas Operacionais
Sistemas Operacionais Aula 9 Threads Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso Threads Uma thread
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
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)
PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015
PRIMEIROS PASSOS COM PYTHON Prof. Msc. Luis Filipe Alves Pereira 2015 PRIMEIROS PASSOS COM PYTHON 02/47 O QUE É PYTHON? Python é uma linguagem de propósito geral, de alto nível e interpretada Python será
Modelagem e implementação de programas concorrentes
Modelagem e implementação de programas concorrentes Aula 3 DCC-UFMG 2010 Bibliograa G.R. Andrews. Foundations of Multithreaded, Parallel, and Distributed Programming. Addison-Wesley, 1999. M. Ben-Ari.