Programação de Sistemas



Documentos relacionados
Programação de Sistemas

Inter-process Communication (IPC)

Inter-process Communication (IPC)

Inter-process Communication (IPC)

Comunicação entre pai e filho

Comunicação entre Processos Canal de comunicação Arquitetura da comunicação Modelos de comunicação

6. Comunicação entre processos - Pipes

Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes

Programação de Sistemas. Tubos

Sistemas Operacionais II

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux

Comunicação entre Processos (1) Comunicação entre Processos (2) Comunicação entre Processos (3)

Tubos ou Pipes de Comunicação

Comunicação entre Processos

Inter-process Communication (IPC) Comunicação entre processos (1) Introdução Tubos (Pipes)

I/O de baixo-nível em ficheiros

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Comunicação entre Processos Named Pipes (FIFO)

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes:

Persistência de Dados

ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2005/ Valores

Programação de Sistemas

TROCA DE MENSAGENS SOCKETS. Comunicando processos através de SOCKETS. SOCKETS com conexão. SOCKETS sem conexão

Sistemas de Operação (2018/2019) Ficha 4

time_t shm_ctime; /* hora da última alteração de atributod da MP através de shmctl + IPC_SET */

LEIC/LERC 2012/13 2º Teste de Sistemas Operativos 15/Janeiro/2013

Sistemas Operacionais INF Prof. José Gonçalves

Sistema de Entrada/Saída

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

Grupo I [4v] executaprograma();

Programação 2009/2010 MEEC

INF 1005 Programação I

Computação e Programação Aula prática nº 5. Enunciados dos problemas

1 Ficheiros Métodos sobre ficheiros Ficheiros de texto vs. binários Procurar ocorrências de uma palavra...

UFSM Introdução ao Dev-C++ Profa. Patrícia Pitthan. Introdução ao Dev-C++

Sistemas Operacionais de Redes. Permissões

Grupo I [6 v] Considere o processo com a seguinte tabela de páginas: Página Presente Protecção Base 0 0 RW RW R R RW -


3 Introdução às chamadas ao sistema

sockets interprocess communication Taisy Weber

UFRJ IM - DCC. Sistemas Operacionais I. Unidade IV Sistema de arquivos. Prof. Valeria M. Bastos Prof. Antonio Carlos Gay Thomé 13/06/2012 1

Introdução a Computação

Tutorial para envio de comunicados e SMS

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Grupo I [4v] b. [0,6v] De que forma é que o escalonador do Linux tenta minimizar o impacto desta limitação?

DESCRIÇÃO DO TRABALHO - VERSÃO DE 29/04/ :00.

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada

Guia do usuário para utilização do sistema WCRC3 Central de Informações do Registro Civil da Arpen SP Gravação e envio dos registros

Sistemas Operativos 2005/2006. Arquitectura Cliente-Servidor Aplicada A Uma Biblioteca. Paulo Alexandre Fonseca Ferreira Pedro Daniel da Cunha Mendes

COLIBRI Ambiente Colaborativo Multimédia MÓDULO MOODLE. Rui Ribeiro FCCN - Dezembro 2010

José Romildo Malaquias

Estruturas de Dados com Jogos. Capítulo 3 Filas - Alocação Sequencial e Estática

Sistemas Operativos /2006. Trabalho Prático v1.0

Manipulação de Arquivos

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

LINGUAGEM C UMA INTRODUÇÃO

5 Apresentando a linguagem C

Unix: Sistema de Arquivos. Geraldo Braz Junior

Tipos de Servidores. Servidores com estado

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

1ª versão. #include <stdio.h> #include <string.h> #include <stdlib.h> #define maxdiscos 1000

RMS Software S.A. - Uma empresa TOTVS

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

CAPÍTULO 6 ARITMÉTICA DIGITAL

LICENTIA. Integração InvoiceXpress

Tipo de Dados em Linguagem C

Aula 02. Introdução ao Linux

Sistemas Operacionais. Laboratório 1 (Ambiente de Aprendizado)

ÍNDICE 1 INTRODUÇÃO ACESSO CONSULTA DE PROTOCOLO PROTOCOLO PENDENTE CONFIRMAÇÃO DE RECEBIMENTO ANDAMENTO DE PROTOCOLO.

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Ficheiros binários 1. Ficheiros binários

Guia de utilização. Gestão de Mensagens. Março 2009

INF 1005 Programação I

Unnamed Pipes. Chamada ao sistema pipe. Pipes. Comunicação entre processos. Unnamed Pipes Chamada so sistema. José Pedro Oliveira

Apresentação de SISTEMAS OPERATIVOS

SECUNDÁRIA DE CAMARATE Plataforma Office 365. Alojamento de ficheiros - OneDrive para Empresas

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Ferramentas de Modelação e Análise de Sistemas baseadas em Redes de Petri (RdP)

Sistemas de Informação. Sistemas Operacionais 4º Período

ARQUIVOS. Os arquivos criados em meios magnéticos poderão ser acessados para leitura e escrita na forma seqüencial, direta ou indexada.

BOLETIM INFORMATIVO TOTEM CF SISTEMAS

Prof.: Roberto Franciscatto. Capítulo 1.2 Aspectos Gerais

O Comando find em Unix (breve resumo)

Ciclo de Vida de um Processo

Exemplos. char c; int i=67;... c= A ; c=c+1; if (c== B )... c=i; i=c; i++; if (i>= C )...

INSTITUTO SUPERIOR DE CIÊNCIAS DO TRABALHO E DA EMPRESA. Filas de mensagem

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Lógica de Programação

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos,

Programação de Sistemas

Estrutura de um programa em linguagem C

Tipos de Dados Simples

BACKUP E RESTORE BACKUP (NO MOODLE DO ANO PASSADO)

MANUAL DE UTILIZAÇÃO DE SISTEMA HELP-DESK

Transcrição:

Programação de Sistemas FIFOs Programação de Sistemas FIFOs : 1/13

Introdução APUE 15.5 Os tubos só podem ser usados por processos que tenham um antecessor comum. Para resolver a limitação dos tubos, o Unix disponibiliza Filas (FIFO- First In First Out ), também designados por tubos nomeados ( named pipes ) que podem ser usados por processos não relacionados entre si, e são referenciandos por um identificador dentro do sistema de ficheiros. Programação de Sistemas FIFOs : 2/13

Criação/Eliminação (1) A. Criação de uma fila 1. Por chamada de sistema POSIX: #include <sys/stat.h> int mkfifo(char *,mode_t); 1º parâmetro é o nome do ficheiro. 2º parâmetro identifica as permissões de acesso, iguais a qualquer ficheiro, determinados por OU de grupos de bits. As permissões de acesso também podem ser indicados por 3 dígitos octais, cada dígito representando os valores binários de rwx (Read,Write,eXecute). Exemplo: modo 644 indica permissões de acesso: Dono: 6=110 (leitura e escrita) Grupo e Outros: 4=100 (leitura) Programação de Sistemas FIFOs : 3/13

Criação/Eliminação (2) 2. Por comando Shell mkfifo [-m modo] fichid A fila é mantida no sistema de ficheiros até ser eliminada. B. Eliminação de uma fila 1. Por chamada de sistema POSIX: #include <unistd.h> int unlink(char *); 1º parâmetro é o nome do ficheiro. 2. Por comando Shell rm fichid Programação de Sistemas FIFOs : 4/13

Criação/Eliminação (3) Exemplo: [rgc@asterix Comunicacao]$ mkfifo -m 644 tubo [rgc@asterix Comunicacao]$ ls -l tubo prw-r--r-- 1 rgc docentes 0 2010-09-26 13:49 tubo [rgc@asterix Comunicacao]$ rm tubo rm: remove fifo `tubo'? y [rgc@asterix Comunicacao]$ ls -l tubo ls: cannot access tubo: No such file or directory [rgc@asterix Comunicacao]$ Tipo de ficheiro é pipe Programação de Sistemas FIFOs : 5/13

Abertura (1) Antes de ser usada, a fila tem de ser aberta pela chamada de sistema POSIX: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(char *,int); 1º parâmetro é o nome do ficheiro. 2º parâmetro formado por bits que indicam: Modos de acesso: O_RDONLY (leitura apenas) ou O_RDONLY (escrita apenas) Opções de abertura: O_CREAT (criado se não existir), O_NONBLOCK (operação de E/S não são bloqueadas) O valor de retorno é o descritor da fila (positivo) ou erro (-1). Programação de Sistemas FIFOs : 6/13

Abertura (2) Regras aplicadas na abertura de ficheios: Se um processo tentar abrir uma fila em modo de leitura, e nesse instante não houver um processo que tenha aberto a fila em modo de acesso de escrita, o processo fica bloqueado com a excepção: se tiver sido indicada a opção O_NONBLOCK, o processo não fica bloqueado, sendo devolvido o valor -1 (errno fica com valor ENXIO). Se um processo tentar abrir uma fila em modo de escrita, e nesse instante não houver um processo que tenha aberto a fila em modo de acesso de leitura, o processo fica bloqueado com a excepção: se tiver sido indicada a opção O_NONBLOCK, o processo não fica bloqueado, sendo devolvido o valor -1 (errno fica com valor ENXIO). Programação de Sistemas FIFOs : 7/13

Leitura/escrita Comunicação feita pelas mesmas chamadas de sistema dos tubos: POSIX: #include <unistd.h> ssize_t read(int, char *,int); ssize_t write(int, char *,int); Regras aplicadas aos processos escritores: Escrita para uma fila que ainda não foi aberta para leitura gera o sinal SIGPIPE (acção por omissão de terminar o processo, se ignorado read retorna -1 com errno igual a EPIPE). Após o último processo escritor tiver encerrado a Fila, os processos leitores recebem EOF. Programação de Sistemas FIFOs : 8/13

Exemplo (1) [Exemplo] Dois processos writer enviam mensagens para o processo reader através de uma fila. O identificador da fila e o comprimento da memória tampão é definida no ficheiro à parte. defs.h #define LEN 100 #define FNAME "testfifo" Programação de Sistemas FIFOs : 9/13

Exemplo : writer.c (2) #include <stdio.h> #include <string.h> #include <sys/file.h> #include "defs.h" main() { int fd, i; char msg[len]; do { fd=open(fname,o_wronly); if (fd==-1) sleep(1); } while (fd==-1); for( i=1;i<=3;i++ ) { sprintf(msg,"hello no %d from process %d\n",i,getpid() ); write( fd,msg,strlen(msg)+1 ); sleep(3); } close(fd); } Programação de Sistemas FIFOs : 10/13

Exemplo : reader.c (3) #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/file.h> #include "defs.h" int readchar(int fd, char *buf) { int n; do n=read(fd,buf,1); while (n>0 && *buf++!='\0'); return n>0; } main() { int fd; char str[len]; mkfifo(fname,0660); fd=open(fname,o_rdonly); if (fd<0) { printf("erro na abertura da fila\n");exit(1); } while (readchar(fd,str)) printf("%s",str); close(fd); } Programação de Sistemas FIFOs : 11/13

Exemplo (4) [rgc@asterix FIFO]$ reader & writer & writer & [1] 7528 [2] 7529 [3] 7530 PIDs dos processos lançados [rgc@asterix FIFO]$ Hello no 1 from process 7530 Hello no 1 from process 7529 Hello no 2 from process 7530 Hello no 2 from process 7529 Hello no 3 from process 7530 Hello no 3 from process 7529 Lança 1 leitor e 2 escritores [1] Done reader [2]- Done writer [3]+ Done writer [rgc@asterix FIFO]$ Programação de Sistemas FIFOs : 12/13

Exemplo (5) A lista não foi eliminada pelos programas [rgc@asterix FIFO]$ ls -l total 48 -rw-r----- 1 rgc ec-ps -rwxr----- 1 rgc ec-ps -rw-r--r-- 1 rgc ec-ps prw-r----- 1 rgc docentes -rwxr----- 1 rgc ec-ps -rw-r--r-- 1 rgc ec-ps [rgc@asterix FIFO]$ rm testfifo rm: remove fifo 'testfifo'? y [rgc@asterix FIFO]$ 42 2007-05-17 15:17 defs.h 5420 2007-05-17 15:45 reader 442 2007-05-17 15:45 reader.c 0 2008-10-11 16:01 testfifo 5456 2007-05-17 15:23 writer 371 2007-05-17 15:23 writer.c Programação de Sistemas FIFOs : 13/13