Академический Документы
Профессиональный Документы
Культура Документы
Este texto est licenciado sob a Licena Attribution-NonCommercial-ShareAlike 3.0 Unported da Creative
Commons (CC). Em resumo, voc deve creditar a obra da forma especificada pelo autor ou licenciante (mas
no de maneira que sugira que estes concedem qualquer aval a voc ou ao seu uso da obra). Voc no
pode usar esta obra para fins comerciais. Se voc alterar, transformar ou criar com base nesta obra, voc
poder distribuir a obra resultante apenas sob a mesma licena, ou sob uma licena similar presente.
Para ver uma cpia desta licena, visite http://creativecommons.org/licenses/by-nc-sa/3.0/.
Este texto foi produzido usando exclusivamente software livre: Sistema Operacional GNU/Linux (distribuies Fedora e Ubuntu), compilador de texto LATEX 2 , gerenciador de referncias BibTeX, editor grfico
Inkscape, criadores de grficos GNUPlot e GraphViz e processador PS/PDF GhostScript, entre outros.
c Carlos Maziero
: SUMRIO
Sumrio
1
Objetivos
Escopo da comunicao
.
.
.
.
.
.
4
5
5
7
8
9
10
11
11
14
15
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
c Carlos Maziero
: Objetivos
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.
Objetivos
c Carlos Maziero
: Escopo da comunicao
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
as demais tarefas caso o usurio clique nos botes stop ou reload. Outra situao de
comunicao frequente 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
especficos, fazendo uso do suporte de rede disponvel. A Figura 1 ilustra essas trs
situaes.
Computador 1
Computador 2
Processo pa
tarefa i
Processo pb
tarefa j
send
Processo pc
tarefa k
tarefa l
recv
rea
comum
send
send recv
recv
rea no ncleo
ncleo
ncleo
rea no ncleo
rede
c Carlos Maziero
3.1
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 identifica claramente o
receptor e vice-versa, denominada comunicao direta.
Poucos sistemas empregam a comunicao direta; na prtica so utilizados mecanismos de comunicao indireta, por serem mais flexveis. 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. Neste caso, 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). A Figura 2 ilustra
essas duas formas de comunicao.
receptor
emissor
receptor
emissor
canal
dados
enviar
dados
enviar
receber
dados
3.2
Sincronismo
c Carlos Maziero
: Sincronismo
receptor
emissor
receptor
emissor
enviar
receber
espera
espera
dados
dados
enviar
receber
emissor
enviar
erro !
(ningum para receber)
receber
erro !
(nada a receber)
dados
enviar
receber
c Carlos Maziero
: Formato de envio
emissor
receptor
emissor
enviar
receber
prazo
prazo
erro !
(ningum para receber)
erro !
(nada a receber)
enviar
receber
dados
dados
enviar
receber
3.3
Formato de envio
c Carlos Maziero
ab
enviar
buer
receptor
ab
1234
enviar
1234
xyz
enviar
xyz 1234
ab
receber
ab
receber
1234
receber
xyz
xyz
buer
ab
enviar
ab
1234
enviar
ab1234
xyz
enviar
receptor
receber
ab12
receber
34xy
34xyz
receber
3.4
c Carlos Maziero
francs para encontro). A Figura 3 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 infinita (n = ) : o emissor sempre pode enviar dados, que sero armazenados no buffer 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 finitas. No entanto, essa simplificao
til no estudo dos algoritmos de comunicao e sincronizao, pois torna menos
complexas a modelagem e anlise dos mesmos.
Capacidade finita (0 < n < ) : neste caso, uma quantidade finita (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 ficar bloqueado at surgir espao
no buffer 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 finita.
Para exemplificar esse conceito, a Figura 8 apresenta o comportamento de duas
tarefas trocando dados atravs de um canal de comunicao com capacidade para duas
mensagens e comportamento sncrono (bloqueante).
emissor
m1
enviar
m2
enviar
m3
enviar
buer
m1
m2
receptor
m1
m2 m1
no h espao
m2
m3
m1
receber
m1
m3 m2
3.5
c Carlos Maziero
: Nmero de participantes
Perda de dados: nem todos os dados enviados atravs do canal chegam ao seu
destino; podem ocorrer perdas de mensagens (no caso de comunicao orientada
a mensagens) ou de sequncias de bytes, no caso de comunicao orientada a
fluxo de dados.
Perda de integridade: os dados enviados pelo canal chegam ao seu destino, mas
podem ocorrer modificaes em seus valores devido a interferncias externas.
Perda da ordem: todos os dados enviados chegam ntegros ao seu destino, mas o
canal no garante que eles sero entregues na ordem em que foram enviados. Um
canal em que a ordem dos dados garantida denominado canal FIFO ou canal
ordenado.
Os canais de comunicao usados no interior de um sistema operacional para a
comunicao entre processos ou threads locais so geralmente confiveis, ao menos em
relao perda ou corrupo de dados. Isso ocorre porque a comunicao local feita
atravs da cpia de reas de memria, operao em que no h risco de erros. Por
outro lado, os canais de comunicao entre computadores distintos envolvem o uso
de tecnologias de rede, cujos protocolos bsicos de comunicao so no-confiveis
(como os protocolos Ethernet, IP e UDP). Mesmo assim, protocolos de rede de nvel mais
elevado, como o TCP, permitem construir canais de comunicao confiveis.
3.6
Nmero de participantes
c Carlos Maziero
r1
m1
e1
m4
m3
m1
m2
mailbox
m4
r2
m2
e2
m3
r3
e1
e2
m3
m3
m2
m1
m3
m2
m1
m3
m2
m1
m1
r1
r2
m2
r3
4.1
c Carlos Maziero
12
c Carlos Maziero
1
2
3
4
5
6
7
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<mqueue.h>
<sys/stat.h>
8
9
10
11
12
13
14
15
16
17
18
19
20
21
umask (0) ;
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
13
c Carlos Maziero
1
2
: Pipes
3
4
5
6
7
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<mqueue.h>
<unistd.h>
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for (;;)
{
msg = random() % 100 ; // valor entre 0 e 99
23
24
25
26
// envia a mensagem
if (mq_send (queue, (void*) &msg, sizeof(msg), 0) < 0)
{
perror ("mq_send");
exit (1);
}
printf ("Sent message with value %d\n", msg);
sleep (1) ;
27
28
29
30
31
32
33
34
35
36
4.2
Pipes
14
c Carlos Maziero
: Memria compartilhada
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 filtra 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 Figura 11 detalha essa sequncia de aes.
who
stdin
stdout
grep
pipe
stdout
stdin
sort
stdout
pipe
ncleo
arquivo
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 ineficiente caso a
comunicao seja muito volumosa e frequente, 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
15
c Carlos Maziero
: Memria compartilhada
16
c Carlos Maziero
: Memria compartilhada
pa
pb
nova rea de
memria
passo 1)
criar
alocar
id
ncleo
reas alocadas
pa
pb
passos 2 e 3)
anexar
ptr
obter
id
ncleo
pa
passos 4 e 5)
pb
usar
usar
ptr
anexar
ncleo
3
4
5
6
7
8
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<fcntl.h>
<sys/stat.h>
<sys/mman.h>
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
c Carlos Maziero
: REFERNCIAS
Referncias
[Gnome, 2005] Gnome (2005).
http://www.gnome.org.
Gnome:
[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.
18