Programação de Sistemas
|
|
|
- Ronaldo Castilhos Cordeiro
- 9 Há anos
- Visualizações:
Transcrição
1 Programação de Sistemas Jantar dos filósofos Programação de Sistemas Jantar dos filósofos : 1/14 Introdução (1) O jantar dos filósofos, proposto por Dijkstra em 1971, é o problema mais famoso de acesso a recursos partilhados por processos concorrentes. Cinco filósofos estão sentados numa mesa redonda, alternam entre pensar e comer. O alimento consumido é esparguete, disponibilizado em quantidades ilimitadas. Para comer esparguete necessitam de dois garfos, colocados ao seu lado. Impasse ocorre se todos os filósofos pegarem o garfo do mesmo lado (ex: direito), ficando à espera que o seu colega do outro lado liberte o garfo. Figura 2-31, Modern Operating Systems Programação de Sistemas Jantar dos filósofos : 2/14
2 Introdução (2) Os filósofos e os garfos são numerados 0..N-1 (N é o número de filósofos). O programa recebe o tempo de simulação na linha de comando. Tempos de espera usam função sleep(unsigned sec); /* refeição demora entre 2+0 e 2+2 segundos */ #define eat(i) {printf("phil %d eating\n",i);sleep(2+(int)(random())%3; #define think(i) {printf("phil %d thinking\n",i); sleep(6+(int)(random())%6; Programação de Sistemas Jantar dos filósofos : 3/14 Introdução (3) Exploradas duas estratégias de sincronização dos recursos escassos (garfos) 1. Estado de cada filósofo conhecido por todos Semáforo door assegura exclusão mútua. Caso pelo menos um dos vizinhos esteja a comer, o filósofo fica bloqueado na tabela de semáforos s (é libertado pelo filósofo vizinho, quando retorna garfo). 2. Garfos geridos por gestor, através de mensagens enviadas por pipes. A solução por gestor é mais pesada (mais processos e custo de distribuição de mensagens), mas conceptualmente mais simples de implementar. Programação de Sistemas Jantar dos filósofos : 4/14
3 Resolução por semáforos (1) Os estados de cada filósofo indicados numa tabela typedef enum {thinking, hungry, eating Tstate; Tstate state[n]; Os vizinhos do filósofo i são Esquerdo: (i-1)%n Direito: (i+1)%n O fio de execução do filósofo possui como parâmetro a sua posição. Ao todo existem 6 semáforos Acesso à região crítica: sem_t door; Espera que vizinho liberte garfo: sem_t s[n]; Programação de Sistemas Jantar dos filósofos : 5/14 Resolução por semáforos (2) #include <pthread.h> #include <semaphore.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #define N 5 // philosophers #define left(i) ( (i-1)%n ) #define right(i) ( (i+1)%n ) #define eat(i) {printf("phil %d eating\n",i); sleep(2+2*random()/rand_max); #define think(i) {printf("phil %d thinking\n",i);sleep(6+3*random()/rand_max); typedef struct { int pos; arguments; typedef enum {thinking, hungry, eating Tstate; Tstate state[n]; sem_t door; /* acesso à regiao crítica */ sem_t s[n]; /* espera de cada filósofo */ Programação de Sistemas Jantar dos filósofos : 6/14
4 Resolução por semáforos (3) void take_forks(int i) { sem_wait(&door); state[i] = hungry; test(i); sem_post(&door); sem_wait(&s[i]); /* bloqueia se grafos não foram adquiridos */ void put_forks(int i) { sem_wait(&door); state[i] = thinking; test(left(i)); test(right(i)); sem_post(&door); Programação de Sistemas Jantar dos filósofos : 7/14 Resolução por semáforos (4) void test(int i) { if ( state[i] == hungry ) { if( state[left(i)]!= eating && state[right(i)]!= eating ){ state[i] = eating; sem_post(&s[i]); else printf("phil %d hungry\n", i); void *philosopher(void *arg) { arguments *argument=(arguments *)arg; int i; i = argument->pos; while(1) { think(i) take_forks(i); eat(i) put_forks(i); Programação de Sistemas Jantar dos filósofos : 8/14
5 Resolução por semáforos (5) int main(int argc, char *argv[]) { int i; pthread_t t[n]; arguments *arg; if(argc!=2) { fprintf( stderr, %s time\n,argv[0] ); exit(1); /* inicializa semáforos */ for(i=0; i<n;i++) sem_init( &s[i],0,0 ); sem_init( &door,0,1 ); for(i=0;i<n;i++) state[i]=thinking; for(i=0;i<n;i++) { arg = (arguments *)malloc(sizeof(arguments)); arg->pos=i; t[i]=pthread_create(&(t[i]),null,philosopher,(void *)arg); if(t[i]!=0) { fprintf( stderr,"erro na criacao do thread\n ); exit(1); sleep( atoi(argv[1]) ); return 0; [rgc@asterix JantarFilosofos]$ JF1 17 Phil 0 thinking Phil 1 thinking Phil 2 thinking Phil 3 thinking Phil 4 thinking Phil 0 eating Phil 1 hungry Phil 2 eating Phil 3 hungry Phil 4 hungry Phil 1 hungry Phil 0 thinking Phil 2 thinking Phil 1 eating Phil 3 eating Phil 1 thinking Phil 3 thinking Phil 4 eating Phil 4 thinking Phil 0 eating Phil 2 eating Phil 0 thinking Phil 2 thinking Phil 1 eating Phil 3 eating [rgc@asterix JantarFilosofos]$ Programação de Sistemas Jantar dos filósofos : 9/14 Resolução por mensagens (1) Garfos vizinhos do filósofo i são i e (i+1)%n O simulador possui os seguintes canais de comunicação Um pipe de envio de pedidos para o gestor Cada processo possui um pipe, por onde o gestor envia a resposta ao pedido. O pedido do filósofo é uma cadeia de 3 caracteres: 1. Número de filósofo ( 0 +i) 2. Requerimento ('P' para pedir garfos, 'L' para libertar garfos) 3. Canal de escrita da resposta para o filósofo ( A +canal) Constantes /* Códigos de acção */ #define GRAB 'P' #define RELEASE 'L' /* Códigos de resposta do gestor ao pedido de um filósofo */ #define DENY '0' #define OK '1' Programação de Sistemas Jantar dos filósofos : 10/14
6 Resolução por mensagens (2) Pipes usados para comunicação int fd[n][2]; /* gestor->filosofo (resultado) */ int request[2]; /* filosofo->gestor (pedido/libertação garfo) */ Cada um dos 5 filósofos é um processo void phil( int p_numb, /* numero de filosofo 0-4 */ int quest, /* canal escrita fil->gestor */ int w_mng, /* canal escrita gestor->fil */ int r_mng /* canal leitura gestor->fil */ ); O gestor recebe como parâmetro o canal de leitura dos pedidos void manager( int in ); /*descritor do canal de leitura dos pedidos*/ Programação de Sistemas Jantar dos filósofos : 11/14 Resolução por mensagens (3) void phil( int p_numb, int quest, int w_mng, int r_mng) { for(;;) { phil_status my_status = thinking; depict_status(p_numb,my_status); sleep( 8+(int)(random())%5 ); for(;;) { /* pede garfos */ msg[0]=grab; msg[1]='0'+p_numb; msg[2]='a'+w_mng; msg[3]='\0'; write(quest,msg,len); read(r_mng,msg,len); /* espera resposta */ if(msg[0]==deny) { my_status = waiting; depict_status(p_numb,my_status); sleep(6+(int)(random())%3; else { my_status = eating; depict_status(p_numb,my_status); sleep( 3+(int)(random())%3 ); /* liberta garfos */ msg[0]=release; msg[1]='0'+p_numb; msg[2]='a'+w_mng; msg[3]='\0'; write( quest,msg,len ); break; Programação de Sistemas Jantar dos filósofos : 12/14
7 Resolução por mensagens (4) void manager(int in) { int idx; int left,right; /* inicializa estado dos garfos */ for( idx=0;idx<n;idx++ ) busy[idx] = FALSE; for(;;) { read( in,msg,len ); left = msg[1]-'0'; right = (msg[1]-'0'+1)%n; if ( msg[0]==grab ) { if( busy[left]==false && busy[right]==false ) { busy[left] = busy[right] = TRUE; msg[0] = OK; else msg[0] = DENY; write( msg[2]-'a',msg,len ); else busy[left] = busy[right] = FALSE; Programação de Sistemas Jantar dos filósofos : 13/14 Resolução por mensagens (5) int main(int argc, char *argv[]) { int idx; pid_t res, f[n]; if( argc!=2 ) { fprintf( stderr, %s time\n,arv[0] ); exit(1); /* cria pipes para os filósofos */ for(idx=0; idx<phil_numb; idx++) pipe(fd[idx]); pipe(request); /* cria pipe para gestor de garfos */ /* lança os filósofos */ for( idx=0;idx<phil_numb;idx++ ) { res = fork(); if( res==0 ) phil(idx, request[1], fd[idx][1], fd[idx][0]); else f[idx] = res; res=fork(); /* lança gestor */ if( res==0 ) manager(request[0]); [rgc@asterix JantarFilosofos]$ JF2 17 Phil number 0 is Thinking Phil number 1 is Thinking Phil number 2 is Thinking Phil number 3 is Thinking Phil number 4 is Thinking Phil number 0 is Eating Phil number 1 is Waiting Phil number 2 is Eating Phil number 3 is Waiting Phil number 4 is Waiting Phil number 0 is Thinking Phil number 2 is Thinking Phil number 1 is Eating Phil number 3 is Eating Phil number 4 is Waiting Phil number 1 is Thinking Phil number 3 is Thinking sleep(atoi(argv[1])); /* adormece tempo de simulação */ /* elimina processos antes de fechar programa */ for( idx=0;idx<phil_numb;idx++ ) kill(f[idx],sigkill); kill( res,sigkill ); return 0; Programação de Sistemas Jantar dos filósofos : 14/14
8 PROBLEMAS CLÁSSICOS
8 PROBLEMAS CLÁSSICOS 8.1.1 FILÓSOFOS GLUTÕES Contexto: temos cinco filósofos, cujas únicas atividades são comer macarrão e pensar. Além disso, o macarrão nunca acaba. Componentes do problema: 5 Filósofos
Programando com Threads em C
Programando com Threads em C O que são Threads? Linhas de execução concorrentes Memória (pilha) independente Podem compartilhar áreas de memória Início Processo 1 Threads Fim Problemas Sincronização entre
Programação de Sistemas
Programação de Sistemas Pai Natal Programação de Sistemas Pai Natal : 1/16 Problema (1) Considere o Pai Natal ( Santa Claus ) se encontra a dormir na sua loja em Rovaniemi-Lapónia finlandesa, sendo acordado
Sincronização de Processos (3) Exercícios - Semáforos
Sincronização de Processos (3) Exercícios - Semáforos Uso dos Semáforos 1. Sincronização de execução 2. Acesso a recursos limitados 3. Exclusão mútua Problema do pombo correio Problema do jantar dos canibais
Produtor - Consumidor c/ Buffer Circular (1) Aula 13 - Exercícios - Semáforos. Produtor - Consumidor c/ Buffer Circular (3)
1 Produtor - Consumidor c/ Buffer Circular (1) Dois problemas p/ resolver: - Variáveis compartilhada - Coordenação quando o buffer estiver CHEIO ou VAZIO Sincronização de Processos (4) Próxima inserção
Listas ligadas/listas encadeadas
1 Listas ligadas/listas encadeadas Leitura recomendada: http://www.ime.usp.br/~pf/algoritmos/aulas/lista.html 2 Processamento elementar de listas Definição mais restritiva (tipo de lista possivelmente
Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes
Comunicação Inter-Processo em Unix Pipes FIFO (Named Pipes) 1 Pipes 2 1! Comunicação entre pai e filho Ao chamar um fork(), processos pai e filho deixam de compartilhar memória Como fazer então para que
Algoritmos e Programação
Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Algoritmos e Programação Parte 05 Prof. Jorge Cavalcanti [email protected] www.univasf.edu.br/~jorge.cavalcanti
Sincronização de Processos (3) Exercícios - Semáforos
Sincronização de Processos (3) Exercícios - Semáforos Uso dos Semáforos 1. Sincronização de execução 2. Acesso a recursos limitados 3. Exclusão mútua Problema do pombo correio Problema do jantar dos canibais
Memória compartilhada
Memória compartilhada Luiz Affonso Guedes 1 Ivanovitch Silva 1 [email protected] [email protected] 1 Universidade Federal do Rio Grande do Norte 15 de outubro de 2009 Memória compartilhada DCA0109 - Prática
Sincronização de Processos (3) Exercícios - Semáforos
Sincronização de Processos (3) Exercícios - Semáforos Uso dos Semáforos 1. Sincronização de execução 2. Acesso a recursos limitados 3. Exclusão mútua Problema do pombo correio Problema do jantar dos canibais
Linguagem de Programação C
ICMC USP Linguagem de Programação C Aula: Funções em C Prof Alneu de Andrade Lopes MODULARIZAÇÃO Um problema complexo é melhor abordado se for dividido primeiramente em vários subproblemas MODULARIZAÇÃO
SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios
SISTEMAS OPERACIONAIS Prof a. Roberta Lima Gomes ([email protected]) 2ª. Lista de Exercícios Data de Entrega: não há. O objetivo da lista é ajudar no estudo individual dos alunos. SINAIS 1. Qual a diferença
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO
Curso: Engenharia de Computação e Ciência da Computação Data: 10/09/2013 Disciplina: Programação Estruturada Valor: 3,0 pontos Professor: Henrique Monteiro Cristovão Nota: Aluno: Prova resolvida 4ª Prova
Programação Estruturada I
Programação Estruturada I Introdução a Linguagem C Prof. Thiago Caproni Tavares 1 Prof. Mateus dos Santos 2 1 [email protected] 2 [email protected] Última Atualização:
Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas
Computação 2 Aula 10.1 Listas Duplamente Encadeadas Profª. Fabiany [email protected] ListaEncadeada.h #ifndef _LISTAENCADEADA_H_ #define _LISTAENCADEADA_H_ #include #include #include
Comunicação entre Processos
Comunicação entre Processos Pipes Redirecionamento de entrada e saída 4/19/18 1 O Pipe: Características (1) Canal de comunicação entre processos parentes, usando a politica First-In-First-Out (FIFO) Tipicamente,
Tipos Abstratos de Dados (TAD)
Instituto de C Tipos Abstratos de Dados (TAD) Luis Martí Instituto de Computação Universidade Federal Fluminense [email protected] - http://lmarti.com Tópicos Principais Módulos e Compilação em separado
Comunicação entre Processos Named Pipes (FIFO)
Comunicação entre Processos Named Pipes (FIFO) 5/17/18 1 Named pipe (FIFO) FIFO permite que dois processos quaisquer se comuniquem É um tipo especial de arquivo visível no sistema de arquivos Na troca
Aula 3/4: Vetores/Matrizes e Ponteiros
Carlos Henrique/Introdução C++ Aula 3/4: Vetores/Matrizes e Ponteiros Funções: Função main (int argc, char ** argv) Recursão Vetores/Matrizes/Strings Vetor (Matriz Unidimensional) Gerando um ponteiro para
SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios
SISTEMAS OPERACIONAIS INF09344 - Sistemas Operacionais / INF02780 - Sistemas Operacionais / INF02828 - Sistemas de Programação II Prof a. Roberta Lima Gomes ([email protected]) 2ª. Lista de Exercícios Data
Programando com Threads em C
Programando com Threads em C AEDS III Bruno Diniz de Paula ([email protected]) e-commerce System Performance Evaluation and Experimental Development Lab O que são Threads? Linhas de execução concorrentes
Tabela ASCII de caracteres de controle
Caracteres Estruturas de Dados Aula 6: Cadeias de Caracteres 31/03/2010 Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis
Indexação e Busca. O objetivo deste trabalho é projetar e implementar um sistema de programas para indexação e busca em arquivos de texto.
Universidade Federal do Espírito Santo Departamento de Informática Estruturas de Dados 2017/1 Profa. Claudine Badue Trabalho 2 1. Objetivo Indexação e Busca O objetivo deste trabalho é projetar e implementar
Sistemas Operacionais Processos
Sistemas Operacionais Processos Prof. Raimundo Macêdo, DCC/UFBA Processo processo: programa em execução consiste de: código do programa executável dados pilha de execução contador de programa valores de
PROGRAMAÇÃO FUNÇÕES NA LINGUAGEM C
PROGRAMAÇÃO FUNÇÕES NA LINGUAGEM C 1 Implementações básicas : a) Implementar a função LerValorValido que verifica se um valor introduzido pelo utilizador pertence ao conjunto limitado por dois dados valores
Listas (Parte 2) Túlio Toffolo [email protected] www.toffolo.com.br. BCC202 Aula 10 Algoritmos e Estruturas de Dados I
Listas (Parte 2) Túlio Toffolo [email protected] www.toffolo.com.br BCC202 Aula 10 Algoritmos e Estruturas de Dados I Listas Encadeadas Características: Tamanho da lista não é pré-definido Cada elemento
Sistemas Distribuídos Capítulo 4 - Aula 5
Sistemas Distribuídos Capítulo 4 - Aula 5 Aula Passada Clusters de Servidores Migração de Código Comunicação (Cap. 4) Aula de hoje Chamada de Procedimento Remoto - RPC Fundamentos 1 Chamada de Procedimento
Referências. Programação de Computadores II. Cap. 7 Cadeias de Caracteres. Caracteres. Tópicos
Referências Programação de Computadores II Cap. 7 Cadeias de Caracteres Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004) Capítulo 7 Livro: Waldemar
FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara
Universidade do Estado de Minas Gerais - UEMG Curso de Engenharia da Computação FUNÇÕES EM C 1 Material adaptado da profa Silvana Maria Affonso de Lara ROTEIRO DA AULA Definição de Função Argumentos, retornos
ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza
ESTRUTURAS CONDICIONAIS Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza Estruturas de Controle ESTRUTURA SEQUENCIAL ESTRUTURA CONDICIONAL ESTRUTURA DE REPETIÇÃO 2 Estruturas Condicionais
/*(Atenção: Em se tratando de uma lista estaticamente alocada, temos utilizado a estratégia de passa o tamanho máximo do vetor.)*/
========================TDA.H #include "info.h" #define TRUE 1 #define FALSE 0 #define INI_LISTA 1 #define OK 1; #define NOK -1; typedef struct nolista{ info dados; struct nolista *prox; struct nolista
Exercícios Resolvidos (Problemas Clássicos e Outros)
1) Produtor-consumidor com buffer limitado Exercícios Resolvidos (Problemas Clássicos e Outros) Este problema pode ser enunciado como segue. Um par de processos compartilha um buffer de N posições. O primeiro
Métodos Computacionais. Fila
Métodos Computacionais Fila Definição de Fila Fila é uma estrutura de dados dinâmica onde: Inserção de elementos se dá no final e a remoção no início O primeiro elemento que entra é o primeiro que sai
Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação
Linguagem C: variáveis, operadores, entrada/saída Prof. Críston Algoritmos e Programação Linguagem C Linguagem de uso geral (qualquer tipo de aplicação) Uma das linguagens mais utilizadas Foi utilizada
Simulado de Linguagem de Programação Java
Simulado de Linguagem de Programação Java 1. Descreva o processo de criação de programas em Java, desde a criação do código-fonte até a obtenção do resultado esperado, por meio de sua execução. Cite as
MC504 Sistemas Operacionais MC514 Sistemas Operacionais: Teoria e
Instituto de Computação Universidade Estadual de Campinas Nome: MC504 Sistemas Operacionais MC514 Sistemas Operacionais: Teoria e Prática Profa. Islene Calciolari Garcia 18 de setembro de 2013 Questão
Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos
Computação I - C Prova 2 2016-2 14/10/2016 - Profs. Adriano Cruz e Valeria Bastos Nome: DRE: Observação: Justifique todas as respostas dadas. Some nte serão aceitas respostas com justificativas. Questão
Conversão Visualg à C++ Prof. Paulo Cesar F. de Oliveira, BSc, PhD
Conversão Visualg à C++ Prof. Paulo Cesar F. de Oliveira, BSc, PhD 1 Unidade 01-a Algoritmos e Programação Seção 1.1 Visualg 2 Formato do Visualg algoritmo nome do algoritmo // Função: // Autor: // Data:
PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS
PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS Disciplina de Nivelamento - 2000/1: ALGORITMOS & ESTRUTURAS DE DADOS Professor Responsável: Prof. Fernando Santos
Trabalho Prático II - Resta 1 Data de Entrega: Conferir no calendário!
ALGORITMOS E ESTRUTURAS DE DADOS I DCC/UFMG Trabalho Prático II - Resta 1 Data de Entrega: Conferir no calendário! Pedro O.S. Vaz de Melo May 29, 2013 1 DESCRIÇÃO DO PROBLEMA O objetivo deste trabalho
Capítulo 5: Repetições
Capítulo 5: Repetições INF1004 e INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Construção de Laços Repetição: Diversos problemas de difícil solução podem ser resolvidos
TAD: Tipo Abstrato de Dados (parte 2)
TAD: Tipo Abstrato de Dados (parte 2) SCC0202 Algoritmos e Estruturas de Dados I Prof. Thiago A. S. Pardo Modularização em C Programa em C pode ser dividido em vários arquivos Arquivos fonte com extensão.c
Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR
Listas Encadeadas David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Listas Encadeadas Características: Tamanho da lista não é pré-definido Cada elemento guarda quem é o próximo Elementos não
ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza
ESTRUTURAS CONDICIONAIS Introdução à Ciência da ComputaçãoI Simone Senger de Souza Estruturas de Controle ESTRUTURA SEQUENCIAL ESTRUTURA CONDICIONAL ESTRUTURA DE REPETIÇÃO 2 Estruturas Condicionais Estrutura
Do alto-nível ao assembly
Do alto-nível ao assembly Compiladores Cristina C. Vieira 1 Viagem Como são implementadas as estruturas computacionais em assembly? Revisão dos conceitos relacionados com a programação em assembly para
1 System Calls no Linux
Sistemas Operacionais Laboratorio - System Calls Adaptação do Laboratório 1 - Prof. Eduardo Zambon 1 System Calls no Linux Vamos mencionar aqui alguns pontos já discutidos em aula e introduzir novos conceitos
Comunicação entre pai e filho
Comunicação entre pai e filho Ao chamar um fork(), processos pai e filho deixam de compartilhar memória Como fazer então para que o resultado de um processo possa ser recebido pelo outro? Exemplos: Processo
Criação de Processos Fork( ) Exec( )
Criação de Processos Fork( ) Exec( ) 8/23/18 1 Chamadas de Sistema: Process Management 2 Chamada fork( ) / exec( ) 3 Esboço de uma shell while (TRUE) { /* repeat forever */ type_prompt( ); /* display prompt
Algoritmos e Estruturas de dados
Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores
Laboratório de Programação - Exercício 25
Laboratório de Programação - Exercício 25 Funções de Argumentos Variáveis João Araujo Ribeiro [email protected] Universidade do Estado do Rio de Janeiro Departamento de Engenharia de Sistemas e Computação
Curso C: Funções e Macros
Universidade de Brasília Departamento de Ciência da Computação Curso C: Funções e Macros Prof. Ricardo Pezzuol Jacobi [email protected] Funções Fun es s o blocos de c digo que podem ser nomeados e chamados
Manipulação de processos
Manipulação de processos Luiz Affonso Guedes 1 Ivanovitch Silva 1 [email protected] [email protected] 1 Universidade Federal do Rio Grande do Norte 17 de setembro de 2009 Processos DCA0109 1 / 18 Sumário
1.a) Qual a diferença entre uma linguagem de programação de alto nível e uma linguagem de programação de baixo nível?
P1 Conceitos (2,4 valores) 1.a) Qual a diferença entre uma linguagem de programação de alto nível e uma linguagem de programação de baixo nível? (0.8v) 1.b) Indique três vantagens de criar um programa
http://www.csl.mtu.edu/cs4411/www/notes/process/fork/create.html
http://www.csl.mtu.edu/cs4411/www/notes/process/fork/create.html FORK() SYSTEM CALL * UTILIZADO PARA CRIAR SUBPROCESSO * PROCESSO QUE CRIA É PAI * PROCESSO CRIADO É O FILHO * APÓS A CRIAÇÃO AMBOS OS PROCESSO
Linguagens de Programação I
Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler
Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos
Processos Conceitos Básicos Processo (1) Abstração usada pelo S.O. para designar a execução de um programa. É caracterizado por uma thread de execução, um estado corrente e um conjunto associado de recursos
Processos. Conceitos Básicos
Processos Conceitos Básicos Processo (1) Abstração usada pelo S.O. para designar a execução de um programa. É caracterizado por uma thread de execução, um estado corrente e um conjunto associado de recursos
Comunicação entre Processos Memória Compartilhada
Comunicação entre Processos Memória Compartilhada 3/23/17 1 Métodos de comunicação entre processos Memória compartilhada Sinais Pipes Troca de mensagens Memória Compartilhada Memória compartilhada Permite
Métodos Computacionais. Tipos Estruturados
Métodos Computacionais Tipos Estruturados Tipos Estruturados C oferece tipos primitivos que servem para representar valores simples Reais (float, double), inteiros (int), caracter (char) C oferece também
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
