tutorial. man fork man pthread_create man pthread_join man wait man sleep
|
|
|
- Filipe Marques Aldeia
- 8 Há anos
- Visualizações:
Transcrição
1 Abaixo, você encontrá dicas para lhe ajudar a fazer o 1º trabalho de SOI, que está descrito na página do curso. Lembrando que essas dicas visam apenas o auxilio nas partes mais problemáticas do trabalho e não pretendem substituir outras fontes de consulta. Por isso, é extremamente recomendado que os grupos consultem as páginas do manual do linux (através do comando "Man") além de livros e sites relacionados ao assunto. Também é bom lembrar, que seu feedback será fundamental para a inserção de novas dicas ou o melhoramentos das existentes. Portanto, se você tiver alguma dúvida ou sugestão, basta entrar em contato comigo. Linux Para conhecer a descrição de comando do linux, seus parâmetros, valores de retorno e todas as informações necessárias para utilizar as funções que usaremos no trabalho, podemos usar o comando "man",que nos dá todas as informações de qualquer comando válido do linux. Para usá-lo, basta digitar man "nome do comando". Para o primeiro trabalho, recomendo a leitura das seguintes páginas do manual: man fork man pthread_create man pthread_join man wait man sleep Estes são os principais comandos e conhecê-los é o primeiro passo para desenvolver seu trabalho. Para os que programam em C no windows e não tem experiência em ambiente linux, é bom lembrar que biblioteca conio.h não faz parte das bibliotecas padrão do C ANSI e por isso não estão presentes no linux. Portanto, as funções cprintf(), clrscr() e todos as outras desta biblioteca não estão disponíveis. Para limpar a tela em seus programas, você pode usar o comando "system("clear");" e, para usar cores, você deverá usar as sequências de escape. Como se trata de algo "extra" que não influencia no funcionamento do programa, irei colocar apenas um link para um bom tutorial sobre o assunto: tutorial. Para ter acesso a uma lista com comandos básicos do linux, basta clicar aqui. Fork
2 Mesmo sendo um comando extremamente simples, o fork pode ser perigoso, já que com um pequeno descuido o seu programa pode criar mais processos do que deveria e causar problemas. Para evitar isso, fique atento ao retorno da função fork e só execute outro fork se tiver certeza que função está sendo invocada no processo pai. Para viabilizar este controle, a função fork() retorna 3 tipos de valores distintos que devem ser testados em seu programa, os valores são: 0 para o processo filho recém-criado, PID do filho para o processo pai (inteiro e maior que zero ) e -1 em caso de erro. Com isso, basta apenas um teste condicional para você ter certeza sobre qual processo está sendo executado, como é mostrado abaixo: retorno= fork(); if(retorno ==0) printf("este é o processo filho"); else if(retorno>0) printf("este é o processo pai") ; else printf("ocorreu um erro"); Threads Ao contrário do fork(), os threads oferecem um meio mais seguro para sua invocação, já que o método que será executado no thread é um dos argumentos passados para função o cria. Esta função se chama pthread_create e faz parte da biblioteca "pthread.h", que como foi dito anteriormente, ela está descrita no manual do linux. Ao manusear esta função, é importante notar que os parametros devem ser passados por referência e que deve der feito um cast através da expressão: (void *). Como no exemplo abaixo: pthread_create(&tid_1, NULL, (void*) &thread_main, (void *)argumento); Neste trecho, tid_1 é uma variável do tipo "pthread_t", "thread_main" é a função que será executada pela thread e "argumento" é o argumento que será passado para a função, mesmo ele sendo um inteiro ou qualquer outro tipo válido, o cast deve ser sempre feito.
3 Além disso, para evitar erros de compilação, quando compilar o arquivo com as threads, use o argumento "-lpthread" no momento da compilação, como mostrado abaixo: gcc -o trabalho.e principal.c -lpthread Memória Compartilhada Criação Para criar o segmento de memória compartilhada, usaremos a chamada shmget que tem a seguinte sintaxe: int shmget(key_t key, int size, int shmflg); Onde Key é um identificador que será usado para gerar o shmid (shared memory id) que é um handler que será o identificador deste segmento no SO. Size é o tamanho do segmento que será compartilhado e shmflg um conjunto de parametros que, de acordo com a utilização, fará com que se crie um novo segmento de memória associado a key ou tentará obter o handler de um segmento criado anteriormente. Ex.: memo_comp = shmget (chave_memo, sizeof (T_SHM), (0666 IPC_CREAT IPC_EXCL)) Na linha de códico acima, memo_comp será uma inteiro que receberá o handler para manipular o segmento de memoria associado a chave chave_memo. Logo depois, devemos especificar o tamanho do segmento de memória que será compartilhado. Em nosso exemplo será o tamanho da estrutura(struct) T_SHM que é um struct contendo as variáveis 1 e 2. Como podemos ver, temos 3 parametros em shmflg: IPC_CREAT - Especifica que deve se criar um novo segmento de memória. IPC_EXCL - Usado para garantir que a função irá falhar caso o segmento já esteja alocado indica as permisões do segmento de memória criado. Neste exemplo, todos tem premisão de leitura e escrita no segmento criado. Existe um problema, pois não podemos ter 2 segmentos de memória associados a uma mesma chave e por isso devemos tomar cuidados para não utilizar valores óbvios como 123 ou deixar a variável sem ser inicializada. Para resolver este
4 problema, existe uma função chamada ftok, cuja sintaxe é: key_t ftok ( char *pathname, char proj ) O primeiro parametro é nome de um arquivo que deve estar presente no disco e o segundo um caracter que identifica o projeto onde será usado o segmento. Ex: chave_memo_comp=ftok("/home/rodrigos/makefile",'a'); if(chave_memo_comp==-1) perror("ftok"); memo_comp = shmget(chave_memo_comp, sizeof(buffer), (0666 IPC_CREAT IPC_EXCL)); Associando o segmento a um ponteiro Após a criação do segmento de memória, devemos anexar o segmento a um ponteiro para viabilizar o acesso a esta variável como se fosse uma variável local. Para isso, temos a primitiva shmat (shared memory attach) que associa um ponteiro a um segmento de memória compartilhada. A sintaxe desta chamada é: void *shmat(int shmid, const void *shmaddr, int shmflg); A função anexa o ponteiro ao segemento de memória ( incrementando shm_nattach que é um dos flags internos do segmento ) e retorna um ponteiro para o início do segmento anexado. Exemplo: shmem = shmat (memo_comp, NULL, 0666); Onde shmem é um ponteiro para uma estrutura que será a memória compartilhada. Para acessar a memória compartilhada através do ponteiro shmem, usaremos a mesma sintaxe de acesso a um struct para uma estrutura local, por exemplo: hmem->buffer[1]; No trecho acima estamos acessando a posição 1 do buffer definido na memória compartilhada. Makefile Muito usado em ambientes Unix, o makefile é uma poderosa ferramenta para a criação de grandes projetos de programação. Através de um arquivo de texto, é possível determinar um "roteiro" de compilação e link edição de vários arquivos, facilitando muito o processo de desenvolvimento e
5 debug de grandes projetos. Em termos de implementação, o makefile é bem simples para compilar poucos arquivos ( o caso do nosso trabalho ) e existe muita documentação em português sobre o assunto na internet. Lembrando que deve se tomar cuidado com espaços e tabs, ele costuma ser muito rigoroso neste aspecto e qualquer pequeno detalhe ira gerar erros.
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
Comunicação entre Processos Memória Compartilhada
Comunicação entre Processos Memória Compartilhada 8/30/18 1 Métodos de comunicação entre processos Memória compartilhada Sinais Pipes Troca de mensagens Memória Compartilhada Memória compartilhada Permite
Exercícios Avaliativos Memória Compartilhada
1ª Avaliação Faculdades Integradas de Caratinga Sistemas Distribuídos Jacson RC Silva Exercícios Avaliativos Memória Compartilhada Uma posição de memória compartilhada é identificada por uma chave. Essa
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
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
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
Memória partilhada em Unix SysV
Memória partilhada em Unix SysV A forma mais geral de comunicação entre processos é através de memória partilhada. segmento de memoria partilhada Processo A Processo B p q Criação de um segmento de memória
Linguagem C Princípios Básicos (parte 1)
Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos
Linguagem C: diretivas, compilação separada. Prof. Críston Algoritmos e Programação
Linguagem C: diretivas, compilação separada Prof. Críston Algoritmos e Programação Diretivas do pré processador Permite que o programador modifique a compilação O pré processador é um programa que examina
Anhanguera Educacional S.A. Centro Universitário Ibero-Americano
O C++ foi inicialmente desenvolvido por Bjarne Stroustrup durante a década de 1980 com o objetivo de melhorar a linguagem de programação C, mantendo a compatibilidade com esta linguagem. Exemplos de Aplicações
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
Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação
Estrutura de Dados Básica
Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 5: Registros O objetivo desta aula é apresentar os tipos de dados definidos pelo programador, bem como exibir usos comuns desses tipos de
Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO
Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem
LINGUAGEM C: ARRAYS DE CARACTERES: STRINGS
LINGUAGEM C: ARRAYS DE CARACTERES: STRINGS Prof. André Backes DEFINIÇÃO String Sequência de caracteres adjacentes na memória. Essa sequência de caracteres, que pode ser uma palavra ou frase Em outras palavras,
#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C
#include Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C ANTES DO C ERA A LINGUAGEM B B foi essencialmente uma simplificação da linguagem BCPL. B só tinha um tipo de dado, que
Linguagem e Técnicas de Programação
Linguagem C Função Prof. Edwar Saliba Júnior Fevereiro de 2011 Unidade 07 Função 1 Conceitos As técnicas de programação dizem que, sempre que possível, evite códigos extensos, separando o mesmo em funções,
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()
Linguagem de Programação III
Linguagem de Programação III Aula-4 Construtores e Sobrecarga Prof. Esbel Tomás Valero Orellana Até Aqui Modelos e POO Classes e sua implementação em Java Encapsulamento Tipos de dados nativos em Java
Laboratório de Programação II
Laboratório de Programação II Aula 02 Prof. Diemesleno Souza Carvalho [email protected] http://www.diemesleno.com.br Na aula passada vimos... Na aula passada vimos... 01 Introdução à linguagem C;
Algoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes [email protected] 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Guia Rápido: GCC, Makefile e Valgrind.
Guia Rápido: GCC, Makefile e Valgrind. Alexandro Ramos 10 de setembro de 2015 1 Sumário 1 Introdução 3 2 GCC 3 2.1 Outros parâmetros úteis no GCC....................... 4 3 Makefiles 6 3.1 Makefile 1....................................
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.
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
Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.
1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras
Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica
Introdução a Programação Ponteiros e Vetores, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos que existe uma forte relação entre ponteiros e vetores Associação entre ponteiros e vetores Ponteiros constantes
Modulo 12: alocação dinâmica de memória
PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 12: alocação dinâmica de memória Aura - Erick [email protected], [email protected] Roteiro porque e como utilizar a alocação dinâmica funções: malloc (
INF 1007 Programação II Semestre 09.2
INF 1007 Programação II Semestre 09.2 Trabalho 1: Logodesafio O Logodesafio é um passatempo que exercita o conhecimento léxico dos participantes, consistindo em formar palavras a partir de um conjunto
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
Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta
Algoritmos e Estruturas de Dados Prof. Marcelo Zorzan Profa. Melissa Zanatta Assuntos da Aula Alocação de Memória Alocação estática de memória Alocação dinâmica de memória Malloc, Calloc, Free, Realloc
Disciplina de Algoritmos e Programação
Disciplina de Algoritmos e Programação Aula Passada 1º Programa: olamundo.c #include // biblioteca padrão de E/S /* Programa Olá Mundo */ int main(void) { printf( Olá mundo\n ); //exibe Olá mundo
Introdução à Linguagem C
Engenharia de CONTROLE e AUTOMAÇÃO Introdução à Linguagem C Aula 02 DPEE 1038 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria [email protected]
Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória
Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];
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
Variáveis primitivas e Controle de fluxo
Variáveis primitivas e Controle de fluxo Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/
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)
LINGUAGEM C: ALOCAÇÃO DINÂMICA
LINGUAGEM C: ALOCAÇÃO DINÂMICA Prof. André Backes DEFINIÇÃO Sempre que escrevemos um programa, é preciso reservar espaço para as informações que serão processadas. Para isso utilizamos as variáveis Uma
Lista Encadeada (Linked List)
Lista Encadeada (Linked List) As listas ou listas encadeadas são a estrutura de dados mais simples concebível excetuando-se naturalmente os arrays. Listas encadeadas nada mais são que uma seqüência de
3.1 - Funções para manipular dados de entrada e saída padrão
1616161616161616161616161616161616161616161616161616 3- ENTRADA E SAÍDA EM C Os principais meios para executar operações de entrada e saída (E/S) são: Entrada e saída pelo console (ou padrão): teclado
Linguagem de Programação II Implementação
Linguagem de Programação II Implementação Prof. Alessandro Borges 2 Tópicos Implementação em Java Variáveis Palavras reservadas Pacotes Identificador this Acessando membros de outros objetos API Java Nossa
INF 1620 Estruturas de Dados Semestre Segundo Trabalho: Jogo de Caça-Palavras
INF 1620 Estruturas de Dados Semestre 08.2 Segundo Trabalho: Jogo de Caça-Palavras O jogo de caça-palavras é um passatempo que consiste em descobrir palavras escondidas entre um conjunto de letras espalhadas
Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes
Fundamentos de Programação Linguagem C++ aula II - Variáveis e constantes Prof.: Bruno Gomes 1 Variáveis Representa uma porção da memória que pode ser utilizada pelo programa para armazenar informações
1 Exercícios com ponteiros
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Oitava Aula Prática - 29 de outubro de 2010 O objetivo desta aula prática é exercitar ponteiros e funções. 1 Exercícios com ponteiros
Trabalho 10: Simulação de Roteador IPv6
Trabalho 10: Simulação de Roteador IPv6 Redes de Computadores 1 Descrição Este trabalho pode ser feito por até três acadêmicos. Neste trabalho vocês implementarão dois programas, de forma similar ao trabalho
Programação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Segundo trabalho prático de implementação Sistema de reserva de assentos
Segundo trabalho prático de implementação Sistema de reserva de assentos 1. Descrição do problema Computação Concorrente (MAB-117) 2016/2 Prof. Silvana Rossetto 1 DCC/IM/UFRJ 17 de novembro de 2016 Um
Shell Script. Rafael Silva Guimarães
Shell Script Rafael Silva Guimarães O que é Shell O Shell é o "prompt" da linha de comando do Linux, que recebe os comandos digitados pelo usuário e os executa. Mas o Shell é muito mais poderoso que seu
Processos. Programas e Processos. Aula 1 - Chamadas ao sistema. José Pedro Oliveira fork exit getpid, getppid wait, waitpid
Conteúdo Programas e Aula 1-1 Programas e ([email protected]) Grupo de Sistemas Distribuídos Departamento de Informática Escola de Engenharia Universidade do Minho Sistemas Operativos I 006-007 3 Referências
Revisão de Programação em C++ Leandro Tonietto Estruturas de Dados em C++ Segurança da Informação
Revisão de Programação em C++ Estruturas de Dados em C++ Segurança da Informação [email protected] http://www.inf.unisinos.br/~ltonietto mar-09 Sumário Revisão de conceitos básicos de programação Diretiva
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
#include <stdio.h> main() { int i; // Cabeçalho for (i = 1; i <=20; i++) putchar( * ); putchar( \n ); puts( Numeros entre 1 e 5 );
O todo é igual à soma das partes. Euclides. FUNÇÕES E PROCEDIMENTOS Embora sem saber, ao longo dos outros laboratórios, já foram utilizadas funções tais como printf, scanf, getchar, putchar, dentre outras
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
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
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
# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira
# Estrutura de Dados # Aula - Revisão de C/C++ na Prática Prof. Leinylson Fontinele Pereira Na aula anterior... Ponteiros Funções Introdução 3 O que vamos aprender? Preparação do ambiente de testes Conceitos
3. Linguagem de Programação C
Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3. Linguagem de programação C 3.1. Conceitos
Programação I A Linguagem C. Prof. Carlos Alberto
Programação I A Linguagem C Prof. Carlos Alberto [email protected] [email protected] 2 Origem A linguagem C foi desenvolvida em 1972, nos Laboratórios Bell, por Dennis Ritchie. Implementada
Fundamentos de Sistemas Operacionais
Fundamentos de Sistemas Operacionais Aula 4: Programação Concorrente Diego Passos Últimas Aulas Processos Compostos por: Código (programa). Estado (memória, registradores). Em um sistema com multiprogramação:
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)
LABORATÓRIO SISTEMAS OPERACIONAIS
FACULDADE: CENTRO UNIVERSITÁRIO DE BRASÍLIA UniCEUB CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: SISTEMAS OPERACIONAIS CARGA HORÁRIA: 75 H. A. ANO/SEMESTRE: 2016/02 PROFESSOR: EDUARDO FERREIRA DOS SANTOS HORÁRIOS:
