Programação Concorrente na Linguagem Vale 4

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

Download "Programação Concorrente na Linguagem Vale 4"

Transcrição

1 Programação Concorrente na Linguagem Vale 4 por Simão Sirineo Toscani VII Simpósio Brasileiro de Linguagens de Programação SBLP 2003 Ouro Preto,, MG, Brasil Pontifícia Universidade Católica do Rio Grande do Sul PUCRS Centro Universitário La Salle UNILASALLE 0

2 Introdução (1) Iremos apresentar Uma linguagem de programação para uso acadêmico Construída usando software livre (SWI-Prolog) Que pode ser instalada em qualquer microcomputador Os exemplos são programas completos, prontos para serem executados. O ambiente de programação V4 É formado por um compilador uma máquina virtual Trata-se de um ambiente completo para construção e depuração de programas concorrentes. 1

3 Introdução (2) Programa concorrente É um programa que origina processos concorrentes (paralelos) durante sua execução. Estes processos interagem através de mecanismos apropriados, normalmente implementados no kernel do SO. A técnica da programação concorrente foi usada originalmente na construção de sistemas operacionais. Hoje em dia seu uso está difundido em todas as áreas. 2

4 Motivação para a criação da linguagem (1) Os profissionais da computação devem dominar as técnicas e ferramentas usadas na construção de programas concorrentes. Não há uma linguagem adequada para esse tipo de ensino. O ideal seria que o estudante pudesse aprender a solucionar os problemas clássicos usando todas as ferramentas descritas na literatura. 3

5 Motivação para a criação da linguagem (2) Os problemas clássicos: 1. Produtor-consumidor (relação de cooperação) 2. Jantar dos filósofos (relação de competição) 3. Barbeiro dorminhoco (relação cliente-servidor) 4. Leitores e escritores (situação comum em banco de dados) As principais ferramentas: 1. Semáforos 2. Monitores 3. Operações send e receive 4. Rendezvous 4

6 A linguagem Vale 4 Implementa quase todas as ferramentas e paradigmas da programação concorrente Sintaxe simples(*) e semântica clara Facilidades para depuração (visualização da execução) É implementada por um compilador uma máquina virtual (*) Baseada na sintaxe livre usada nas notas de aula do autor. 5

7 O compilador V4 Traduçã ção o dirigida por sintaxe. O resultado da compilaçã ção é: Uma tabela de símbolos s (TS) e Um código c de máquina m virtual. 6

8 O simulador V4 A partir da TS, o simulador da máquina virtual gera estruturas e faz a execução do código. Estruturas de dados: Variáveis inteiras, variáveis booleanas Arrays de até duas dimensões Registros descritores de processos Filas, semáforos Filas de monitores, variáveis tipo condition Filas de espera para rendezvouz, etc. 7

9 O ambiente de execução V4 O compilador: repeat, letoken(x), colocanapilha(x), tratapilha until X = endprogram O simulador: gera estruturas de dados, repeat, selecionathread(t), if T>0 then executa T until T = -1, write('fim DA EXECUÇÃ ÇÃO') 8

10 Os tokens da linguagem V4 := : ;, ( ) [ ] { } ' + - * / mod & and or not % /* */ integer boolean init queue semaphore array procedure returns while do forever if then else loop endloop exit when inline process task thread fork join quit mutexbegin mutexend block wakeup P V yield hold monitor condition priority wait signal initially empty count first insert send receive entry accept read write nl tab debug1 debug2 nodebug pause nothing myself getid random clocktime end identificadores const_inteiras const_booleanas 9

11 Os comandos da linguagem Var := E A P ( Sem ) if E L then C 1 else C 2 V ( Sem ) while E L do C yield do forever C hold ( Time ) loop C 1 ; C 2 ;... ; C n endloop wait ( Cond ) { C 1 ; C 2 ;... ; C n } wait ( Cond, Prior ) read ( Var ) signal ( Cond ) write ( Var ) send ( ProcessId, Msg ) nl nb_send ( ProcessId, Msg ) tab ( K ) receive ( ProcessId, Msg ) nothing id := fork mutexbegin id := new Pname ( arg 1, arg 2,..., arg N ) mutexend join ( id ) lock quit unlock debug1 insert ( id, Q ) debug2 insert ( id, Q, Prior ) nodebug id := first ( Q ) pause block exec ( Nome ) wakeup ( id ) (Total de 40 accept Et ( arg 1 :T 1 ; arg 2 :T 2 ;... ; arg N :T N ) returns T when E L do C comandos) 10

12 As instruções da máquina virtual if X oprel Y goto E call NomeProc P S myself goto E [n, lista] V S getid P read X return entermonitor M clocktime write X nothing leavemonitor M random N push X yield wait C nl pop X hold wait C, Prior tab X add fork signal C debug1 sub join rndzvs Entry debug2 mult quit accept Entry nodebug div mutexbegin give_up_rndzvs pause mod mutexend send Id,Msg exec X jump E block receive Id,Msg jzer E wakeup P end proced jpos E first Q end process (Total de 62 jneg E insert P, Q end monitor instruções) jsub E is_empty Q end task ret count Q end accept 11

13 As versões da linguagem Didaticamente, a linguagem oferece 6 versões: V4 0 : processos, variáveis globais e procedimentos V4 1 : V4 0 com operações mutexbegin/mutexend e block/wakeup(p) V4 2 : V4 0 com semáforos V4 3 : V4 0 com monitores V4 4 : processos com operações send/receive V4 5 : tasks com threads e rendezvous. 12

14 Formas de criar processos Especificação de processos individuais Especificação de array de processos Especificação de modelo (template) de processo (Nos dois primeiros casos, a criação é estática) 13

15 Especificação de processos (1) % Especificação individual V4program process p; k: integer init 0; while k < 10 do { write(1); k:= k+1 }; process q; k: integer init 0; while k < 10 do { write(2); k:= k+1 } endprogram 14

16 Especificação de processos (2) % Array de processos V4program process p(i:= 1 to 2); k: integer init 0; while k < 10 do { write(i); k:= k+1 } endprogram 15

17 Especificação de processos (3) % Modelo de processo V4program process type p(i: integer); k: integer init 0; while k < 10 do { write(i); k:= k+1 }; process qqnome; { new p(1); new p(2) } endprogram 16

18 Uso de um procedimento % Especificação individual e uso de procedimento V4program procedure imprime(n: integer); k: integer init 0; while k < 10 do { write(n); k:= k+1 }; process p; imprime(1); process q; imprime(2) endprogram 17

19 Código gerado para o programa anterior ============== TABELA DE SIMBOLOS ============== IND NOME TIPO V_INIC AGRUP INSIDE 0 imprime routine 0 n_arg(1) global 1 n integer 0 none proced(imprime) 2 k integer 0 none proced(imprime) 3 p process 9 none global 4 q process 12 none global END CÓDIGO GERADO 0 [if,#(2),<,$10,goto,2] 1 [return] 2 [write, #(1)] 3 [push, #(2)] 9 [call, imprime] 4 [push, $1] 10 [1, 1] 5 [add] 11 [end, process] 6 [pop, #(2)] 12 [call, imprime] 7 [goto, 0] 13 [1, 2] 8 [end, proced] 14 [end, process] 18

20 O mesmo programa anterior % A identificação única (pid) V4program procedure imprime(n: integer); k: integer init 0; while k < 10 do { write(n); k:= k+1 }; process p; imprime(myself); process q; imprime(myself) endprogram 19

21 Ainda o mesmo programa % Criação de threads % (qual o resulado da execução?) V4program process p; k, id: integer init 0; { id:= fork(); while k < 10 do { write(myself); k:= k+1 } } endprogram 20

22 Grafo de fluxo de processos com block/wakeup wakeup(p) V4program process P1; { nl; write('p1'); wakeup(p3); wakeup(p4); quit }; process P2; { nl; write('p2'); wakeup(p5); quit }; process P3; { block; nl; write('p3'); wakeup(p5); quit }; process P4; { block; nl; write('p4'); wakeup(p5); quit }; process P5; { block; block; block; nl; write('p5'); quit } endprogram p3 I p1 p2 p4 p5 F 21

23 Grafo de fluxo de processos com threads V4program process p; k2, k4 : integer; { k2:= fork; if myself = k2 then {nl; write('p2'); quit}; nl; write('p1'); k4:= fork; if myself = k4 then {nl; write('p4'); quit}; nl; write('p3'); join(k2); join(k4); nl; write('p5') } endprogram p3 I p1 p2 p4 p5 F 22

24 Variáveis semáforas São variáveis especiais, sobre as quais só podem ser aplicadas duas operações: P e V (Proberen e Verhogen). Um semáforo é implementado por um contador (variável inteira) e uma fila de espera. Sendo S um semáforo, as operações P e V funcionam da seguinte maneira: P(S): Testa o contador de S; se é zero, coloca o processo na fila de espera (bloqueia o processo); caso contrário decrementa o contador de 1. V(S): Testa a fila de S; se está vazia, incrementa o contador de 1; caso contrário libera (desbloqueia) o primeiro processo da fila de espera. 23

25 Grafo de fluxo de processos com semáforos V4program S3, S4, S5: semaphore initial 0; process P1; { nl; write('p1'); V(S3); V(S4) }; process P2; { nl; write('p2'); V(S5) }; process P3; { P(S3); nl; write('p3'); V(S5) }; process P4; { P(S4); ; nl; write('p4'); V(S5) }; process P5; { P(S5); P(S5); P(S5); nl; write('p5') } endprogram p3 I p1 p2 p4 p5 F 24

26 O jantar dos filósofos com semáforos garfo 3 filósofo 4 garfo 4 filósofo 5 filósofo 3 spaghetti garfo 5 garfo 2 filósofo 2 garfo 1 filósofo 1 V4program garfo : array[5] of semaphore init 1; process filosofo(i:= 1 to 5); j, k, t: integer; while k =< 10 do { if i = 1 then { P(garfo[5]); P(garfo[1])} else {j:= i-1; P(garfo[j]); P(garfo[i])}; nl; write('filosofo '); write(i); write(' comecou a comer'); t:=random(5); hold(t); if i=1 then { V(garfo[5]); V(garfo[1])} else {j := i-1 ; P(garfo[j]); P(garfo[i])}; nl; write('filosofo '); write(i); write(' parou de comer'); k:=k+1 } endprogram 25

27 Formato de um monitor monitor <nome>; Declaração dos dados compartilhados pelos processos. Exemplo: X, Y: integer C, D: condition; procedure P(arg 1 : T 1,...,arg P : T P ); Declaração das variáveis locais de P; {... wait(d);... }; procedure Q(arg 1 : T 1,...,arg Q : T Q ); Declaração das variáveis locais de Q; {... signal(c);... }; initially {Comandos} % inicialização dos dados (opcional) end <nome>; 26

28 O jantar dos filósofos com monitores V4program monitor garfos; glivre: array[5] of integer init 2; ok: array[5] of condition; procedure pega(i:integer); j: integer; k: integer; { if glivre[i] < 2 then wait(ok[i]); j := i-1; if j=0 then j:=5; glivre[j]:= glivre[j]-1; k := i+1; if k=6 then k:=1; glivre[k]:=glivre[k]-1 }; procedure libera(i:integer); j: integer; k: integer; { j := i-1; if j=0 then j:=5; glivre[j]:= glivre[j]+1; k := i+1; if k=6 then k:=1; glivre[k]:=glivre[k]+1; if glivre[j] = 2 then signal(ok[j]); if glivre[k] = 2 then signal(ok[k]) } end monitor; process filosofo(i:=1 to 5); k, t: integer init 0; while k =< 10 do { garfos.pega(i); nl; write('filos '); write(i); write(' comendo t:= random(5); hold(t); % come 0-4 u.t garfos.libera(i); nl; write('filos '); write(i); write(' pensando t:= random(5)+6; hold(t); % pensa 6-10 u k:= k+1 } endprogram 27

29 Alocação de um recurso de N unidades V4program monitor resource; N: integer init 10; % 10 unidades C: condition; procedure requisita(k: integer); { loop if k =< N then exit; wait(c) endloop; N := N-k; signal(c) }; procedure libera(k: integer); { N := N+k; signal(c) } end resource; process cliente(i:=1 to 10); { resource.requisita(i); nl; write('cliente '); write(i); resource.libera(i) } endprogram O que acontece se, no procedimento requisita, o signal(c) é colocado logo após o wait(c)? 28

30 Formato de uma task task nome is declaração de variáveis; declaração de entries; declaração de procedures; thread main is { C1; C2; ; Cn } end nome Formato do comando accept: accept Et (arg 1 :T 1 ; arg 2 :T 2 ;... ; arg N :T N ) returns T when expressão_lógica do { C1; C2; ; Cn } 29

31 Alocação de um recurso de N unidades V4program task resource is entry requisita(k: integer); entry libera(k: integer); id: integer; N: integer init 10; % recurso tem 10 unidades thread main is { id:= fork; if id = myself then loop % --- thread filha accept requisita(k: integer) when k <= N do N:= N-k endloop else loop % --- thread mãe accept libera(k: integer) do N:= N+k endloop } end resource; process cliente(i:=1 to 10); { resource.requisita(i); nl; write('cliente '); write(i); resource.libera(i) } endprogram 30

32 As operações send e receive send(p, msg) receive(q, msg) receive(any any, msg) nb_send send(p, msg) 31

33 Comunicação via fork, join e quit id:= fork quit join(id) quit(valor) var:= join(id) var:= join(any any) 32

34 As facilidades de depuração debug1 debug2 nodebug exec(nome) pause janelas de visualizaçã ção 33

35 Conclusão (1) Instalação do sistema: Criar a pasta (diretório) Vale4 Fazer download do SWI-Prolog (programa de instalação) a partir do site: 3. Instalar o SWI-Prolog na pasta Vale4 (a instalação vai criar o diretório pl ) 4. Copiar os arquivos V4compiler, V4_1 e V4_2 e programas exemplos para a pasta Vale4. (O sistema é colocado em uso com dois clicks no arquivo V4compiler) 34

36 Conclusão (2) O sistema está operacional. Sua instalação é muito simples. V4 é uma ferramenta para treinamento (ensino/aprendizagem). Não é linguagem para produção de software (não há preocupação com geração de código otimizado, tampouco com eficiência de execução). A linguagem é usada para ilustrar o livro Programação Concorrente e Sistemas Operacionais que será lançado em breve. 35

37 Barbeiro dorminhoco (task( e threads) V4program task barbershop is k, t, id1, id2: integer; empty_chair: boolean; #chairs: integer initial 3; entry client_in(id: integer); procedure avail_chair() returns boolean; { mutexbegin; if #chairs > 0 then { #chairs:= #chairs-1; avail_chair:= true } else avail_chair:= false; mutexend }; thread main is { id1:= fork; if id1 = myself then loop % loop da thread barbeiro accept client_in(id: integer) do % dorme se não há cliente { nl; write('client '); write(id); write(' at time '); write(clocktime); hold(2); #chairs:= #chairs+1 } endloop; 36

38 Barbeiro dorminhoco (continuação) loop % thread main gera 20 clientes id2:= fork; if id2 = myself then { empty_chair:= avail_chair(); if empty_chair then client_in(id2); quit }; t:= random(6); hold(t); % espera um tempo entre 0 e 5 u.t. (média 2.5) k:= k+1; exit when k=20 endloop } end barbershop end program 37

39 Busca do elemento máximo de um vetor por divisão e conquista V4program task xmax is vet: array[10] of integer; Imax: integer init 0; % Índice do maior elemento do vetor procedure getmax(i:integer; j:integer) returns integer; dif, m, m1, id1, id2, max1, max2: integer; { dif:=j-i; if dif=0 then getmax:=i elseifdif=1thenifvet[i]>vet[j] then getmax:=i else getmax:=j else { m:=(i+j)/2; m1:=m+1; id1:=fork; if id1=myself then {max1:=getmax(i,m); quit}; id2:=fork; if id2=myself then {max2:=getmax(m1,j);quit}; join(id1); join(id2); if vet[max1] > vet[max2] then getmax:=max1 else getmax:=max2 } }; thread main is { vet[1]:=1; vet[2]:=10; vet[3]:=3; vet[4]:=100; vet[5]:=2; Imax:=getmax(1,5); nl; write('vobtido = '); write(vet[imax]) } end xmax end program 38

40 Monitor para o problema dos readers & writers monitor ReadersAndWriters; #readers: integer initial 0; activewriter: boolean initial false; oktoread, oktowrite: condition; procedure startread(); { if activewriter or empty(oktowrite) then wait(oktoread); #readers:=#readers+1; signal(oktoread) }; procedure endread(); { #readers:=#readers-1; if #readers=0 then signal(oktowrite) }; procedure startwrite(); { if #readers>0 or activewriter then wait(oktowrite); activewriter:=true }; procedure endwrite(); { activewriter:=false; if empty(oktoread) then signal(oktoread) else signal(oktowrite) } end ReadersAndWriters; 39

41 Produtores-consumidores com semáforos V4program buffer: array[2] of integer init 0; cheios: semaphore init 0; vazios: semaphore init 2; mutex : semaphore init 1; in,out: integer init 1; process produtor(i:=0 to 1); nextpar: integer init 0; nextimpar: integer init 1; while nextimpar < 20 & nextpar < 20 do { P(vazios) ; P(mutex); if i = 0 then { nextpar:= nextpar + 2; buffer[in]:= nextpar } else { nextimpar:= nextimpar + 2; buffer[in]:= nextimpar }; in:=(in mod 2)+1; V(mutex); V(cheios) }; process consumidor(i:=1 to 2); msg: integer; do forever { P(cheios); P(mutex); msg:= buffer[out]; out:=(out mod 2)+1; V(mutex); V(vazios); nl; if i = 2 then tab(10); write(msg) } endprogram 40

Monitores. Conceito Sistemas Operacionais II

Monitores. Conceito Sistemas Operacionais II Monitores Conceito Sistemas Operacionais II Monitores Autores Daniel Artur Seelig Fábio Lutz Local Universidade Federal do Rio Grande do Sul Instituto de Informática Sistemas Operacionais II Professor

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

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 11 Sincronização de Processos Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

Monitores. Setembro de 2009. Monitores

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

Leia mais

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

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

Leia mais

Sincronização. Cooperação entre Processos

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

Leia mais

Sincronização de Processos (4) Monitores

Sincronização de Processos (4) Monitores Sincronização de Processos (4) Monitores Monitores (1) Sugeridos por Dijkstra (1971) e desenvolvidos por Hoare (1974) e Brinch Hansen (1975), são estruturas de sincronização de alto nível, que têm por

Leia mais

Remote Procedure Call. Programação distribuída e paralela (C. Geyer) RPC 1

Remote Procedure Call. Programação distribuída e paralela (C. Geyer) RPC 1 Remote Procedure Call Programação distribuída e paralela (C. Geyer) RPC 1 Autoria Autores C. Geyer Local II-UFRGS Versão V11.4 2014-2 Disciplinas SOII Programação distribuída e paralela (C. Geyer) RPC

Leia mais

Sistemas Operacionais

Sistemas Operacionais AULA 09 Sincronização de Processos - II Monitores Conforme comentamos, o uso equivocado dos semáforos pode levar a uma situação de deadlock, por isso devemos tomar cuidado ao programar utilizando este

Leia mais

BC1518-Sistemas Operacionais. Prof. Marcelo Z. do Nascimento marcelo.nascimento@ufabc.edu.br

BC1518-Sistemas Operacionais. Prof. Marcelo Z. do Nascimento marcelo.nascimento@ufabc.edu.br BC1518-Sistemas Operacionais Sincronização de Processos (aula 5 Parte 2) Prof. Marcelo Z. do Nascimento marcelo.nascimento@ufabc.edu.br Roteiro Semáforos Monitores Passagem de Mensagem Exemplos em S.O.

Leia mais

Programação distribuída e paralela (C. Geyer) RPC 1

Programação distribuída e paralela (C. Geyer) RPC 1 Programação distribuída e paralela (C. Geyer) RPC 1 Autores C. Geyer Local II-UFRGS Versão v6 2008-2 Disciplinas SOII Programação distribuída e paralela (C. Geyer) RPC 2 Bibliografia base original dos

Leia mais

Sistemas Operacionais Sincronização e Comunicação entre Processos

Sistemas Operacionais Sincronização e Comunicação entre Processos Universidade Estadual de Mato Grosso do Sul UEMS Curso de Licenciatura em Computação Sistemas Operacionais Sincronização e Comunicação entre Processos Prof. José Gonçalves Dias Neto profneto_ti@hotmail.com

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

Conceito de processo como uma unidade de trabalho em um sistema moderno de tempo compartilhado. Estados de um processo.

Conceito de processo como uma unidade de trabalho em um sistema moderno de tempo compartilhado. Estados de um processo. gerenciamento de processos Objetivo Compreender a maneira como o sistema operacional controla o gerenciamento dos programas em execução por meio do gerenciamento de processos no qual cada processo representa

Leia mais

Concorrência e Paralelismo

Concorrência e Paralelismo Concorrência e Paralelismo mleal@inf.puc-rio.br 1 Programação Concorrente e Paralela Na programação sequencial todas as instruções de um programa são executadas através de uma única linha de execução Na

Leia mais

9 - Sincronização e Comunicação entre Processos

9 - Sincronização e Comunicação entre Processos 1 9 - Sincronização e Comunicação entre Processos 91 Introdução Em um sistema multitarefa, seja com um único processador ou com mais de um processador ou ainda com vários núcleos por processador, os processos

Leia mais

Disciplina: Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto

Disciplina: Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto Disciplina: Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto Introdução Processo cooperativo é aquele que pode afetar outros processos em execução no sistema Ou ser por eles afetado Processos

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

Notas da Aula 6 - Fundamentos de Sistemas Operacionais

Notas da Aula 6 - Fundamentos de Sistemas Operacionais 1. Monitores Notas da Aula 6 - Fundamentos de Sistemas Operacionais Embora os semáforos sejam uma boa solução para o problema da exclusão mútua, sua utilização não é trivial. O programador é obrigado a

Leia mais

Revisão Ultima aula [1/2]

Revisão Ultima aula [1/2] SOP - TADS Comunicação Interprocessos - 2 IPC Prof. Ricardo José Pfitscher dcc2rjp@joinville.udesc.br Material cedido por: Prof. Rafael Rodrigues Obelheiro Prof. Maurício Aronne Pillon Revisão Ultima aula

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

Representação de Algoritmos - Linguagens de Programação

Representação de Algoritmos - Linguagens de Programação Representação de Algoritmos - Linguagens de Programação A representação de algoritmos em uma pseudo-linguagem mais próxima às pessoas é bastante útil principalmente quando o problema a ser tratado envolve

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

Processos. Adão de Melo Neto

Processos. Adão de Melo Neto Processos Adão de Melo Neto 1 EXECUTE O SEGUINTE Baixa a aula dos dias 20 MAR 15 e 08 MAI 15 e salve no computador. Feche o browser Inicialize o vmware player e inicialize a máquina virtual ubuntu Inicialize

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

CURSO DE ENGENHARIA DE COMPUTAÇÃO Renovação de Reconhecimento pela Portaria n 123 de 09/07/12 DOU de 10/07/12 PLANO DE CURSO

CURSO DE ENGENHARIA DE COMPUTAÇÃO Renovação de Reconhecimento pela Portaria n 123 de 09/07/12 DOU de 10/07/12 PLANO DE CURSO CURSO DE ENGENHARIA DE COMPUTAÇÃO Renovação de Reconhecimento pela Portaria n 123 de 09/07/12 DOU de 10/07/12 Componente Curricular: Sistemas Concorrentes e Distribuídos Código: ENG - 436 Pré-requisito:

Leia mais

Sintaxe e Semântica. Fases da Compilação. programa fonte

Sintaxe e Semântica. Fases da Compilação. programa fonte Sintaxe e Semântica mleal@inf.puc-rio.br Fases da Compilação programa fonte tokens parse tree árvore anotada ou outra forma intermediária código intermediário código objeto código objeto otimizado scanner

Leia mais

Computação Concorrente (MAB-117) Monitores

Computação Concorrente (MAB-117) Monitores Computação Concorrente (MAB-117) Monitores Prof. Silvana Rossetto 1 Departamento de Ciência da Computação (DCC) Instituto de Matemática (IM) Universidade Federal do Rio de Janeiro (UFRJ) Maio de 2012 1.

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Comunicação e Sincronismo entre processos Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO 1 Comunicação entre Processos Processos

Leia mais

Algumas notas sobre PASCAL

Algumas notas sobre PASCAL Algumas notas sobre PASCAL PARTE I Anjolina Grisi de Oliveira 1 Um programa em PASCAL Esse texto inclui algumas notas sobre a linguagem PASCAL. As diferenças existentes entre os diversos compiladores não

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

PROGRAMA DE DISCIPLINA

PROGRAMA DE DISCIPLINA PROGRAMA DE DISCIPLINA Disciplina: Introdução à Programação Carga horária total: 60 Carga horária teórica: 0 Carga horária prática: 60 Código da Disciplina: CCMP0041 Período de oferta: 2010.2 Turma: CA

Leia mais

IFTO TÉCNICO EM INFORMÁTICA DESENVOLVIMENTO DE SISTEMAS AULA 01

IFTO TÉCNICO EM INFORMÁTICA DESENVOLVIMENTO DE SISTEMAS AULA 01 IFTO TÉCNICO EM INFORMÁTICA DESENVOLVIMENTO DE SISTEMAS AULA 01 Prof. Manoel Campos da Silva Filho Tecnólogo em Processamento de Dados / Unitins Mestre em Engenharia Elétrica / UnB http://lab.ifto.edu.br/~mcampos

Leia mais

Sockets em Ruby. Curso de Tecnologia em Redes de Computadores Programação para Redes

Sockets em Ruby. Curso de Tecnologia em Redes de Computadores Programação para Redes Sockets em Ruby Curso de Tecnologia em Redes de Computadores Programação para Redes Sockets em Ruby A biblioteca padrão de Ruby oferece um conjunto de classes para a manipulação de sockets. require socket

Leia mais

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação Programação 1I Prof. Osório Fila / Alocação Estática Pag.: 1 - UNIVERSIAE O VALE O RIO OS SINOS IÊNIAS EXATAS E TENOLÓGIAS urso: Informática / iência da omputação Programação II isciplina: Linguagem de

Leia mais

Síntese. Compiladores. Geração de código intermediário. Linguagens Intermediárias. Modelo Clássico. Linguagens Intermediárias. Código intermediário

Síntese. Compiladores. Geração de código intermediário. Linguagens Intermediárias. Modelo Clássico. Linguagens Intermediárias. Código intermediário Síntese Compiladores Código intermediário 1 Os assuntos apresentados trazem respostas às perguntas seguintes: 1. Pode a memória ser alocada dinamicamente? 2. Pode a memória ser liberada explicitamente?

Leia mais

Manipulação de Arquivos em Pascal

Manipulação de Arquivos em Pascal Manipulação de Arquivos em Pascal Estrutura de Dados II Aula 03 UFS - DComp Adaptados a partir do material da Profa. Kenia Kodel Cox 1 Para implementar programa infantil para ordenação (alfabética) de

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Processos e Threads Gustavo Reis gustavo.reis@ifsudestemg.edu.br - O que são Processos? Uma abstração de um programa em execução. Mantêm a capacidade de operações (pseudo)concorrentes,

Leia mais

SISTEMAS OPERACIONAIS

SISTEMAS OPERACIONAIS SISTEMAS OPERACIONAIS Processos e Threads Andreza Leite andreza.leite@univasf.edu.br Plano de Aula 2 Gerenciamento de Processos Threads Aplicações com múltiplas Threads Concorrência e Compartilhamento

Leia mais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais Notas da Aula 4 - Fundamentos de Sistemas Operacionais 1. Threads Threads são linhas de execução dentro de um processo. Quando um processo é criado, ele tem uma única linha de execução, ou thread. Esta

Leia mais

Ciclo de Vida de um Processo

Ciclo de Vida de um Processo Nas aulas anteriores Ciclo de Vida de um Processo Marcelo Johann Conceito de Processo Mecanismo de Programação em C/UNIX Continuando Interrupções TRAP Chaveamento de Contexto Chamadas de Sistema INF01142

Leia mais

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Prof. Bruno Vilela Oliveira bruno@cca.ufes.br http://www.brunovilela.webnode.com.br Aula 08 Programação em pascal Pascal Pascal

Leia mais

(Aula 17) Threads em Java

(Aula 17) Threads em Java (Aula 17) Threads em Java Difícil As Threads thread threads de emjava classificar sãogerenciadaspelajvm. podemser com user criadasdas thread ou kernel Profa. Patrícia A seguintesmaneiras: Fazendo extend

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 07 Nomes, Vinculações, Escopos e Tipos de Dados Edirlei Soares de Lima Introdução Linguagens de programação imperativas são abstrações

Leia mais

Algoritmos e Linguagem de Programação I

Algoritmos e Linguagem de Programação I Algoritmos e Linguagem de Programação I Roberto Ferreira roberto.ferreira@lapa.ifbaiano.edu.br 2014.1 Módulo I Aula 4 Introdução ao C Linguagem de Programação É um conjunto de regras sintáticas e semânticas

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais SINCRONIZAÇÃO E COMUNICAÇÃO ENTRE PROCESSOS MACHADO/MAIA: CAPÍTULO 07, PÁGINA 101 Prof. Pedro Luís Antonelli Anhanguera Educacional sistemas multiprogramáveis Os sistemas multiprogramáveis

Leia mais

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Resumo da Introdução de Prática de Programação com C. A Linguagem C Resumo da Introdução de Prática de Programação com C A Linguagem C O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional

Leia mais

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1 Estrutura de Dados Introdução a Ponteiros Prof. Gerson Borges Estrutura de Dados I 1 Sumário è Explicação da importância do planejamento de ensino; è Métodos e técnicas que iremos trabalhar durante o semestre;

Leia mais

7. ESTRUTURAS DE DADOS ESTÁTICAS E DINÂMICAS

7. ESTRUTURAS DE DADOS ESTÁTICAS E DINÂMICAS 7. ESTRUTURAS DE DADOS ESTÁTICAS E DINÂMICAS Até... 7.1 Alocação Estática Alocação de Espaço em Memória Como já foi visto anteriormente, a memória de um computador compõe-se de uma sequência de palavras,

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

Sistemas Operacionais. Capítulo 7 Sincronização e Comunicação entre Processos

Sistemas Operacionais. Capítulo 7 Sincronização e Comunicação entre Processos Sistemas Operacionais Capítulo 7 Sincronização e Comunicação entre Processos Baseado no Livro e Material de Apoio de Arquitetura de Sistemas Operacionais 3ª edição - LTC - 2004 Francis Berenger Machado

Leia mais

Linguagem de Programação Introdução a Linguagem Java

Linguagem de Programação Introdução a Linguagem Java Linguagem de Programação Introdução a Linguagem Java Rafael Silva Guimarães Instituto Federal do Espírito Santo Campus Cachoeiro de Itapemirim Definição A linguagem Java foi desenvolvida pela Sun Microsystems,

Leia mais

Sistemas Operacionais INF 09344 Prof. José Gonçalves

Sistemas Operacionais INF 09344 Prof. José Gonçalves Sistemas Operacionais INF 09344 Prof. José Gonçalves 1 o Trabalho de Programação Período: 2014/1 Data de Entrega: 2/6/2014 Parte I. Usando Fork e Wait Você deve criar um programa C partei.c. Durante a

Leia mais

O modelo do computador

O modelo do computador O modelo do computador Objetivos: Mostrar como é o funcionamento dos computadores modernos Mostrar as limitações a que estamos sujeitos quando programamos Histórico Os primeiros computadores são da década

Leia mais

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário Filas Fila é um tipo de lista linear onde as inserções são realizadas num extremo (final da Fila) e as remoções restritas ao outro (começo da Fila). O primeiro a entrar é o primeiro a sair e último a entrar

Leia mais

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

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

Leia mais

Universidade Federal da Paraíba

Universidade Federal da Paraíba Universidade Federal da Paraíba Mestrado em Informática Fora de Sede Universidade Tiradentes Aracaju - Sergipe Disciplina Sistemas Operacionais Professor Jacques Philippe Sauvé Aluno José Maria Rodrigues

Leia mais

Problemas Clássicos de Sincronização

Problemas Clássicos de Sincronização Problemas Clássicos de Sincronização Filósofos Jantando Filósofo i: Solução Óbvia O problema dos filósofos jantando foi introduzido e solucionado por Dijkstra em 1965. Neste problema, 5 filósofos estão

Leia mais

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

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 6 Filas UNIP - Ciência da Computação e Sistemas de Informação Estrutura de Dados AULA 6 Filas Estrutura de Dados A Estrutura de Dados Fila Fila é uma estrutura de dados usada em programação, que tem regras para

Leia mais

PROGRAMAÇÃO II 3. FILA DINÂMICA

PROGRAMAÇÃO II 3. FILA DINÂMICA 3. FILA DINÂMICA PROGRAMAÇÃO II Prof. Jean Eduardo Glazar Uma fila é um tipo especial de lista na qual todas as inserções são feitas sempre depois do fim e as deleções no início. Por isso também recebe

Leia mais

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada Programação Estruturada Programação Estruturada Paradigmas de Linguagens de Programação As linguagens desse paradigma são muitas vezes chamadas de linguagens convencionais, procedurais ou imperativas.

Leia mais

Programação WEB. Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP

Programação WEB. Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP Programação WEB Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br docente.ifrn.edu.br/andrealmeida Aula III Introdução PHP Introdução PHP PHP=Hypertext Pre-Processor Linguagem de script open

Leia mais

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo:

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo: Disciplina: Tópicos Especiais em TI PHP Este material foi produzido com base nos livros e documentos citados abaixo, que possuem direitos autorais sobre o conteúdo. Favor adquiri-los para dar continuidade

Leia mais

IES-300. Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Me. Álvaro d Arce alvaro@darce.com.br

IES-300. Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Me. Álvaro d Arce alvaro@darce.com.br IES-300 Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Me. Álvaro d Arce alvaro@darce.com.br Teste de Caixa Branca 2 Teste de Componentes: Caixa Branca Teste de Caixa Branca Grafo de Fluxo de

Leia mais

processo internamente dadospara serem

processo internamente dadospara serem Aula 14 Monitores Sincronização e Troca de de Processos Mensagens (5) Monitores Sugeridos Profa. Patrícia Motivação: (1974) sincronização (forçar) concorrentes. (1) por Dijkstra(1971) e desenvolvidos por

Leia mais

Capítulo 2 Processos e Threads Prof. Fernando Freitas

Capítulo 2 Processos e Threads Prof. Fernando Freitas slide 1 Capítulo 2 Processos e Threads Prof. Fernando Freitas Material adaptado de: TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 3ª edição. Disponível em: http://www.prenhall.com/tanenbaum_br slide

Leia mais

PROGRAMA DE DISCIPLINA

PROGRAMA DE DISCIPLINA PROGRAMA DE DISCIPLINA Disciplina: INTRODUÇÃO À PROGRAMAÇÃO Carga horária total: 60 h Carga horária teórica: 30 h Carga horária prática: 30 h Código da Disciplina: CCMP0041 Período de oferta: 2015.2 Turma:

Leia mais

Programação Básica em Arduino Aula 2

Programação Básica em Arduino Aula 2 Programação Básica em Arduino Aula 2 Execução: Laboratório de Automação e Robótica Móvel Variáveis são lugares (posições) na memória principal que servem para armazenar dados. As variáveis são acessadas

Leia mais

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos. 3 COMANDOS CONDICIONAIS E DE LAÇO Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos. 3.1 COMANDOS CONDICIONAIS 3.1.1 Comando IF Como o próprio nome já indica, estes comandos

Leia mais

Sistemas de Informação

Sistemas de Informação Sistemas de Informação Rules and Triggers André Restivo Sistemas de Informação 2006/07 Rules e Triggers Nem todas as restrições podem ser definidas usando os mecanismos que estudamos anteriormente: - CHECK

Leia mais

Comunicação em Sistemas Distribuídos. Conceitos: Paradigma C/S. Conceitos: Paradigma C/S. Paradigma Cliente/Servidor

Comunicação em Sistemas Distribuídos. Conceitos: Paradigma C/S. Conceitos: Paradigma C/S. Paradigma Cliente/Servidor Comunicação em Sistemas Distribuídos Paradigma / Os processos em um SD estão lógica e fisicamente separados. Precisam se comunicar para que possam interagir O desempenho de um SD depende criticamente do

Leia mais

Métodos de Sincronização do Kernel

Métodos de Sincronização do Kernel Métodos de Sincronização do Kernel Linux Kernel Development Second Edition By Robert Love Tiago Souza Azevedo Operações Atômicas Operações atômicas são instruções que executam atomicamente sem interrupção.

Leia mais

Geração de Código Intermediário. Tradução dirigida por sintaxe. Código de três endereços - exemplo. Código de Três Endereços

Geração de Código Intermediário. Tradução dirigida por sintaxe. Código de três endereços - exemplo. Código de Três Endereços Geração de Código Intermediário Tradução dirigida por sintaxe Vantagens do uso de uma notação intermediária: facilidade de retargetting: geração de código para vários processadores diferentes, reusando

Leia mais

DESENVOLVIMENTO DE SOFTWARE

DESENVOLVIMENTO DE SOFTWARE VARIAÁ VEL Antes de iniciarmos os comandos referentes a Banco de Dados, precisamos de uma breve descrição técnica sobre Variáveis que serão uma constante em programação seja qual for sua forma de leitura.

Leia mais

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com SQL Procedural Josino Rodrigues Neto josinon@gmail.com SQL Procedural Agregada em SQL-92 As ferramentas têm nomes para suas linguagens SQL procedurais/embutidas Oracle : PL/SQL Postgres PL/Pgsql SQL Server

Leia mais

Programação Concorrente Processos e Threads

Programação Concorrente Processos e Threads Programação Concorrente Processos e Threads Prof. Eduardo Alchieri Processos O conceito mais central em qualquer sistema operacional é o processo Uma abstração de um programa em execução Um programa por

Leia mais

Programação Orientada a Objetos Threads

Programação Orientada a Objetos Threads Threads Prof. Edwar Saliba Júnior Janeiro de 2013 1 Introdução Multithreading: fornece múltiplas threads de execução para a aplicação; permite que programas realizem tarefas concorrentemente; às vezes

Leia mais

MÓDULO 02 PROCESSOS E THREADS PROCESSOS e THREADS

MÓDULO 02 PROCESSOS E THREADS PROCESSOS e THREADS MÓDULO 02 PROCESSOS E THREADS PROCESSOS e THREADS 1. ATIVIDADE 01 Verificar a criação de um processo filho (que imprime de 51 a 100) que rodará concorrentemente com o processo pai (que imprime de 1 a 50)

Leia mais

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Curso Adonai QUESTÕES Disciplina Linguagem JAVA 1) Qual será o valor da string c, caso o programa rode com a seguinte linha de comando? > java Teste um dois tres public class Teste { public static void main(string[] args) { String a = args[0]; String

Leia mais

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

AULA 1: PARADIGMAS DE PROGRAMAÇÃO 1 AULA 1: PARADIGMAS DE PROGRAMAÇÃO Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme Ementa 2 Programação Imperativa. Programação Paralela e Concorrente. Programação Lógica. Programação Funcional.

Leia mais

Adicionando Propriedades e Funcionalidades aos Componentes Parte II

Adicionando Propriedades e Funcionalidades aos Componentes Parte II Adicionando Propriedades e Funcionalidades aos Componentes Parte II Quantas vezes eu não lamentei por este componente não ter uma propriedade que guardasse uma lista paralela a lista que é mostrada em

Leia mais

Resumo da última aula. Compiladores. Tipos. Regras semânticas. Expressões de tipos. Análise Semântica e checagem de tipos.

Resumo da última aula. Compiladores. Tipos. Regras semânticas. Expressões de tipos. Análise Semântica e checagem de tipos. Resumo da última aula Compiladores Análise semântica Verificação de tipos 1 Implementação: Esquemas S-atribuídos: Mecanismo bottom-up direto Esquemas L-atribuídos: Mecanismo top-down: Necessita gramática

Leia mais

Sistemas Operacionais. Conceitos de um Sistema Operacional

Sistemas Operacionais. Conceitos de um Sistema Operacional Sistemas Operacionais Conceitos de um Sistema Operacional Modo usuário e Modo Kernel Como já vimos são ambientes de execução diferentes no processador Há um conjunto de funções privilegiadas acessadas

Leia mais

INTRODUÇÃO OBJECT PASCAL/DELPHI

INTRODUÇÃO OBJECT PASCAL/DELPHI Introdução Object Pascal/Delphi 1 INTRODUÇÃO OBJECT PASCAL/DELPHI Objetivo Demonstrar a sintaxe e a semântica do Object Pascal e a forma como esse linguagem de programação será aplicada na disciplina de

Leia mais

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

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

Leia mais

Geração de código intermediário. Novembro 2006

Geração de código intermediário. Novembro 2006 Geração de código intermediário Novembro 2006 Introdução Vamos agora explorar as questões envolvidas na transformação do código fonte em uma possível representação intermediária Como vimos, nas ações semânticas

Leia mais

Estrutura de Dados Pilha (Stack)

Estrutura de Dados Pilha (Stack) Estrutura de Dados Pilha (Stack) Estrutura de Dados que corresponde a uma lista sequencial com a propriedade seguinte: LIFO O primeiro elemento a entrar é o último a sair ( Last in First Out ) Operações

Leia mais

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Bruno Jurkovski Lucas Fialho Zawacki Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Por que Ruby? Sintaxe limpa e intuitiva: Por que Ruby? Fortemente orientada à objetos Note que não temos os tipos primitivos,

Leia mais

Sincronização de Processos (1) Mecanismos de busy wait

Sincronização de Processos (1) Mecanismos de busy wait Sincronização de Processos (1) Mecanismos de busy wait Condições de Corrida Exemplo: Fila de impressão. Qualquer processo que queira imprimir precisa colocar o seu documento na fila de impressão (compartilhada).

Leia mais

Laboratório de Programação I

Laboratório de Programação I Laboratório de Programação I Estruturas de Controle: Parte I Fabricio Breve Objetivos Entender as técnicas básicas de solução de problemas Desenvolver algoritmos por meio do processo de refinamento top-down

Leia mais

Resumo da Matéria de Linguagem de Programação. Linguagem C

Resumo da Matéria de Linguagem de Programação. Linguagem C Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis

Leia mais

Curso : Tecnologia em Desenvolvimento de Sistemas - AEMS

Curso : Tecnologia em Desenvolvimento de Sistemas - AEMS Curso : Tecnologia em Desenvolvimento de Sistemas - AEMS Série : 3 º Período - 1 º Semestre de 2011 Professora : Elzi Ap. Gil 3. LISTAS LINEARES PARTE - III Disciplina - Estrutura de Dados Segundo Pereira(2002),

Leia mais