comunicacao interprocessos

Download Comunicacao InterProcessos

Post on 15-Sep-2015

221 views

Category:

Documents

1 download

Embed Size (px)

DESCRIPTION

Comunicacao InterProcessos

TRANSCRIPT

  • Universidade Federal do Rio Grande do NorteCentro de Tecnologia

    Departamento de Engenharia EltricaLaboratrio de Engenharia de Computao e Automao

    Curso de Graduao"Programao em Tempo Real"

    Mdulo II - Comunicao InterProcessos

    AUTOR: Celso Alberto Saibel Santos

    Natal - Outubro de 2000

    http://www.dca.ufrn.br/~adelardo/cursos/DCA409/all.htmlPrefcio

    O material apresentado nesta apostila uma coletnea dos seguintes trabalhos:

    1. Vous avez dit: IPC sous UNIX System V de autoria de Olivier Bernard, Bernard Bolz, ThierryElsensohn, Laboratoire LGI$-$IMAG, cole Nationale Suprieure d Informatique et deMathematiques Appliques de Grenoble, 1992;

    2. An Introduction 4.4BSD Interprocess Communication Tutorial de autoria de Stuart Sechrest,Computer Science Research Group, Dep. of Electrical Enngineering and Computer Science,University of California, Berkeley, 1990

    3. An Advanced 4.4BSD Interprocess Communication Tutorial de autoria de S.J. Leffler et alli,Computer Science Research Group, Dep. of Electrical Enngineering and Computer Science,University of California, Berkeley, 1986

    1

  • 4. UNIX Network Programming, W.R.Stevens, Prentice Hall

    NDICE:

    1) Generalidades 1.1) Chamadas de Sistema x Rotinas de biblioteca 1.2) Gesto de erros 1.3) Funcionamento do comando man 1.4) Informaes relativas ao usurio 1.4.1) Login 1.4.2) Direitos de acesso em UNIX 1.4.3) Identificadores dos usurios 1.4.3.1) Obteno e modificao dos identificadores do usurio 1.4.3.1.1) Interesse do que foi apresentado: 1.4.4) Identificadores de grupo

    1.5) Entrada e Sada 1.5.1) Noo de tabela de ns de indexao 1.5.2) Tipos de arquivos 1.5.3) Descritores de arquivo e ponteiros para os arquivos 1.5.4) Descrio de algumas primitivas e funes 1.5.4.1) Primitivas open() e creat() 1.5.4.2) Funo fdopen() 1.5.4.3) Primitiva close() 1.5.4.4) Primitivas dup() - dup2() 1.5.4.5) Primitiva write() 1.5.4.6) Primitiva read() 1.5.4.7) Exemplo 1: Redirecionamento da sada padro 1.5.4.8) Exemplo 2: Cpia de um arquivo 1.6) Chaves de acesso: Funo ftok

    2) Processos em UNIX 2.1) Introduo 2.1.2) Processo: Uma definio 2.1.3) Identificadores de um processo 2.1.3.1) Exemplo: 2.2) As primitivas envolvendo processos 2.2.1) A primitiva fork() 2.2.1.1) Problema com os buffers de sada: 2.2.1.2) A primitiva wait() 2.2.2) Primitiva exit() 2.2.3) As Primitivas exec() 2.2.3.1) Comportamento em relao aos descritores abertos 2.2.4) Primitiva system()

    3) Os sinais 3.1) Os sinais gerados pelo sistema 3.1.1) Introduo 3.1.2) Tipos de sinal

    2

  • 3.1.3) Tratamento dos processos zumbis 3.1.4) Sinal SIGHUP: tratamento de aplicaes durveis 3.2) Tratamento dos sinais 3.2.1) Emisso de um sinal 3.2.1.1) Primitiva kill() 3.2.1.2) Utilizao do parmetro pid: 3.2.1.3) Primitiva alarm() 3.2.1.4) Exemplo 1: 3.2.1.5) Exemplo 2: 3.2.1.6) Exemplo usando sleep(): 3.2.2) Recepo de sinais: 3.2.2.1) Primitive signal() 3.2.2.2) Primitive pause() 3.3) Processos manipulando sinais: Exemplos 3.3.1) Herana de sinais com fork() 3.3.2) Comunicao entre processos 3.3.3) Controle da progresso de uma aplicao 3.4) Concluso 3.5) Lista de Sinais em LINUX * Parte II

    4) Os tubos ou pipes de comunicao 4.1) Introduo 4.2) Particularidades dos tubos 4.3) Criao de um tubo 4.3.1) A Primitiva pipe() 4.4) Segurana do sistema 4.5) Aplicaes das primitivas de entrada e sada 4.5.1) Exemplos globais 4.5.1.1) Implementao de um comando com tubos 4.5.1.2) Comunicao entre pais e filhos usando um tubo 4.5.2) Utilizao dos tubos 4.6) As FIFOS ou tubos com nome 4.6.1) Criao de um tubo com nome 4.6.2) Manipulao das FIFOs * Parte III

    5) Os Semforos 5.1) Introduo 5.1.1) Comandos de status usando IPC 5.2) Princpio 5.2.1) Estruturas associadas aos semforos 5.3) A Funo semget() 5.3.1) Como criar um conjunto de semforos 5.4) A Funo semctl() 5.5) A Funo semop() 5.5.1) Exemplo de operao sobre um semforo: 5.6) Semforos de Dijsktra 5.6.1) Implementao dos semforos de Dijkstra

    3

  • 5.6.1.1) Exemplo de utilizao dos semforos de Dijkstra 5.7) Concluso 6) Memria Compartilhada 6.1) Introduo 6.2) Princpio da memria compartilhada 6.3) A Funo shmget() 6.3.1) Estrutura associada a uma memria comum: shmid_ds 6.3.2) Como criar um segmento de memria compartilhada 6.4) A Funo shmctl() 6.5) Funo shmat() 6.6) Funo shmdt()

    7) As Filas de Mensagens 7.1) Introduo 7.2) Princpio 7.3) Estrutura associada s mensagens: msqid_ds 7.4) Funo msgget() 7.4.1) Como criar uma fila de mensagens 7.5) Funo msgctl() 7.6) Funo msgsnd() 7.7) Funo msgrcv() 8) Exemplos usando IPC 8.1) Exemplo1: Rendezvous de trs processos 8.2) Exemplo2: Cliente-servidor 8.2.1) Exemplo cliente-servidor com 1 fila 8.2.2) Exemplo cliente-servidor com 2 filas

    Anexo de Threads, fonte : http://www.lisha.ufsc.br/~fauze/univali/os/aulas/lab03.html

    About this document ...

    This document was generated using the LaTeX2HTML translator Version 99.2beta6 (1.42)

    Copyright 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University ofLeeds.Copyright 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University,Sydney.

    The command line arguments were:latex2html all.tex

    The translation was initiated by Celso Alberto Saibel Santos on 2000-11-14

    4

  • Parte I

    A parte I da apostila, envolvendo os captulos 1, 2, 3 e 4 apresenta algumas noes de base dosistema operacional UNIX. Estas noes so fundamentais para o entendimento da maior parte dosexemplos apresentados nos captulos seguintes da apostila.

    O captulo 1 trata de generalidades como as chamadas de sistema, os descritores de arquivos e asformas de identificao do usurio.

    O captulo 2 apresenta uma introduo utilizao de processos, assim como as primitivasprincipais para o gerencimento dos processos UNIX.

    1) Generalidades

    Subsections

    1.1) Chamadas de Sistema x Rotinas de biblioteca 1.2) Gesto de erros 1.3) Funcionamento do comando man 1.4) Informaes relativas ao usurio 1.4.1) Login 1.4.2) Direitos de acesso em UNIX 1.4.3) Identificadores dos usurios 1.4.3.1) Obteno e modificao dos identificadores do usurio 1.4.3.1.1) Interesse do que foi apresentado: 1.4.4) Identificadores de grupo 1.5) Entrada e Sada 1.5.1) Noo de tabela de ns de indexao 1.5.2) Tipos de arquivos 1.5.3) Descritores de arquivo e ponteiros para os arquivos 1.5.4) Descrio de algumas primitivas e funes 1.5.4.1) Primitivas open() e creat() 1.5.4.2) Funo fdopen() 1.5.4.3) Primitiva close() 1.5.4.4) Primitivas dup() - dup2() 1.5.4.5) Primitiva write() 1.5.4.6) Primitiva read() 1.5.4.7) Exemplo 1: Redirecionamento da sada padro 1.5.4.8) Exemplo 2: Cpia de um arquivo 1.6) Chaves de acesso: Funo ftok

    1.1) Chamadas de Sistema x Rotinas de biblioteca

    Como primeiro passo deste curso, fundamental fazer-se a distino entre uma chamada de sistema(ou primitiva) e uma rotina de biblioteca. Quando uma chamada de sistema feita, o usurio solicitaao sistema operacional (SO) que realize uma operao em seu nome. Por exemplo, read() uma

    5

  • chamada de sistema que solicita ao SO para encher um buffer com dados gravados sobre umperifrico. Uma rotina de biblioteca, por outro lado, no requer normalmente a utilizao do sistemapara realizar a operao desejada. o caso da funo sin() que calculada atravs de uma soma dostermos de uma srie finita, enquanto que a funo popen() um subprograma da biblioteca quepermite a abertura de um pipe especificando o comando a ser executado, utilizando para isso asprimitivas pipe(), fork(), open() e close(). As primitivas sero explicadas no manual UNIX 2, aopasso que as rotinas de biblioteca esto no manual nmero 3 (para buscar as informaes no manual2, por exemplo, dev-se digitar o comando shell man 2

    1.2) Gesto de erros

    Todas as funes descritas anteriormente possuem um valor de retorno definido. A maior parte dotempo, em caso de erro durante a execuo de uma primitiva, o valor de retorno igual a -1. Nestecaso, a varivel global errno ser atualizada e seu valor indicar um cdigo de erro preciso. Estecdigo de erro pode ser obtido atravs da funo perror(). necessrio neste caso que o arquivo seja includo do cabealho do programa para que errno e perror() possam ser