Arquitetura S.O 3

Você também pode gostar

Você está na página 1de 17

Sistemas Operacionais III - Comunicao entre Tarefas

Prof. Carlos Alberto Maziero PPGIA CCET PUCPR http://www.ppgia.pucpr.br/maziero 30 de julho de 2008

Resumo Muitas implementaes de sistemas complexos so estruturadas como vrias tarefas inter-dependentes, que cooperam entre si para atingir os objetivos da aplicao, como por exemplo em um navegador Web. Para que as vrias tarefas que compem uma aplicao possam cooperar, elas precisam comunicar informaes umas s outras e coordenar suas atividades, para garantir que os resultados obtidos sejam coerentes. Este mdulo apresenta os principais conceitos, problemas e solues referentes comunicao entre tarefas.

Copyright (c) 2006 Carlos Alberto Maziero. garantida a permisso para copiar, distribuir e/ou modicar este documento sob os termos da Licena de Documentao Livre GNU (GNU Free Documentation License), Verso 1.2 ou qualquer verso posterior publicada pela Free Software Foundation. A licena est disponvel em http://www.gnu.org/licenses/gfdl.txt. Este texto foi produzido usando exclusivamente software livre: Sistema Operacional Linux (distriA buies Fedora e Ubuntu), compilador de texto L TEX 2 , gerenciador de referncias BibTeX, editor grco Inkscape, criador de grcos GNUPlot e processador PS/PDF GhostScript, entre outros.

c Prof. Carlos Maziero

SUMRIO 2

Sumrio
1 2 3 Objetivos Escopo da comunicao Formas de comunicao 3.1 Comunicao direta ou indireta 3.2 Sincronismo . . . . . . . . . . . 3.3 Formato de envio . . . . . . . . 3.4 Capacidade dos canais . . . . . 3.5 Nmero de participantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 5 5 6 8 9 10 11 13 14

Exemplos de mecanismos de comunicao 4.1 UNIX Message queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Memria compartilhada . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

c Prof. Carlos Maziero

Objetivos 3

1 Objetivos
Nem sempre um programa seqencial a melhor soluo para um determinado problema. Muitas vezes, as implementaes so estruturadas na forma de vrias tarefas inter-dependentes que cooperam entre si para atingir os objetivos da aplicao, como por exemplo em um navegador Web. Existem vrias razes para justicar a construo de sistemas baseados em tarefas cooperantes, entre as quais podem ser citadas: Atender vrios usurios simultneos : um servidor de banco de dados ou de e-mail completamente seqencial atenderia um nico cliente por vez, gerando atrasos intolerveis para os demais clientes. Por isso, servidores de rede so implementados com vrios processos ou threads, para atender simultaneamente todos os usurios conectados. Uso de computadores multi-processador : um programa seqencial executa um nico uxo de instrues por vez, no importando o nmero de processadores presentes no hardware. Para aumentar a velocidade de execuo de uma aplicao, esta deve ser quebrada em vrias tarefas cooperantes, que podero ser escalonadas simultaneamente nos processadores disponveis. Modularidade : um sistema muito grande e complexo pode ser melhor organizado dividindo suas atribuies em mdulos sob a responsabilidade de tarefas interdependentes. Cada mdulo tem suas prprias responsabilidades e coopera com os demais mdulos quando necessrio. Sistemas de interface grca, como os projetos Gnome [Gnome, 2005] e KDE [KDE, 2005], so geralmente construdos dessa forma. Construo de aplicaes interativas : navegadores Web, editores de texto e jogos so exemplos de aplicaes com alta interatividade; nelas, tarefas associadas interface reagem a comandos do usurio, enquanto outras tarefas comunicam atravs da rede, fazem a reviso ortogrca do texto, renderizam imagens na janela, etc. Construir esse tipo de aplicao de forma totalmente seqencial seria simplesmente invivel. Para que as tarefas presentes em um sistema possam cooperar, elas precisam comunicar, compartilhando as informaes necessrias execuo de cada tarefa, e coordenar suas atividades, para que os resultados obtidos sejam consistentes (sem erros). Este mdulo visa estudar os principais conceitos, problemas e solues empregados para permitir a comunicao entre tarefas executando em um sistema.

2 Escopo da comunicao
Tarefas cooperantes precisam trocar informaes entre si. Por exemplo, a tarefa que gerencia os botes e menus de um navegador Web precisa informar rapidamente

c Prof. Carlos Maziero

Formas de comunicao 4

as demais tarefas caso o usurio clique nos botes stop ou reload. Outra situao de comunicao freqente ocorre quando o usurio seleciona um texto em uma pgina da Internet e o arrasta para um editor de textos. Em ambos os casos ocorre a transferncia de informao entre duas tarefas distintas. Implementar a comunicao entre tarefas pode ser simples ou complexo, dependendo da situao. Se as tarefas esto no mesmo processo, elas compartilham a mesma rea de memria e a comunicao pode ento ser implementada facilmente, usando variveis globais comuns. Entretanto, caso as tarefas pertenam a processos distintos, no existem variveis compartilhadas; neste caso, a comunicao tem de ser feita por intermdio do ncleo do sistema operacional, usando chamadas de sistema. Caso as tarefas estejam em computadores distintos, o ncleo deve implementar mecanismos de comunicao especcos, fazendo uso do suporte de rede disponvel. A gura 1 ilustra essas trs situaes.

Figura 1: Comunicao intra-processo (ti t j ), inter-processos (t j tk ) e inter-sistemas (tk tl ).

3 Formas de comunicao
A implementao da comunicao entre tarefas pode ocorrer de vrias formas. Ao denir os mecanismos de comunicao oferecidos por um sistema operacional, seus projetistas devem considerar muitos aspectos, como o formato dos dados a transferir, o sincronismo exigido nas comunicaes, a necessidade de buers e o nmero de emissores/receptores envolvidos em cada ao de comunicao. Um termo muito empregado para designar genericamente os mecanismos de comunicao IPC - Inter-Process Communication.

c Prof. Carlos Maziero

Comunicao direta ou indireta 5

3.1 Comunicao direta ou indireta


De forma mais abstrata, a comunicao entre tarefas pode ser implementada por duas primitivas bsicas: enviar (dados, destino), que envia os dados relacionados ao destino indicado, e receber (dados, origem), que recebe os dados previamente enviados pela origem indicada. Essa abordagem, na qual o emissor identica claramente o receptor e viceversa, denominada comunicao direta. Poucos sistemas empregam a comunicao direta; na prtica so utilizados mecanismos de comunicao indireta, por serem mais exveis. Na comunicao indireta, emissor e receptor no precisam se conhecer, pois no interagem diretamente entre si. Eles se relacionam atravs de um canal de comunicao, que criado pelo sistema operacional, geralmente a pedido de uma das partes. Assim, as primitivas de comunicao no designam diretamente tarefas, mas canais de comunicao aos quais as tarefas esto associadas: enviar (dados, canal) e receber (dados, canal).

3.2 Sincronismo
Em relao aos aspectos de sincronismo do canal de comunicao, a comunicao entre tarefas pode ser: Sncrona : quando as operaes de envio e recepo de dados bloqueiam (suspendem) as tarefas envolvidas at a concluso da comunicao: o emissor ser bloqueado at que a informao seja recebida pelo receptor, e vice-versa. A gura 2 apresenta os diagramas de tempo de duas situaes freqentes em sistemas com comunicao sncrona.

Figura 2: Comunicao sncrona. Assncrona : em um sistema com comunicao assncrona, as primitivas de envio e recepo no so bloqueantes: caso a comunicao no seja possvel no momento

c Prof. Carlos Maziero

Formato de envio 6

em que cada operao invocada, esta retorna imediatamente com uma indicao de erro. Deve-se observar que, caso o emissor e o receptor operem ambos de forma assncrona, torna-se necessrio criar um buer para armazenar os dados da comunicao entre eles. Sem esse buer, a comunicao se tornar invivel, pois raramente ambos estaro prontos para comunicar ao mesmo tempo. Esta forma de comunicao esta representada no diagrama de tempo da gura 3.

Figura 3: Comunicao assncrona. Semi-sncrona : primitivas de comunicao semi-sncronas tm um comportamento sncrono (bloqueante) durante um prazo pr-denido. Caso o prazo se esgote sem que a comunicao tenha ocorrido, a primitiva retorna com uma indicao de erro. Para reetir esse comportamento, as primitivas de comunicao recebem um parmetro adicional : enviar (dados, destino, prazo) e receber (dados, origem, prazo). A gura 4 ilustra duas situaes em que ocorre esse comportamento.

3.3 Formato de envio


A informao enviada pelo emissor ao receptor pode ser vista basicamente de duas formas: como uma seqncia de mensagens independentes, cada uma com seu prprio contedo, ou como um uxo seqencial e contnuo de dados, imitando o comportamento de um arquivo com acesso seqencial. Na abordagem baseada em mensagens, cada mensagem consiste de um pacote de dados que pode ser tipado ou no. Esse pacote recebido ou descartado pelo receptor em sua ntegra; no existe a possibilidade de receber meia mensagem (gura 5). Exemplos de sistema de comunicao orientados a mensagens incluem as message queues do UNIX e os protocolos de rede IP e UDP, apresentados na seo 4. Caso a comunicao seja denida como um uxo contnuo de dados, o canal de comunicao visto como o equivalente a um arquivo: o emissor escreve dados nesse

c Prof. Carlos Maziero

Formato de envio 7

Figura 4: Comunicao semi-sncrona.

Figura 5: Comunicao baseada em mensagens. canal, que sero lidos pelo receptor respeitando a ordem de envio dos dados. No h separao lgica entre os dados enviados em operaes separadas: eles podem ser lidos byte a byte ou em grandes blocos a cada operao de recepo, a critrio do receptor. A gura 6 apresenta o comportamento dessa forma de comunicao. Exemplos de sistemas de comunicao orientados a uxo de dados incluem os pipes do UNIX e o protocolo de rede TCP/IP (este ltimo normalmente classicado como orientado a conexo, com o mesmo signicado). Nestes dois exemplos a analogia com o conceito de arquivos to forte que os canais de comunicao so identicados por descritores de arquivos e as chamadas de sistema read e write (normalmente usadas com arquivos) so usadas para enviar e receber os dados. Esses exemplos so apresentados em detalhe na seo 4.

c Prof. Carlos Maziero

Capacidade dos canais 8

Figura 6: Comunicao baseada em uxo de dados.

3.4 Capacidade dos canais


O comportamento sncrono ou assncrono de um canal de comunicao pode ser afetado pela presena de buers que permitam armazenar temporariamente os dados em trnsito, ou seja, as informaes enviadas pelo emissor e que ainda no foram recebidas pelo receptor. Em relao capacidade de buering do canal de comunicao, trs situaes devem ser analisadas: Capacidade nula (n = 0) : neste caso, o canal no pode armazenar dados; a comunicao feita por transferncia direta dos dados do emissor para o receptor, sem cpias intermedirias. Caso a comunicao seja sncrona, o emissor permanece bloqueado at que o destinatrio receba os dados, e vice-versa. Essa situao especca (comunicao sncrona com canais de capacidade nula) implica em uma forte sincronizao entre as partes, sendo por isso denominada Rendez-Vous (termo francs para encontro). A gura 2 ilustra dois casos de Rendez-Vous. Por outro lado, a comunicao assncrona torna-se invivel usando canais de capacidade nula (conforme discutido na seo 3.2). Capacidade innita (n = ) : o emissor sempre pode enviar dados, que sero armazenados no buer do canal enquanto o receptor no os consumir. Obviamente essa situao no existe na prtica, pois todos os sistemas de computao tm capacidade de memria e de armazenamento nitas. No entanto, essa simplicao til no estudo dos algoritmos de comunicao e sincronizao, pois torna menos complexas a modelagem e anlise dos mesmos. Capacidade nita (0 < n < ) : neste caso, uma quantidade nita (n) de dados pode ser enviada pelo emissor sem que o receptor os consuma. Todavia, ao tentar enviar dados em um canal j saturado, o emissor poder car bloqueado at surgir

c Prof. Carlos Maziero

Nmero de participantes 9

espao no buer do canal e conseguir enviar (comportamento sncrono) ou receber um retorno indicando o erro (comportamento assncrono). A maioria dos sistemas reais opera com canais de capacidade nita. Para exemplicar esse conceito, a gura 7 apresenta o comportamento de duas tarefas trocando dados atravs de um canal de comunicao com capacidade para duas mensagens e comportamento sncrono (bloqueante).

Figura 7: Comunicao sncrona usando um canal com capacidade 2.

3.5 Nmero de participantes


Nas situaes de comunicao apresentadas at agora, cada canal de comunicao envolve apenas um emissor e um receptor. No entanto, existem situaes em que uma tarefa necessita comunicar com vrias outras, como por exemplo em sistemas de chat ou mensagens instantneas (IM Instant Messaging). Dessa forma, os mecanismos de comunicao tambm podem ser classicados de acordo com o nmero de tarefas participantes: 1:1 : quando exatamente um emissor e um receptor interagem atravs do canal de comunicao; a situao mais freqente, implementada por exemplo nos pipes e no protocolo TCP. M:N : quando um ou mais emissores enviam mensagens para um ou mais receptores. Duas situaes distintas podem se apresentar neste caso: Cada mensagem recebida por apenas um receptor (em geral aquele que pedir primeiro); neste caso a comunicao continua sendo ponto-a-ponto,

c Prof. Carlos Maziero

Exemplos de mecanismos de comunicao 10

atravs de um canal compartilhado. Essa abordagem conhecida como mailbox (gura 8), sendo implementada nas message queues UNIX e nos sockets do protocolo UDP. Na prtica, o mailbox funciona como um buer de dados, no qual os emissores depositam mensagens e os receptores as consomem. Cada mensagem recebida por todos os receptores (cada receptor recebe uma cpia da mensagem). Essa abordagem conhecida pelos nomes de difuso (multicast) ou canal de eventos (gura 9), sendo implementada por exemplo no protocolo UDP.

Figura 8: Comunicao M:N atravs de um mailbox.

Figura 9: Difuso atravs de um canal de eventos.

4 Exemplos de mecanismos de comunicao


Nesta seo sero apresentados alguns mecanismos de comunicao usados com freqncia em sistemas UNIX. Mais detalhes sobre estes e outros mecanismos podem ser obtidos em [Stevens, 1998, Robbins and Robbins, 2003]. Mecanismos de comunicao implementados nos sistemas Windows so apresentados em [Petzold, 1998, Hart, 2004].

c Prof. Carlos Maziero

UNIX Message queues 11

4.1 UNIX Message queues


As las de mensagens foram denidas inicialmente na implementao UNIX System V, sendo atualmente suportadas pela maioria dos sistemas. Alm do padro System V, o padro Posix tambm dene uma interface para manipulao de las de mensagens. Esse mecanismo um bom exemplo de implementao do conceito de mailbox, permitindo o envio e recepo ordenada de mensagens tipadas entre processos locais. As operaes de envio e recepo podem ser sncronas ou assncronas, a critrio do programador. As principais chamadas para uso de las de mensagens POSIX so: mq_open: abre uma la j existente ou cria uma nova la; mq_setattr e mq_getattr: permitem ajustar ou obter atributos da la, que denem seu comportamento, como o tamanho mximo da la, o tamanho de cada mensagem, etc; mq_send: envia uma mensagem para a la; caso a la esteja cheia, o emissor ca bloqueado at que alguma mensagem seja retirada da la, abrindo espao para o envio; a variante mq_timedsend permite denir um prazo mximo de espera: caso o envio no ocorra nesse prazo, a chamada retorna com erro; mq_receive: recebe uma mensagem da la; caso a la esteja vazia, o receptor bloqueado at que surja uma mensagem para ser recebida; a variante mq_timedreceive permite denir um prazo mximo de espera; mq_close: fecha o descritor da la criado por mq_open; mq_unlink: remove a la do sistema, destruindo seu contedo. A listagem a seguir implementa um consumidor de mensagens, ou seja, um programa que cria uma la para receber mensagens. O cdigo apresentado segue o padro POSIX (exemplos de uso de las de mensagens no padro System V esto disponveis em [Robbins and Robbins, 2003]). Para compil-lo em Linux necessrio efetuar a ligao com o biblioteca de tempo-real POSIX, usando a opo -lrt.
1 2 3 4 5 6 7 8 9 10 11 12 13

#include #include #include #include

<stdio.h> <stdlib.h> <mqueue.h> <sys/stat.h>

#define QUEUE "/my_queue" int main (int argc, char *argv[]) { mqd_t queue; // descritor da fila de mensagens struct mq_attr attr; // atributos da fila de mensagens int msg ; // mensagens contendo um inteiro

c Prof. Carlos Maziero

UNIX Message queues 12

14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

// define os atributos da fila de mensagens attr.mq_maxmsg = 10 ; // capacidade para 10 mensagens attr.mq_msgsize = sizeof(msg) ; // tamanho de cada mensagem attr.mq_flags = 0 ;
umask (0) ;

// mascara de permissoes (umask)

// caso a fila exista, remove-a para destruir seu conteudo antigo mq_unlink (QUEUE) ; // abre ou cria a fila com permissoes 0666 if ( (queue = mq_open (QUEUE, O_RDWR|O_CREAT, 0666, &attr)) == -1) { perror ("mq_open"); exit (1); } // recebe cada mensagem e imprime seu conteudo while (1) { if ( (mq_receive (queue, (void*) &msg, sizeof(msg), 0)) == -1) { perror("mq_receive:") ; exit (1) ; } printf ("Received msg value %d\n", msg); }
}

A listagem a seguir implementa o programa produtor das mensagens consumidas pelo programa anterior:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

#include #include #include #include

<stdio.h> <stdlib.h> <mqueue.h> <unistd.h>

#define QUEUE "/my_queue" int main (int argc, char *argv[]) { mqd_t queue; // descritor da fila int msg; // mensagem a enviar

// abre a fila de mensagens, se existir if( (queue = mq_open (QUEUE, O_RDWR)) == -1) { perror ("mq_open"); exit (1); }
while (1)

c Prof. Carlos Maziero

Pipes 13

21 22 23 24 25 26 27 28 29 30 31 32 33

{ msg = random() % 100 ; // valor entre 0 e 99

// envia a mensagem if ( mq_send (queue, (void*) &msg, sizeof(msg), 0) == -1) { perror ("mq_send"); exit (1); } printf ("Sent message with value %d\n", msg); sleep (1) ;
} }

Deve-se observar que o arquivo /fila referenciado em ambas as listagens serve unicamente como identicador nico para a la de mensagens; nenhum arquivo com esse nome ser criado pelo sistema. As mensagens no transitam por arquivos, apenas pela memria do ncleo. Referncias de recursos na forma de nomes de arquivos so usadas para identicar vrios mecanismos de comunicao e coordenao em UNIX, como las de mensagens, semforos e reas de memria compartilhadas (vide seo 4.3).

4.2 Pipes
Um dos mecanismos de comunicao entre processos mais simples de usar no ambiente UNIX o pipe, ou tubo. Na interface de linha de comandos, o pipe freqentemente usado para conectar a sada padro (stdout) de um comando entrada padro (stdin) de outro comando, permitindo assim a comunicao entre eles. A linha de comando a seguir traz um exemplo do uso de pipes: # who | grep marcos | sort > login-marcos.txt A sada do comando who uma listagem de usurios conectados ao computador. Essa sada encaminhada atravs de um pipe (indicado pelo caractere |) ao comando grep, que a ltra e gera como sada somente as linhas contendo a string marcos. Essa sada encaminhada atravs de outro pipe ao comando sort, que ordena a listagem recebida e a deposita no arquivo login-marcos.txt. Deve-se observar que todos os processos envolvidos so lanados simultaneamente; suas aes so coordenadas pelo comportamento sncrono dos pipes. A gura 10 detalha essa seqncia de aes. O pipe um canal de comunicao unidirecional entre dois processos (1:1), com capacidade nita (os pipes do Linux armazenam 4 KBytes por default), visto pelos processos como um arquivo, ou seja, a comunicao que ele oferece baseada em uxo. O envio e recepo de dados so feitos pelas chamadas de sistema write e read, que podem operar em modo sncrono (bloqueante, por default) ou assncrono.

c Prof. Carlos Maziero

Memria compartilhada 14

Figura 10: Comunicao atravs de pipes. O uso de pipes na linha de comando simples, mas seu uso na construo de programas pode ser complexo. Vrios exemplos do uso de pipes UNIX na construo de programas so apresentados em [Robbins and Robbins, 2003].

4.3 Memria compartilhada


A comunicao entre tarefas situadas em processos distintos deve ser feita atravs do ncleo, usando chamadas de sistema, porque no existe a possibilidade de acesso a variveis comuns a ambos. No entanto, essa abordagem pode ser ineciente caso a comunicao seja muito volumosa e freqente, ou envolva muitos processos. Para essas situaes, seria conveniente ter uma rea de memria comum que possa ser acessada direta e rapidamente pelos processos interessados, sem o custo da intermediao pelo ncleo. A maioria dos sistemas operacionais atuais oferece mecanismos para o compartilhamento de reas de memria entre processos (shared memory areas). As reas de memria compartilhadas e os processos que as utilizam so gerenciados pelo ncleo, mas o acesso ao contedo de cada rea feito diretamente pelos processos, sem intermediao ou coordenao do ncleo. Por essa razo, mecanismos de coordenao (apresentados na seo ??) podem ser necessrios para garantir a consistncia dos dados armazenados nessas reas. A criao e uso de uma rea de memria compartilhada entre dois processos pa e pb em um sistema UNIX pode ser resumida na seguinte seqncia de passos, ilustrada gura 11: 1. O processo pa solicita ao ncleo a criao de uma rea de memria compartilhada, informando o tamanho e as permisses de acesso; o retorno dessa operao um identicador (id) da rea criada. 2. O processo pa solicita ao ncleo que a rea recm-criada seja anexada ao seu espao de endereamento; esta operao retorna um ponteiro para a nova rea de memria, que pode ento ser acessada pelo processo.

c Prof. Carlos Maziero

Memria compartilhada 15

3. O processo pb obtm o identicador id da rea de memria criada por pa . 4. O processo pb solicita ao ncleo que a rea de memria seja anexada ao seu espao de endereamento e recebe um ponteiro para o acesso mesma. 5. Os processos pa e pb acessam a rea de memria compartilhada atravs dos ponteiros informados pelo ncleo.

Figura 11: Criao e uso de uma rea de memria compartilhada. Deve-se observar que, ao solicitar a criao da rea de memria compartilhada, pa dene as permisses de acesso mesma; por isso, o pedido de anexao da rea de memria feito por pb pode ser recusado pelo ncleo, se violar as permisses denidas por pa . A listagem a seguir exemplica a criao e uso de uma rea de memria compartilhada, usando o padro POSIX (exemplos de implementao no padro System V podem ser encontrados em [Robbins and Robbins, 2003]). Para compil-lo em Linux necessrio efetuar a ligao com o biblioteca de tempo-real POSIX, usando a opo -lrt. Para melhor observar seu funcionamento, devem ser lanados dois ou mais processos executando esse cdigo simultaneamente.

c Prof. Carlos Maziero

Memria compartilhada 16

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

#include #include #include #include #include

<stdio.h> <stdlib.h> <fcntl.h> <sys/stat.h> <sys/mman.h>

int main (int argc, char *argv[]) { int fd, value, *ptr;

// Passos 1/3: abre/cria uma area de memoria compartilhada fd = shm_open("/sharedmem", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR); if(fd == -1) { perror ("shm_open"); exit (1) ; } // Passos 1/3: ajusta o tamanho da area compartilhada if (ftruncate(fd, sizeof(value)) == -1) { perror ("ftruncate"); exit (1) ; } // Passos 2/4: mapeia a area no espaco de enderecamento deste processo ptr = mmap(NULL, sizeof(value), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if(ptr == MAP_FAILED) { perror ("mmap"); exit (1); }
while (1) { // Passo 5: escreve um valor aleatorio na area compartilhada value = random () % 1000 ; (*ptr) = value ; printf ("Wrote value %i\n", value) ; sleep (1);

// Passo 5: le e imprime o conteudo da area compartilhada value = (*ptr) ; printf("Read value %i\n", value); sleep (1) ;
} }

c Prof. Carlos Maziero

REFERNCIAS 17

Questes
1. Quais so as vantagens e desvantagens das abordagens a seguir, sob as ticas do sistema operacional e do programador de aplicativos? (a) comunicao bloqueante ou no-bloqueante (b) canais com buering ou sem buering (c) comunicao por mensagens ou por uxo (d) mensagens de tamanho xo ou varivel (e) comunicao 1:1 ou M:N 2. Explique como processos que comunicam por troca de mensagens se comportam em relao capacidade do canal de comunicao, considerando as semnticas de chamada sncrona e assncrona.

Exerccios
1. ...

Projetos
1. ...

Referncias
[Gnome, 2005] Gnome (2005). http://www.gnome.org. Gnome: the free software desktop project.

[Hart, 2004] Hart, J. (2004). Windows System Programming, 3rd edition. Addison-Wesley Professional. [KDE, 2005] KDE (2005). KDE desktop project. http://www.kde.org. [Petzold, 1998] Petzold, C. (1998). Programming Windows, 5th edition. Microsoft Press. [Robbins and Robbins, 2003] Robbins, K. and Robbins, S. (2003). UNIX Systems Programming. Prentice-Hall. [Stevens, 1998] Stevens, R. (1998). UNIX Network Programming. Prentice-Hall.

Você também pode gostar