Programação de Sistemas
|
|
|
- Gabriel Graça Festas
- 8 Há anos
- Visualizações:
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 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
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
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
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
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
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
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
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
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
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()
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
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
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
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
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
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
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
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
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
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.
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)
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
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
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
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,
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
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
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
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
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
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(),
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
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
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
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
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
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
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:
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:
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
