Programação de Arquiteturas com Memória Compartilhada Utilizando Pthreads
|
|
- Paula Arruda
- 5 Há anos
- Visualizações:
Transcrição
1 Programação de Arquiteturas com Memória Compartilhada Utilizando Pthreads MCZA Programação Paralela Emilio Francesquini e.francesquini@ufabc.edu.br 2019.Q1 Centro de Matemática, Computação e Cognição Universidade Federal do ABC
2 Disclaimer Estes slides foram preparados para o curso de Programação Paralela na UFABC. Estes slides são baseados naqueles produzidos por Peter Pacheco como parte do livro An Introduction to Parallel Programming disponíveis em: Este material pode ser usado livremente desde que sejam mantidos, além deste aviso, os créditos aos autores e instituições. Algumas figuras foram obtidas em: 1
3 Roteiro Processos, Threads e Pthreads Hello world! Multiplicação Vetor/Matriz Sessões críticas Laços de espera ocupada Mutexes Produtores-Consumidores Barreiras e variáveis de condição Travas de leitura/escrita Uma nota sobre false sharing e caches Thread-Safety 2
4 Processos, Threads e Pthreads
5 Um sistema com memória compartilhada CPU CPU CPU CPU Interconnect Memory 3
6 Processos e Threads Um processo é uma instância de um programa em execução Pode estar executando ou suspenso por diversos motivos Threads são semelhantes a processos, mas são mais leves São, inclusive, chamadas de processos leves por alguns Em um programa que se utiliza de memória compartilhada, um processo pode ter múltiplos threads de controle 4
7 POSIX Threads - Pthreads POSIX Threads ou Ptreads Padrão para sistemas operacionais estilo Unix Biblioteca que pode ser utilizada por programas em C Especifica uma interface de programação (API) para programação multi-threaded 5
8 Atenção! A API Pthreads só está disponível em sistemas POSIX como Linux BSD MacOS X Solaris HPUX No Windows há uma API equivalente que não será coberta neste curso Contudo, a maior parte do que for falado aqui tem o seu equivalente direto 6
9 Hello world!
10 Hello world multi-threaded! int 7 8 void void 9 10 long long \n return
11 Hello world multi-threaded! int int char 4 long thread sizeof for thread thread thread 13 thread 14 void thread
12 Hello world multi-threaded! \n 4 5 for thread thread thread 6 thread return 10 9
13 Compilando um programa com Pthreads É preciso informar ao GCC (ou ao seu compilador preferido) que utilizaremos a biblioteca pthread 1 10
14 Executando o nosso Hello World!
15 Variáveis globais Podem introduzir no seu programa problemas sutis e confusos! Restrija o uso de variáveis globais ao máximo 1 Em um ambiente multi-threaded, variáveis que são acessíveis por mais de uma thread (globais ou não) são chamadas variáveis compartilhadas (shared variables) 1 A princípio é uma dica válida para quaisquer programas, paralelos ou não! 12
16 Iniciando threads Os processos em MPI são criados pelo ambiente MPI, tipicamente pelo ou Em Phthreads, cada uma das threads são criadas explicitamente pelo próprio programa 13
17 Iniciando threads O cabeçalho contém as declarações dos protótipos utilizados para programação multi-threaded Cada uma das threads é representada por uma struct Esta estrutura é opaca, ou seja, varia de implementação para implementação (de SO para SO e, em alguns casos, dentro de um mesmo próprio SO) 1 int 2 3 const 4 void void 5 void 14
18 pthread_t Opaco Os dados que ele contém são específicos e variam de sistema para sistema Não são diretamente acessíveis para o código do usuário Contudo, o padrão Phtread especifica que o um pode ser utilizado para identificar unicamente o thread ao qual está associado 15
19 Vamos olhar um pouco mais de perto 1 int 2 3 const 4 void void 5 void Onde serão armazenados os dados relativos ao thread. Aloque antes de passar como parâmetro 16
20 Vamos olhar um pouco mais de perto 1 int 2 3 const 4 void void 5 void Não utilizaremos no momento. Mas é onde pode-se estabelecer prioridades, tamanhos de heap, As opções disponíveis dependem do SO 17
21 Vamos olhar um pouco mais de perto 1 int 2 3 const 4 void void 5 void Ponteiro para a função a ser executada pelo thread quando ele foi iniciado 18
22 Vamos olhar um pouco mais de perto 1 int 2 3 const 4 void void 5 void Ponteiro a ser passado como parâmetro para a função 19
23 pthread_create - Função inicial Protótipo: 1 void void pode sofrer um cast de e para qualquer outro tipo de ponteiro em C Logo, pode ser um ponteiro para qualquer estrutura de dados, incluindo vetores De modo equivalente, o retorno do tipo pode ser utilizado da mesma maneira 20
24 Execução dos threads A thread principal faz um fork e um join de dois threads. Main Thread 0 Thread 1 21
25 Parando os threads Podemos chamar a função uma vez para cada thread Uma chamada para a função fica bloqueada até que o thread, representado por tenha completado a execução Não há uma maneira segura de interromper a força uma thread durante a sua execução. Tipcamente o que fazemos é escrever em uma variável compartilhada, que é checada de tempos em tempos pela thread em execução, que indica que ela deve finalizar a sua execução. 22
26 Multiplicação Vetor/Matriz
27 Multiplicação Vetor/Matriz a00 a10... a01 a11... ai0 ai am 1,0 am 1,1 a0,n 1 a1,n 1... ai,n 1... am 1,n 1 x0 x1... xn 1 = y0 y1... yi = ai0 x0 + ai1 x1 + ai,n 1 xn 1... ym 1 23
28 Pseudocódigo sequencial 1 2 for for 6 7 n 1 y i = a ij x j j=0 24
29 Usando 3 Pthreads Thread Componentes de Assim, a thread 0 deverá executar: 1 2 for 3 E de maneira mais geral, a thread que tiver recebido deverá executar: 1 2 for 3 25
30 Multiplicação matriz/vetor - Código 1 void void 2 long long 3 int 4 int 5 int 6 int 7 8 for 9 10 for return 15 26
31 Seções críticas
32 Estimando π ( π = ) ( 1)n 2n double 2 double 3 for
33 Estimando π Não é a fórmula que converge mais rápido, ela precisa de muitos termos para chegar a uma boa precisão π Thread Threads Note que conforme cresce, a estimativa com 1 thread melhora Contudo, é boa para nossos propósitos! Podemos paralelizar o código anterior da mesma maneira que fizemos para a multiplicação vetor/matriz: particionando os índices 28
34 Uma função para π utilizando threads 1 void void 2 long long 3 double 4 long long 5 long long 6 long long 7 long long 8 9 if else for return 17 29
35 Possível condição de corrida Há uma região crítica (ou seção crítica, critical section) do código que precisa ser protegida. Tempo Thread 0 Thread 1 1 Iniciado pela thread principal 2 Chama Iniciado pela thread principal 3 Atribui Chama 4 Põe e em registradores Atribui 5 Soma 0 e 1 Põe e em registradores 6 Armazena 1 em Soma 0 e 2 7 Armazena 2 em 30
36 Laços de espera ocupada
37 Laços de espera ocupada Laços de espera ocupada (busy-waiting) são uma das soluções mais simples para lidar com condições de corrida Um thread testa repetidamente uma condição, e não faz nada até que aquela condição seja verdadeira Efetivamente não faz nada durante a execução do laço a não ser queimar ciclos Cuidado com compiladores com otimização! Eles podem reordenar o seu código! 1 2 while
38 Versão com espera ocupada 1 void void 2 long long 3 double 4 long long 5 long long 6 long long 7 long long 8 if 9 10 else for 13 while return 18 32
39 Versão com espera ocupada - Busy-wait fora do laço 1 void void 2 long long 3 double 4 long long 5 long long 6 long long 7 long long 8 if 9 10 else for while return 18 33
40 Mutexes
41 Mutexes Apesar de funcionais, os controles de acesso utilizando busy-wait são um desperdício de tempo do processador Um core rodando um thread enquanto no busy-wait não faz nenhum trabalho útil Apesar de gastar tempo e energia! Mutex (mutual exclusion, plural mutexes) é um tipo especial de variável que pode ser usada para restringir acesso à uma seção crítica do código a um único thread por vez 34
42 Mutexes Um mutex pode ser usado para garantir que uma thread exclua todas as outras threads daquela seção enquanto a estiver executando O padrão Pthreads inclui um tipo especial para mutexes: 1 int 2 3 const 35
43 Mutexes Quando um programa acaba de usar um mutex, ele deve descartá-lo usando: 1 int Quando um programa deseja entrar em uma região crítica ele deve chamar: 1 int Quando um programa deseja sair em uma região crítica ele deve 1 int 36
44 Mutexes Um mutex só pode 2 ser desbloqueado pela mesma thread que o bloqueou! 2 Talvez o melhor termo seja deveria 37
45 Versão da soma usando mutexes 1 void void 2 long long 3 double long long 4 long long 5 long long 6 long long 7 double 8 if 9 10 else for return 18 38
46 Desempenho Table 4.1 Run-Times (in Seconds) of π Programs Using n = 10 8 Terms on a System with Two Four-Core Processors Threads Busy-Wait Mutex T Sequencial T Paralelo ThreadCount 39
47 Comparação com busy-wait Table 4.2 Possible Sequence of Events with Busy-Waiting and More Threads than Cores Thread Time flag crit sect busy-wait susp susp susp 1 1 terminate crit sect susp busy-wait susp 2 2 terminate susp busy-wait busy-wait.....? 2 crit sect susp busy-wait Pergunta O busy-wait só é menos eficiente no caso onde temos mais threads do que cores? 40
48 Produtores-Consumidores
49 Motivação Laços de espera ocupada forçam uma ordem para que threads acessem a seção crítica Quando se usa mutexes não ajuda muito já que a ordem é deixada ao acaso e depende do SO Há casos onde é preciso controlar a ordem que threads acessam a seção crítica 41
50 Problemas com os mutexes void void 4 long long return 12 42
51 Uma primeira tentativa - Troca de mensagens com Pthreads void void 4 long long 5 long 6 long 7 char sizeof char 8 43
52 Uma primeira tentativa - Troca de mensagens com Pthreads if 5 \n 6 else 7 \n 8 return 9 44
53 Tentativas de conserto Busy wait 1 while 2 \n Mutexes \n 9 Funciona? 45
54 Semáforos Maneira alternativa a mutexes Um semáforo pode ser entendido como um tipo especial de contador O contador pode assumir números positivos: 0, 1, 2, Quando o semáforo é usado apenas com valores 0 e 1 dizemos que é um semáforo binário Grosseiramente falando, 0 indica travado e qualquer número maior que um destravado decrementa (se possível) o contador (equivalente ao ) incrementa o contador (equivalente ao ) 46
55 Semáforos int 5 6 int 7 unsigned 8 9 int int int 47
56 Usando semáforos para enviar mensagens void void 4 long long 5 long 6 char sizeof char 7 48
57 Usando semáforos para enviar mensagens \n 9 return 10 49
58 Semáforos Note que não há uma região crítica que queremos proteger Precisamos apenas que um thread espere pelo outro ou, em outras palavras, que um thread espere que algo seja feito por outro Este tipo de sincronização onde um thread é impedido de prosseguir até que outro thread tenha feito alguma ação é tipicamente chamado de sincronização produtor-consumidor 50
59 Barreiras e variáveis de condição
60 Barreiras Sincronizar os threads para que todos estejam no mesmo ponto da execução é chamado de barreira Nenhum thread pode passar pela barreira até que todos os threads a tenham alcançado 51
61 Usando barreiras para medir o tempo do thread mais lento 52
62 Usando barreiras para depuração 53
63 Espera ocupada e mutex Implementar uma barreira usando espera ocupada e mutexes é trivial Utiliza-se um contador compartilhado protegido pelo mutex Quando o contador indicar que todos os threads entraram na seção crítica, os threads podem sair da seção crítica 54
64 Espera ocupada e mutex 1 2 int 3 int void while Pergunta Precisamos de um contador por barreira para evitar problemas. Por quê? 55
65 Implementando uma barreira com semáforos 1 2 int void 8 56
66 Implementando uma barreira com semáforos if for 7 8 else
67 Variáveis de condição Uma variável de condição é um objeto de dados que permite um thread suspender a execução até que uma certa condição ou evento ocorra. Quando o evento ou condição ocorrer, outro thread pode ser avisar (signal) o thread suspenso para que acorde. Uma variável de condição é sempre associada a um mutex. 58
68 Variáveis de condição 59
69 Interface de variáveis de condição 1 int 2 const 3 int 4 5 int int 9 int 60
70 Implementando uma barreira com variáveis de condição 1 int void if thread else 14 while
71 Travas de leitura/escrita
72 Controlando o acesso a uma grande estrutura de dados Vamos usar um exemplo Suponha que a estrutura em questão é uma lista ligada de inteiros mantida em ordem Queremos operações, e paralelas 62
73 Listas ligadas 1 struct 2 int 3 struct 4 head_p
74 Verificando a pertinência 1 int int struct 2 struct while if 9 \n 10 return 11 else 12 \n 13 return
75 Inserção pred_p curr_p head_p temp_p 7 65
76 Inserção 1 int int struct 2 struct 3 struct 4 struct 5 6 while
77 Inserção 1 2 if 3 sizeof struct if 7 8 else 9 10 return 11 else 12 \n 13 return
78 Remoção head_p pred_p curr_p 68
79 Remoção 1 int int struct 2 struct 3 struct while
80 Remoção 1 if 2 if else return 11 else 12 \n 13 return
81 Uma lista ligada multi-threaded Vamos tentar usar essas funções em um programa com threads Para compartilhar a lista, vamos definir a variável como uma global Isto vai simplificar as funções, e já que não precisaremos passar ou um ponteiro para : basta passar o valor de interesse 71
82 Acesso simultâneo por várias threads Thread 0: curr_p head_p Thread 1: pred_p Thread 1: curr_p 72
83 Solução 1 Travamos a lista toda a toda vez que algum thread queira acessar Cada chamada para cada uma das funções precisa ser protegida por um mutex
84 Problemas da solução 1 Estamos serializando o acesso à lista Se a maior parte das nossas chamadas à lista for à função, estamos desperdiçando a oportunidade de paralelismo Por outro lado, se a maior parte das operações forem chamadas à e a, esta pode ser a melhor solução já que precisaríamos de qualquer forma serializar o acesso à lista para a maior parte dos acessos e esta solução é fácil de implementar Solução de granularidade grossa 74
85 Solução 2 Em vez de travar o acesso à lista toda, podemos travar nós individualmente Solução de granularidade fina 1 struct 2 int 3 struct
86 Problemas da solução 2 Usar essa ideia é muito mais complicada que a ideia original Também é muito mais lenta já que, em geral, cada vez que um nó for acessado um mutex precisa ser travado e destravado A adição de um mutex a cada nó da lista vai aumentar consideravelmente a quantidade de memória necessária para armazenar a lista 76
87 Implementação de Member com um mutex por nó 1 int int 2 struct if 7 8 while 9 if
88 Implementação de Member com um mutex por nó 1 2 if 3 4 if 5 6 return 7 else return
89 Travas de leitura e escrita - Pthreads Nenhuma das soluções apresentadas explora o potencial para acesso simultâneo a qualquer nó da lista quando estamos executando a função A primeira solução só permite um por vez na lista toda A segunda solução só permite um por vex por nó 79
90 Travas de leitura e escrita - Pthreads Uma trava de leitura e escrita é parecida com um mutex, contudo ela têm duas funções de trava A primeira função trava para leitura enquanto a segunda trava para escrita 80
91 Travas de leitura e escrita - Pthreads Assim múltiplos threads podem obter o lock simultaneamente chamando a função de trava para leitura enquanto apenas um thread pode obter a trava para escrita em um dado instante Logo, se threads possuem a trava para leitura, quaisquer threads que tentarem obter a trava para escrita ficarão bloqueados na chamada à função de trava 81
92 Funções 1 int 2 3 const 4 5 int 6 7 int 8 int 9 10 int 82
93 Protegendo a lista ligada
94 Desempenho Table 4.3 Linked List Times: 1000 Initial Keys, 100,000 ops, 99.9% Member, 0.05% Insert, 0.05% Delete Number of Threads Implementation Read-Write Locks One Mutex for Entire List One Mutex per Node
95 Desempenho Table 4.4 Linked List Times: 1000 Initial Keys, 100,000 ops, 80% Member, 10% Insert, 10% Delete Number of Threads Implementation Read-Write Locks One Mutex for Entire List One Mutex per Node
96 Uma nota sobre false sharing e caches
97 Caches, Coerência de caches e False-Sharing Lembre-se que os designers de chips incluíram memórias relativamente rápidas nos processadores chamadas memórias cache O uso eficiente das memórias cache pode ter um impacto significativo no desempenho de programas rodando em máquinas de memória compartilhada Um write-miss ocorre quando um core tenta atualizar uma variável que não está na cache e, consequentemente, é obrigado a acessar a memória principal. 86
98 Multiplicação matrix vetor - Pthreads 1 void void 2 long long 3 int 4 int 5 int 6 int 7 8 for 9 10 for return 15 87
99 Tempos de execução - Multiplicação Matriz vetor - Pthreads Table 4.5 Run-Times and Efficiencies of Matrix-Vector Multiplication (times are in seconds) Matrix Dimension 8,000, ,000,000 Threads Time Eff. Time Eff. Time Eff
100 Thread-Safety
101 Thread-safety Um bloco de código é thread-safe se ele pode ser executado por múltiplos threads sem que isto cause problemas 89
102 Exemplo Suponha que queiramos usar múltiplas threads para fazer a tokenização do conteúdo de um arquivo texto Cada token é simplesmente uma sequência contígua de caracteres separadas do resto do texto por espaços (espaços, tabs, quebras de linhas, ) 90
103 Abordagem simples Divida a entrada (arquivo) em linhas e atribua conjuntos de linhas a cada uma das threads usando round-robin A linha 1 vai para a thread 0 A linha 2 vai para a thread 1 A linha t vai para a thread t 1 A linha t + 1 vai para a thread 0 91
104 Abordagem simples Podemos, por exemplo, serializar o acesso às linhas do arquivo usando mutexes ou semáforos Logo depois que uma thread tiver lido uma linha do arquivo ela pode tokenizar a linha usando a função 92
105 A função strtok A primeira chamada deve conter a string a ser tokenizada e o separador Entrada: uma linha do arquivo, separador espaço Nas chamadas seguintes à, o primeiro argumento (a string a ser tokenizada) deve ser 1 char 2 char 3 const char 93
106 A função strtok A ideia por trás da função é a de que após a primeira chamada a função faça um cache do ponteiro para a string a ser tokenizada e para cada chamada seguinte ela devolva como resposta os tokens obtidos a partir da {string apontada pelo ponteiro em cache} 94
107 Um tokenizador multi-threaded 1 void void 2 long long 3 int 4 int 5 char 6 char 7 char while 12 95
108 Um tokenizador multi-threaded \t\n 4 while 5 6 \n 7 8 \t\n return 15 96
109 Executando: 1 thread Com uma só thread o funcionamento é conforme esperávamos 97
110 Executando: 2 threads 98
111 O que aconteceu? faz um cache do ponteiro para a string a ser tokenizada Uma cópia do ponteiro é mantida em uma variável Assim, um valor armazenado nessa variável persiste de uma chamada à outra Por outro lado, a variável é compartilhada entre as threads e não privada 99
112 O que aconteceu? A thread 0 chama com a 3 linha da entrada e sobrescreve o conteúdo que havia sido colocado na variável pela thread 1 Há uma condição de corrida (race condition) Uma thread influencia a outro! A função strtok não é thread-safe! Em outras palavras, chamadas simultâneas à podem dar resultados incorretos 100
113 Outras funções dignas de nota Infelizmente um bom número das funções em C não são thread-safe Exemplos: Gerador de números aleatórios em Rotina de conversão de horários em 101
114 Funções reentrantes (thread-safe) Uma função é reentrante (re-entrant) quando pode-se invocá-la simultaneamente em vários threads sem a necessidade de tomarmos cuidados especiais para garantir que não haja uma condição de corrida Algumas funções da biblioteca padrão C têm uma implementação reentrante disponível 1 char 2 char 3 const char 4 char 102
115 Conclusão
116 Comentários finais Uma thread em programação de memória compartilhada é semelhante à um processo em programação com memória distribuída Contudo, uma thread é normalmente muito mais leve que um processo completo Em Pthreads, todos os threads tem acesso a toda a memória do processo pai (variáveis globais, arquivos abertos, ) Variáveis locais (declaradas em funções ou em seus parâmetros são locais à thread. Por que?) 103
117 Comentários finais Quando O resultado final da execução de um programa não for determinístico O não determinismo for o resultado de múltiplas threads em execução e os seus efeitos (operações de escrita) em uma variável compartilhada (ou a um recurso compartilhado) O resultado da execução for um erro ou um resultado incorreto Dizemos que há uma condição de corrida. 104
118 Comentários finais Uma seção crítica / região crítica (critical section) é um bloco de código que atualiza um recurso compartilhado que só poderia ser atualizado por uma thread por vez Portanto, a execução de uma região crítica deveria ser feita exclusivamente por uma thread por vez ou, em outras palavras, sequencialmente 105
119 Comentários finais Um laço de espera ocupada (busy-waiting) pode ser usado para evitar acessos conflitantes a uma região crítica do código utilizando uma variável de flag e um laço com o seu corpo vazio Pode desperdiçar ciclos da CPU Pode ser inócuo se as otimizações do compilador estiverem ativas 106
120 Comentários finais Um mutex pode ser usado para evitar acessos conflitantes a uma região crítica do código Pode-se pensar em um mutex como uma trava (eles também são chamados comumente de locks) na região crítica já que mutexes garantem acesso exclusivo a uma região crítica 107
121 Comentários finais Um semáforo é a terceira maneira que vimos de garantir que acessos conflitantes não ocorram em uma região crítica É um inteiro sem sinal que tem duas operações Semáforos são mais gerais e mais poderosos que mutexes pois Podem ser inicializados travados Podem controlar acessos à uma região até um número > 1 de threads Não têm o conceito de propriedade - um thread diferente daquele que o travou pode liberá-lo 108
122 Comentários finais Uma barreira (barrier) é um ponto do programa no qual todos as threads ficam bloqueadas até que todas o tenham alcançado Uma trava de leitura e escrita (read-write lock) é utilizada quando é seguro que diversas threads leiam a partir de um recurso compartilhado mas quando é exigido que apenas uma thread faça escritas por vez e que nenhuma outra thread tenha acesso enquanto as escritas estiverem sendo feitas. 109
123 Comentários finais Algumas funções guardam estado entre suas chamadas (variáveis, globais, ) Se diversas threads chamarem essas funções (simultaneamente ou intercaladamente) pode ocorrer uma condição de corrida Funções assim são chamadas de thread-unsafe ou não-reentrantes. 110
Intel Thread Building Blocks (TBB)
Intel Thread Building Blocks (TBB) MCZA020-13 - Programação Paralela Emilio Francesquini e.francesquini@ufabc.edu.br 2019.Q1 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Disclaimer
Paralelismo em Computadores com Tecnologia Multicore
IFRN - Pau dos Ferros Pau dos Ferros/RN, 25 de fevereiro de 2016 O minicurso Descrição: Para se utilizar os vários núcleos de processamento disponíveis nos computadores atuais de forma eficiente, faz necessário
OO Engenharia Eletrônica
OO Engenharia Eletrônica - Programação em C/C++ Slides 18: Introdução à programação multi-thread. Thread: linha de execução de um processo. Multi-thread: execução de múltiplas threads em um processo. Prof.
#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
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 à OpenMP (Dia 1) Prof. Guido Araujo
Introdução à OpenMP (Dia ) Prof. Guido Araujo www.ic.unicamp.br/~guido Roteiro Escrevendo programas usando OpenMP Usando OpenMP para paralelizar laços seriais com pequenas mudanças no código fonte Explorar
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
Threads e Sincronização no Linux
Threads e Sincronização no Linux MCTA026-13 - Sistemas Operacionais Emilio Francesquini e Fernando Teubl Ferreira e.francesquini@ufabc.edu.br / fernando.teubl@ufabc.edu.br 2019.Q1 Centro de Matemática,
LINGUAGEM C: VARIÁVEIS E EXPRESSÕES
LINGUAGEM C: VARIÁVEIS E EXPRESSÕES Prof. André Backes LINGUAGENS DE PROGRAMAÇÃO Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve
Construtores de Sicronização em OpenMP
Construtores de Sicronização em OpenMP Esbel Tomás Valero Orellana Bacharelado em Ciência da Computação Departamento de Ciências Exatas e Tecnológicas Universidade Estadual de Santa Cruz evalero@uesc.br
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
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
Introdução OpenMP. Nielsen Castelo Damasceno
Introdução OpenMP Nielsen Castelo Damasceno Computação de auto desempenho Processamento Paralelo Memória Distribuída e Compartilhada Modelo de programação OpenMP Métricas de Desempenho Computação de auto
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
Working 03 : Conceitos Básicos I
Working 03 : Conceitos Básicos I Objetivos: Dominar os conceitos básicos da linguagem de programação C; Aprender a utilizar o compilador, identificando os erros de sintaxe do código fonte; Prazo de Envio:
OpenMP. Slides baseados em tutorial de Tim Mattson da Intel
OpenMP Slides baseados em tutorial de Tim Mattson da Intel O que é OpenMP? Uma especificação para um conjunto de diretivas de compilação, rotinas de biblioteca e variáveis de sistema que podem ser utilizadas
Leandro Soares de Sousa (DSc.) Página: Aula 04 - desenvolvimento multithread
Tópicos Especiais Leandro Soares de Sousa (DSc.) e-mail: lsousa@id.uff.br Página: http://www.ic.uff.br/~lsousa Aula 04 - desenvolvimento multithread Mais e mais ferramentas! 2 Processos e Threads: desenvolvimento
Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.
1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I SEM/12 PROVA I. Tempo de Prova: 100 minutos / Escore Máximo: 300 pontos
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I - 1 0 SEM/12 PROVA I Tempo de Prova: 100 minutos / Escore Máximo: 300 pontos Aluno: G A B A R I T O Escore: Responda às perguntas de forma
OO Engenharia Eletrônica
OO Engenharia Eletrônica - Programação em C/C++ Slides 18B: Introdução à Multithreading. Exemplos: Programação OO Multithreading com pthreads. Aluno: Vagner Vengue Threads Orientadas a Objeto Thread Orientada
Programação de Computadores II
Programação de Computadores II 1. Programação Básica 2019.1 Slides adaptados do material de Karina Mochetti Problema, Algoritmo, Programa Um programa de computador é a implementação de um algoritmo para
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)
Programação Estruturada
Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada
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
Leandro Soares de Sousa (DSc.) Página: Parte II
Tópicos Especiais em Sistemas Computacionais Leandro Soares de Sousa (DSc.) e-mail: leandro.uff.puro@gmail.com Página: http://www.ic.uff.br/~lsousa Parte II Mais e mais ferramentas! 2 Processos e Threads:
Lista de Exercícios de INF1019
Lista de Exercícios de INF1019 Versão 2018 Obs: estas questões servem apenas para seu aquecimento na matéria, e para revisão dos conceitos vistos na disciplina. A chance de cairem na prova é de apenas
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:
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
Modelo de Programação Paralela
Modelo de Programação Paralela As arquiteturas paralelas e distribuídas possuem muitos detalhes Como especificar uma solução paralela pensando em todos esses detalhes? O que queremos? Eecutar a soluçã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
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...
A linguagem C (visão histórica)
A linguagem C (visão histórica) A linguagem C é uma linguagem de programação desenvolvida no ínício dos anos 70 por Dennis Ritchie, que trabalhava nos laboratórios Bell e que também inciou em paralelo,
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
Programação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO
Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem
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
Programação Concorrente. Prof. Hugo Vieira Neto
Programação Concorrente Prof. Hugo Vieira Neto Concorrência Um programa concorrente descreve diversas atividades que ocorrem simultaneamente, de modo diferente de programas comuns, que descrevem apenas
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
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 07: PROGRAMANDO COM THREADS EM LINGUAGEM C
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 07: PROGRAMANDO COM THREADS EM LINGUAGEM C Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação PROGRAMANDO
Estruturas de Sistemas Operacionais
Estruturas de Sistemas Operacionais Sistemas Operacionais - Tópicos Componentes do Sistema Serviços de Sistemas Operacionais Chamadas ao Sistema Estrutura do Sistema Máquinas Virtuais Chamadas ao Sistema
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 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
Laboratório de Programação II
Laboratório de Programação II Aula 02 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br http://www.diemesleno.com.br Na aula passada vimos... Na aula passada vimos... 01 Introdução à linguagem C;
Processos Concorrentes
Processos Concorrentes 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
Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI
Introdução à Programação em C Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI Linguagem C Criada em 1972 para uso no LINUX; Sintaxe base para diversas outras (Java, JavaScript, PHP, C++,
Introdução ao OpenMP
Introdução ao OpenMP Threads em CPU multicore Rogério A. Gonçalves 1,2 Alfredo Goldman 2 1 Departamento de Computação (DACOM) Universidade Tecnológica Federal do Paraná (UTFPR) 2 Departamento de Ciência
Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;
1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e
LINGUAGEM C: ALOCAÇÃO DINÂMICA
LINGUAGEM C: ALOCAÇÃO DINÂMICA Prof. André Backes DEFINIÇÃO Sempre que escrevemos um programa, é preciso reservar espaço para as informações que serão processadas. Para isso utilizamos as variáveis Uma
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
Introdução aos Sistemas Operacionais. Threads
Introdução aos Sistemas Operacionais Threads Eleri Cardozo FEEC/Unicamp O que é uma Thread? Uma thread (linha de controle) é uma unidade de execução e de controle, alocação e compartilhamento de recursos
AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação PROGRAMAÇÃO PARALELA
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
Algoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Listas Lineares Ordenadas
Listas Lineares Ordenadas Algoritmos e Estruturas de Dados I Nesta apresentação será apresentado o ADT lista linear ordenada Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre
Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica
Introdução a Programação Ponteiros e Strings, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos a relação entre ponteiros e strings Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros
Definindo melhor alguns conceitos
Definindo melhor alguns conceitos Concorrência termo mais geral, um programa pode ser constituído por mais de um thread/processo concorrendo por recursos Paralelismo uma aplicação é eecutada por um conjunto
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:
Sistemas Distribuídos Aula 3
Sistemas Distribuídos Aula 3 Aula passada Processos IPC Características Ex. sinais, pipes, sockets Aula de hoje Threads Kernel level User level Escalonamento Motivação: Servidor Web Considere Servidor
Comunicação entre Processos
Programação Paralela e Distribuída Ordenação e Sincronização Prof. Msc. Marcelo Iury de Sousa Oliveira marceloiury@gmail.com http://sites.google.com/site/marceloiury/ Comunicação entre Processos Processos
Variáveis primitivas e Controle de fluxo
Variáveis primitivas e Controle de fluxo Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/
EEL770 Sistemas Operacionais
EEL770 Sistemas Operacionais Parte 2: Concorrência Conceitos básicos e ciclo de vida de threads Prof. Rodrigo de Souza Couto Concorrência Múltiplas atividades que podem ocorrer ao mesmo tempo Exemplos
tutorial. man fork man pthread_create man pthread_join man wait man sleep
Abaixo, você encontrá dicas para lhe ajudar a fazer o 1º trabalho de SOI, que está descrito na página do curso. Lembrando que essas dicas visam apenas o auxilio nas partes mais problemáticas do trabalho
Conceitos Básicos Linguagem C
Conceitos Básicos Linguagem C PROF. MAURÍCIO A DIAS MACDIASPAE@GMAIL.COM 2 Método Método básico para construção de algoritmos 1. Compreender completamente o problema a ser resolvido, se possível dividindo
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
Sistemas de Computação Semáforos
Sistemas de Computação Semáforos 4/26/18 1 Semáforos Um semáforo simples é uma variável que pode assumir os valores 0 e 1 (semáforo binário). Esta é a forma mais comum Semáforos que podem assumir diversos
Leitura Segura de Strings
Leitura Segura de Strings As funções da biblioteca padrão de C que podem ser usadas para leitura de strings não são suficientemente adequadas para esta finalidade básica. Nesta seção, serão descritos alguns
INTRODUÇÃO À LINGUAGEM C
INTRODUÇÃO À LINGUAGEM C Prof. Bruno Feijó, Dept. de Informática, PUC-Rio (2018) C foi criado no início da década de 70, quando os programas mais eficientes eram escritos em linguagem Assembly, bem próxima
RESUMO DE CONCEITOS BÁSICOS DE C
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação RESUMO DE CONCEITOS BÁSICOS DE C 1 Material preparado pela profa Silvana Maria Affonso de Lara 2º semestre de 2010
Sincronização e Comunicação entre Processos. Adão de Melo Neto
Sincronização e Comunicação entre Processos Adão de Melo Neto 1 INTRODUÇÃO Em um sistema multitarefa os processos alternam sua execução segundo critérios de escalonamento estabelecidos pelo sistema operacional.
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
Instituto Federal de Educação, Ciência e Tecnologia do RN Câmpus Currais Novos. LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I
LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I Prof. Bruno E. G. Gomes Uma variável em um algoritmo pode ser vista como uma gaveta. A declaração de uma variável reserva uma gaveta (posição) de um certo
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
Introdução à Ciência da Computação scc-120
ICMC USP 1.semestre/2011 Introdução à Ciência da Computação scc-120 Aula : Variáveis em C Profa. Roseli Romero mailto: rafrance@icmc.sc.usp.br Slides cedidos pela profa. Renata Fortes Variáveis variáveis
SSC PROGRAMAÇÃO CONCORRENTE. Aula 06 Modelos de Programação Prof. Jó Ueyama e Julio Cezar Estrella
SSC- 0143 PROGRAMAÇÃO CONCORRENTE Aula 06 Modelos de Programação Prof. Jó Ueyama e Julio Cezar Estrella Créditos Os slides integrantes deste material foram construídos a par4r dos conteúdos relacionados
COS Sistemas Operacionais. SystemCalls() [Linux Kernel Development, 2 nd edition] Prof. Vítor Santos Costa
COS 773 - Sistemas Operacionais SystemCalls() [Linux Kernel Development, 2 nd edition] Elias Bareinboim [eliasb@cos.ufrj.br] Prof. Vítor Santos Costa PESC - Programa de Engenharia de Sistemas e Computação
Variáveis em OpenMP. Esbel Tomás Valero Orellana
Variáveis em OpenMP Esbel Tomás Valero Orellana Bacharelado em Ciência da Computação Departamento de Ciências Exatas e Tecnológicas Universidade Estadual de Santa Cruz evalero@uesc.br 31 de Maio de 2010
Anhanguera Educacional S.A. Centro Universitário Ibero-Americano
O C++ foi inicialmente desenvolvido por Bjarne Stroustrup durante a década de 1980 com o objetivo de melhorar a linguagem de programação C, mantendo a compatibilidade com esta linguagem. Exemplos de Aplicações
Conhecendo a Linguagem de Programação C
Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Conhecendo a Linguagem de Programação C DCA0800 - Algoritmos e Lógica de Programação Heitor Medeiros 1 Como
AULA Nº 08 SISTEMAS OPERACIONAIS. Threads
AULA Nº 08 SISTEMAS OPERACIONAIS Threads Contextualizando Na aula passada Sincronização de Processos Aula de hoje Threads O Modelo de Processo 1) Utilizado para agrupar recursos 2) Um espaço de endereço
Algoritmos II prof. Daniel Oliveira
Algoritmos II prof. Daniel Oliveira Revisar conceitos abordados na disciplina anterior Abordar conceitos vistos com a linguagem C# Variáveis e listas Expressões Estruturas de controle do tipo condicional
Programação Básica. Estrutura de um algoritmo
Programação Básica Estrutura de um algoritmo Código-fonte Como vimos na aula anterior um algoritmo pode ser representado usando um fluxograma Um algoritmo pode também ser representado usando texto Esse
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 em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação
Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Programação em C Variáveis e Expressões DCA0800 Algoritmos e Lógica de Programação Heitor Medeiros Florencio
Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação
1/50. Conceitos Básicos. Programa Básico
1/50 Conceitos Básicos Programa Básico 2/50 Operações básicas de entrada e saída #include main retorna um inteiro int main() { std::cout
Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná
Linguagem C IF61A/IF71A - Computação 1 Prof. Leonelo Almeida Universidade Tecnológica Federal do Paraná Até agora... Sabemos construir algoritmos que tenham: Variáveis Comandos sequenciais Entrada e saída
Sistemas Operacionais
Sistemas Operacionais 04 Processos Introdução Um sistema de computação quase sempre tem mais atividades a executar que o número de processadores disponíveis. Diferentes tarefas têm necessidades distintas
Programação Concorrente Locks
Programação Concorrente Prof. Eduardo Alchieri Variáveis do tipo trava (lock) Lock: É um mecanismo de sincronização de processos/threads, em que processos/threads devem ser programados de modo que seus
Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória
Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];
Slides trabalhados durante a quinta aula
Slides trabalhados durante a quinta aula prática Estruturas de Controle de Fluxo 3. Laços de repetição (continuação) Exercício: Construa um algoritmo, representando-o através de um pseudocódigo e de um
OpenMP. Adaptado do Material do Calebe de Paula Bianchini
OpenMP Adaptado do Material do Calebe de Paula Bianchini calebe.bianchini@mackenzie.br HelloWorld #pragma omp parallel // Code inside this region runs in parallel. printf("hello!\n"); 2 O que é OpenMP*?
Programação Estruturada
Programação Estruturada Ponteiros Parte 1 Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Ponteiros Ponteiro Ponteiros
LabSO Gerência de Processos. Processos. Porque eu preciso entender este assunto?
LabSO Gerência de AULA 3 Flávia Maristela (flavia@flaviamaristela.com) Romildo Martins (romildo@romildo.net) Porque eu preciso entender este assunto? Para entender como um computador consegue executar
INTRODUÇÃO À LINGUAGEM C
INTRODUÇÃO À LINGUAGEM C Prof. Bruno Feijó, Dept. de Informática, PUC-Rio (2017) C foi criado no início da década de 70, quando os programas mais eficientes eram escritos em linguagem Assembly, bem próxima
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
Introdução à Linguagem C++
Introdução à Linguagem C++ C++: Definição C++ C A Linguagem de Programação C++ pode ser definida como uma extensão da Linguagem C; Todo código de programação em Linguagem C pode a priori ser compilado
Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.
Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de