Programação de Sistemas

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

Download "Programação de Sistemas"

Transcrição

1 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 apenas se 1. uma rena ( reindeer ), em número indicado na linha de comandos, regressa das suas férias nas Caraíbas, ou 2. um duende ( elf em número definido por uma constante) detecta problemas no fabrico de brinquedos. As renas partem para férias indicando no terminal o seu número de lançamento. Em média, as férias duram entre 16 e 24 segundos. A cada duende ocorre um erro no fabrico de brinquedos em intervalos entre 4 a 6 segundos. Programação de Sistemas Pai Natal : 2/16

2 Problema (2) O Pai Natal resolve todos os problemas de fabrico em 1 segundo e depois volta a dormir. Sempre que o Pai Natal é acordado por uma rena que não seja a última, deixa alimento e volta a dormir. Chegada a última rena, o Pai Natal parte de trenó para distribuir as prendas, durando 10 segundos a volta ao mundo. As renas só devem terminar depois de distribuídos os brinquedos. Os duendes terminam depois do Pai Natal iniciar a distribuição de brinquedos. Codifique em C para Linux um simulador que inclua funções para os fios de execução Elf, Reindeer e SantaClaus. Nota: para obter um número aleatório, use a função int rand(). Programação de Sistemas Pai Natal : 3/16 Arquitectura (1) Tarefas Tal como indicado no enunciado, as tarefas são implementadas por fios de execução ( threads ) lançados pelo programa principal. Pai Natal (1), Duendes (em número definido por uma constante), Renas (em número indicado na linha de comandos). Apenas as renas possuem um parâmetro o número de lançamento, entre 0 e reinnumb-1. typedef struct{ int pos; arguments; Programação de Sistemas Pai Natal : 4/16

3 Arquitectura (2) Variáveis Globais, de interesse a vários fios de execução: unsigned int waiting; número de renas à espera na porta variam entre 0 e total de renas determinam quando o Pai Natal parte para distribuir os presentes. unsigned int leaving; 0 ou 1, identifica se o Pai Natal se encontra dentro (0) ou a distribuir presentes (1). De sincronização: pthread_mutex_t chave; mutex de protecção de acesso à variável waiting. sem_t barn; semáforo, inicializado a 0, Programação de Sistemas Pai Natal : 5/16 Arquitectura (3) Os identificadores dos fios de execução, necessários ao seu lançamento, dependem do número de threads pthread_t santaid; só há um Pai Natal. pthread_t elfid[elf_n]; o número de duendes é determinada por uma constante. pthread_t *reinid; o número de duendes, desconhecido ao compilador, é indicado na linha de comandos (logo, os identificadores têm de ser criados dinamicamente). Programação de Sistemas Pai Natal : 6/16

4 Arquitectura (4) Comunicação Os fios de execução comunicam entre si através de sinais. Chegada de rena: SIGUSR1 dirigido ao Pai Natal. Duende com problema: SIGUSR2 dirigido ao Pai Natal. Ambos os sinais são tratados ( handled ) pela função void wakeup( int signumb ) Pai Natal termina distribuição dos brinquedos: SIGUSR2 dirigido a cada uma das renas. Sinal tratado ( handled ) pela função void bye( int signumb ) Programação de Sistemas Pai Natal : 7/16 Arquitectura (5) Terminação Os fios de execução terminam na seguinte forma: Duendes, executa pthread_exit() quando verifica que o Pai Natal partiu para distribuir os presentes. Nenhum fio de execução fica à espera, logo deve ser executado o pthread_detach(). Renas, depois de chegar, fazem pause() à espera do sinal enviado pelo Pai Natal e depois executam o pthread_exit(). O Pai Natal fica à espera que as renas terminem. O Pai Natal termina com pthread_exit() e o programa principal fica à espera que o Pai Natal termine. Programação de Sistemas Pai Natal : 8/16

5 Programa principal (1) #include <stdlib.h> /* malloc */ #include <stdio.h> /* printf */ #include <signal.h> /* sinais */ #include <semaphore.h> /* semáforos */ #include <pthread.h> /* threads e mutexes */ #define ELF_N 2 /* numero de duendes */ typedef struct{ unsigned int pos; arguments; pthread_t santaid; /* identificador do Pai Natal */ pthread_t elfid[elf_n]; /* identificador dos duendes */ pthread_t *reinid; /* identificador das renas */ pthread_mutex_t chave; /* protege acesso a waiting */ sem_t barn; /* espera das renas */ unsigned int waiting, leaving; int reinnumb; /* numero de renas */ Programação de Sistemas Pai Natal : 9/16 Programa principal (2) main(int argc, char *argv[]) { int i; if( argc!=2 ) { printf( "%s elfnumber\n",argv[0] ); exit( 3 ); reinnumb = atoi( argv[1] ); reinid = (pthread_t *)malloc( reinnumb*sizeof(pthread_t) ); srand(time(null)); waiting = 0; /* numero de renas à espera */ leaving = 0; /* estado do Pai Natal */ /* inicializa tranca e semáforo */ pthread_mutex_init( &chave,null ); sem_init( &barn,0,0 ); Programação de Sistemas Pai Natal : 10/16

6 Programa principal (3) /* Lança Pai Natal */ printf( "Lancado Pai Natal\n" ); if( pthread_create( &santaid,null,santaclaus,null ) ) { printf( "Erro no lancamento do Pai Natal\n" ); exit( 2 ); /* Lança duendes */ for( i=0;i<elf_n;i++ ) { printf( "Duende %i comeca a produzir brinquedos\n",i ); if( pthread_create( &(elfid[i]),null,elf,null ) ) { printf( "Erro no lancamento do duende %d\n",i ); exit( 2 ); pthread_detach( elfid[i] ); Programação de Sistemas Pai Natal : 11/16 Programa principal (4) /* Lança renas */ for( i=0;i<reinnumb;i++ ) { int *pos = (int *)malloc( sizeof(int) ); *pos = i; printf( "Rena %i parte de ferias para as Caraibas\n",i ); if( pthread_create( &(reinid[i]),null,reindeer,(void *)pos ) ) { printf( "Erro no lancamento da rena %d\n",i ); exit( 2 ); /* Elimina tranca e semáforo */ if(!pthread_mutex_destroy( &chave ) ) { printf( "Erro na eliminacao da tranca chave\n" ); exit(4); if ( sem_destroy( &barn )==-1 ) { printf( "Erro na eliminacao do semaforo barn\n" ); exit(4); pthread_join( santaid,null ); Programação de Sistemas Pai Natal : 12/16

7 Tratamento interrupções void bye( int signumb ) { return; void wakeup( int signumb ) { int i,numb; if( signumb==sigusr1 ) { /* Chamada veio do duende */ printf( "\n" ); sleep( 1 ); if( signumb==sigusr2 ) { /* Chamada veio de uma rena */ pthread_mutex_lock( &chave ); numb = waiting; pthread_mutex_unlock( &chave ); if( numb<reinnumb ) { printf("\n");fflush(null); else { /* Vamos distribuir os presentes! */ leaving = 1; printf( "Ho! Ho! Ho!\n" ); sleep( 10 ); for( i=0;i<reinnumb;i++ ) { pthread_kill( reinid[i],sigusr2 ); pthread_join( reinid[i],null ); printf("uff, este ano tive imenso trabalho a distribuir os brinquedos!\n"); pthread_exit( NULL ); Programação de Sistemas Pai Natal : 13/16 Threads (1) void *santaclaus( void *arg ) { signal( SIGUSR1,wakeUp ); signal( SIGUSR2,wakeUp ); for( ;; ) pause(); void *elf( void *arg ) { for( ;; ) { sleep( 4+rand()%3 ); if ( leaving ) pthread_exit( NULL ); else pthread_kill( santaid,sigusr1 ); Programação de Sistemas Pai Natal : 14/16

8 Threads (2) void *reindeer( void *arg ) { int i; arguments *argument = (arguments*)arg; sleep(16+ rand()%9); /* tempo de férias nas Caraibas;-) */ printf( "Rena %d chega de ferias e ",*(int *)arg ); pthread_mutex_lock( &chave ); pthread_kill( santaid,sigusr2 ); if ( waiting==(reinnumb-1) ) { printf( "chama as outras renas\n" ); fflush( NULL ); for( i=0;i<reinnumb;i++ ) sem_post( &barn ); waiting++; pthread_mutex_unlock( &chave ); else { printf( "espera fora da porta\n" ); fflush( NULL ); waiting++; pthread_mutex_unlock( &chave ); sem_wait( &barn ); signal( SIGUSR2,bye ); pause(); pthread_exit( NULL ); Programação de Sistemas Pai Natal : 15/16 Exemplo de execução [rgc@asterix PaiNatal]$ Xmas 7 Lancado Pai Natal Duende 0 comeca a produzir brinquedos Duende 1 comeca a produzir brinquedos Rena 0 parte de ferias para as Caraibas Rena 1 parte de ferias para as Caraibas Rena 2 parte de ferias para as Caraibas Rena 3 parte de ferias para as Caraibas Rena 4 parte de ferias para as Caraibas Rena 5 parte de ferias para as Caraibas Rena 6 parte de ferias para as Caraibas Rena 2 chega de ferias e espera fora da porta Rena 5 chega de ferias e espera fora da porta Rena 1 chega de ferias e espera fora da porta Rena 3 chega de ferias e espera fora da porta Rena 0 chega de ferias e espera fora da porta Rena 4 chega de ferias e espera fora da porta Rena 6 chega de ferias e chama as outras renas Ho! Ho! Ho! Uff, este ano tive imenso trabalho a distribuir os brinquedos! [rgc@asterix PaiNatal]$ Programação de Sistemas Pai Natal : 16/16

Programando com Threads em C

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

Leia mais

OO Engenharia Eletrônica

OO Engenharia Eletrônica OO Engenharia Eletrônica - Programação em C/C++ Slides 18: Introdução à Multithreading. Introdução à Multithreading: execução concorrente de tarefas. Exemplos usando a biblioteca pthread que é de acordo

Leia mais

Programando com Threads em C

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

Leia mais

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

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

Leia mais

Eventos. Rotinas Assíncronas

Eventos. Rotinas Assíncronas Eventos Rotinas Assíncronas para Tratamento de acontecimentos assíncronos e excepções Rotinas Assíncronas Certos acontecimentos devem ser tratados pelas aplicações, embora não seja possível prever a sua

Leia mais

Algoritmos e Estruturas de dados

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

Leia mais

Pthreads API. Criação de Threads: usando Pthreads

Pthreads API. Criação de Threads: usando Pthreads Pthreads API The POSIX 1003.1-2001 standard defines an application programming interface (API) for writing multithreaded applications. This interface is known more commonly as pthreads. 6.1 Criação de

Leia mais

Threads em Ambiente LINUX. Estudo e testes com a biblioteca pthreads

Threads em Ambiente LINUX. Estudo e testes com a biblioteca pthreads Universidade Federal do ABC Disciplina: BC 1518 Sistemas Operacionais (SO) Prática: Threads Atividade 3 Threads em Ambiente LINUX Objetivo Estudo e testes com a biblioteca pthreads Threads Como vimos em

Leia mais

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

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

Leia mais

Linguagem de Programação I

Linguagem de Programação I Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB [email protected] Exemplo: Explorar Templates e Exceções Incrementar com o uso de STL 2 Crie uma função verificarpalindromo()

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Programação Concorrente Sincronização entre processos Edson Moreno edsonmoreno@pucrsbr http://wwwinfpucrsbr/~emoreno Sumário Conceituação Princípios de concorrência Região crítica

Leia mais

Curso de Programação C em Ambientes Linux Aula 05

Curso de Programação C em Ambientes Linux Aula 05 Curso de Programação C em Ambientes Linux Aula 05 Centro de Engenharias da Mobilidade - UFSC Professores Gian Berkenbrock e Giovani Gracioli http://www.lisha.ufsc.br/c+language+course+resources Conteúdo

Leia mais

Listas ligadas/listas encadeadas

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

Leia mais

Trabalhando com Processos e Threads em Ambiente LINUX

Trabalhando com Processos e Threads em Ambiente LINUX Objetivo Universidade Federal do ABC Disciplina: BC 1518 Sistemas Operacionais (SO) Prática: Processo/Threads Atividade 3 Trabalhando com Processos e Threads em Ambiente LINUX 1.Trabalhar com comandos

Leia mais

Programação Sistemas

Programação Sistemas Programação Sistemas Fios de Execução Programação de Sistemas Threads : 1/28 Porquê o paralelismo? (1) 1. Crescentes necessidades de computação têm sido satisfeitas com aumento do número de transístores

Leia mais

Programação de Sistemas

Programação de Sistemas Programação de Sistemas Métodos de Exclusão Mútua Programação de Sistemas Exclusão Mútua : 1/73 Introdução Existem três classes de métodos para assegurar a exclusão mútua de unidades de execução Algoritmos

Leia mais

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios SISTEMAS OPERACIONAIS INF09344 - Sistemas Operacionais / INF02780 - Sistemas Operacionais / INF02828 - Sistemas de Programação II Prof a. Roberta Lima Gomes ([email protected]) 2ª. Lista de Exercícios Data

Leia mais

Deadlock, Starvation, Posix Semaphores

Deadlock, Starvation, Posix Semaphores SISTEMAS OERATIVOS 13 Deadlock, Starvation, osix Semaphores Notas: Linux man pages. É importante consultar as paginas sobre os comandos ( If you don't run Linux, be sure to check your local man pages or

Leia mais

Sincronização, Deadlock, Starvation Mutex Locks e Semaphores (Posix)

Sincronização, Deadlock, Starvation Mutex Locks e Semaphores (Posix) SISTEMAS OERATIVOS 13 Sincronização, Deadlock, Starvation Mutex Locks e Semaphores (osix) Notas: Linux man pages. É importante consultar as paginas sobre os comandos ( If you don't run Linux, be sure to

Leia mais

Programação com Posix Threads

Programação com Posix Threads 9 Programação com Posix Threads Revisão: Data: 11-03-2016 Cap. 9 1/6 Programação multi-threaded com Pthreads 9.1. O que é uma thread? Um processo represente a execução pelo sistema operativo dum programa.

Leia mais

Exclusão Mútua (mutex)

Exclusão Mútua (mutex) 2004-2017 Volnys Bernal 1 Exclusão Mútua (mutex) Volnys Borges Bernal [email protected] Departamento de Sistemas Eletrônicos Escola Politécnica da USP 2004-2017 Volnys Bernal 2 Tópicos Exclusão Mútua (Mutex)

Leia mais

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios

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

Leia mais

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02 Programação 1 Atribuição, operadores aritméticos, entrada de dados Técnico em Eletrônica Semestre 5 02 Armazenando na memória tipo de variável #include #include main() { int ano; Declaração

Leia mais

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal ALGORITMOS AULA 01 Baseado nas aulas do Prof. Jorgiano Vidal LINGUAGEM C Uma das grandes vantagens do C é que ele possui tanto caracterìsticas de "alto nìvel" quanto de "baixo nìvel". Linguagem de propósito

Leia mais

A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out).

A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out). Fila Algumas aplicações impõem regras de acesso às informações armazenados em estruturas de dados, restringindo como os dados são inseridos e removidos da estrutura. A fila, também conhecida como QUEUE,

Leia mais

1 Exercícios com ponteiros

1 Exercícios com ponteiros Computação para Informática Funções e Ponteiros1 EXERCÍCIOS COM PONTEIROS Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Funções e ponteiros O objetivo desta aula prática

Leia mais

Ponteiros e Tabelas. K&R: Capítulo 5

Ponteiros e Tabelas. K&R: Capítulo 5 Ponteiros e Tabelas K&R: Capítulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros

Leia mais

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

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

Leia mais

Memória compartilhada

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

Leia mais

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas Listas Ligadas (Encadeadas) Matrizes são estruturas de dados muito úteis fornecidas nas linguagens de programação. No entanto, elas têm pelo menos duas limitações: 1- Seu tamanho tem que ser conhecido

Leia mais

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo

Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo Introdução à Ciência da Computação I Alocação Dinâmica Prof. Claudio Fabiano Motta Toledo Sumário Funções para alocação de memória Ponteiros para ponteiros 8/12/16 2 Funções para alocação de memória malloc(),

Leia mais

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR) Alocação de Memória Linguagem de Programação Estruturada 1 Alocação dinâmica e ponteiros Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR) Sumario Introdução Alocação Estática

Leia mais

Sistemas Operativos: Concorrência (Parte 2)

Sistemas Operativos: Concorrência (Parte 2) Sistemas Operativos: Concorrência (Parte 2) Pedro F. Souto ([email protected]) 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

Introdução aos Sistemas Operacionais. Threads

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

Leia mais

Sincronização e Comunicação entre Processos. Sincronização e Comunicação Volnys Bernal 1. Agenda

Sincronização e Comunicação entre Processos. Sincronização e Comunicação Volnys Bernal 1. Agenda entre Processos 004-006 Volnys Bernal 004-006 Volnys Bernal Agenda entre Processos Volnys Borges Bernal [email protected] http://www.lsi.usp.br/~volnys Região Crítica Classificação dos mecanismos de sincronização

Leia mais

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

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

Leia mais

Aula 17: Ponteiros e Alocação Dinâmica em C

Aula 17: Ponteiros e Alocação Dinâmica em C Aula 17: Ponteiros e Alocação Dinâmica em C Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Ponteiros e Alocação Dinâmica Programação de Computadores

Leia mais

Grupo I [7 Val] 1. Considere os seguintes 3 algoritmos de escalonamento num sistema operativo de tempo virtual:

Grupo I [7 Val] 1. Considere os seguintes 3 algoritmos de escalonamento num sistema operativo de tempo virtual: Número: Nome: LEIC/LERC 2012/13-1º Teste de Sistemas Operativos 24 de Novembro de 2011 Responda no enunciado, apenas no espaço fornecido. Identifique todas as folhas. Justifique todas as respostas. Duração:

Leia mais

Programação Estruturada I

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:

Leia mais

TAD: Tipo Abstrato de Dados (parte 2)

TAD: Tipo Abstrato de Dados (parte 2) TAD: Tipo Abstrato de Dados (parte 2) SCC0502 Algoritmos e Estruturas de Dados I Programa em C pode ser dividido em vários arquivos Arquivos fonte com extensão.c Denominados de módulos Cada módulo deve

Leia mais