Está en la página 1de 36

dit

UPM

Comunicacin mediante mensajes


Juan Antonio de la Puente DIT/UPM

Transparencias basadas en el captulo 9 del libro de A. Burns y A. Wellings Real-Time Systems and Programming Languages, 3 edicin (2001)

Objetivos
N

Comprender los problemas relacionados con la comunicacin entre procesos basada en el intercambio de mensajes Estudiar la forma de realizar este tipo de comunicacin en Ada y C/POSIX

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

Comunicacin mediante mensajes


N

N N

Las tareas se pueden comunicar y sincronizar mediante mensajes Esta forma de comunicacin no necesita memoria comn Se usan los mismos mecanismos para la sincronizacin y la comunicacin Hay tres aspectos de inters:
Sincronizacin Identificacin del proceso emisor y receptor Estructura de los mensajes

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

Diagramas de secuencia de mensajes

send

mensaje

N
receive

Representan la interaccin entre procesos mediante el intercambio de mensajes El tiempo va hacia abajo

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

Sincronizacin en el envo de mensajes


N

El proceso receptor siempre espera si el mensaje no ha llegado todava. Para el proceso emisor hay tres modelos bsicos:
Comunicacin asncrona: el emisor contina su ejecucin Comunicacin sncrona (cita): el emisor espera a que el receptor reciba el mensaje Invocacin remota (cita extendida): el emisor espera a que el receptor reciba el mensaje, y la respuesta de ste

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

Comunicacin asncrona
N
A B

Hace falta usar un tampn


capacidad potencialmente ilimitada si es limitado puede bloquearse el emisor

N
send mensaje

El emisor puede requerir un reconocimiento


diseo complicado

receive

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

Comunicacin sncrona
N
A B

No hace falta tampn Se puede construir a partir de la comunicacin asncrona:


A send(m); receive(ack); B receive(m); send(ack);

send suspendido mensaje receive

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

Invocacin remota
A B

N N

No hace falta tampn Se puede construir a partir de la comunicacin sncrona:


A s_send(m); B s_receive(m); preparar r s_receive(r); s_send(r);

send suspendido

mensaje

receive reply

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

Identificacin del emisor y el receptor


N

Identificacin directa o indirecta


directa: el emisor identifica explctamente el receptor
send mensaje to proceso

indirecta: se utiliza un intermediario (buzn, canal, tubera, etc.) send mensaje to buzn N

Simetra
Comunicacin simtrica: el emisor identifica el receptor, y viceversa send mensaje to proceso (buzn) receive mensaje from proceso (buzn) Comunicacin asimtrica: el receptor acepta mensajes de cualquier emisor o buzn Este tipo de comunicacin es adecuado para realizar servidores

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

Estructura de los mensajes


N N

Deberan poderse enviar objetos de cualquier tipo Es difcil de conseguir en un entorno distribuido
diferentes representaciones de tipos de datos problemas con punteros

Se puede hacer con bibliotecas estndar de aplanamiento de tipos


convierten cualquier tipo en una secuencia de octetos

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

10

ndice
N N

Comunicacin mediante mensajes Comunicacin entre tareas en Ada


cita extendida espera selectiva llamada selectiva

Comunicacin entre threads en C/POSIX

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

11

Comunicacin entre tareas en Ada


N

Se basa en un mecanismo de cita extendida


invocacin remota directa y asimtrica

Una tarea puede recibir mensajes a travs de entradas declaradas en su especificacin


la especificacin de una entrada es similar a la de un procedimiento Ejemplo:
task type Screen is entry Put (Char : Character; X,Y : Coordinate); end Screen; Display : Screen;

otras tareas pueden llamar a la entrada


Display.Put(' ',!",#$);

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

12

Entradas
N

Puede haber entradas homnimas, siempre que tengan distintos parmetros


Tambin puede haber entradas homnimas con subprogramas

Se pueden definir familias de entradas con un discriminante discreto


type Channel is range "..%; task &ultiple'or is entry (et(Channel)(Data : )nput*Data); end &ultiple'or;

Puede haber entradas privadas


task type +elephone*,perator is entry Directory*-n.uiry (Person : in /ame; Phone : out /um0er); entry 1eport*2ault (Phone : in /um0er); private entry llocate*1epair*3orker ()d : out 3orker*)d); end +elephone*,perator;

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

13

Llamada

Para llamar a una entrada hay que identificar la tarea receptora (no hay clusula use)
Display.Put(' ',!",#$); &ultiple'or.(et(4)(X); ,perator.Directory*-n.uiry(56uan P7re85, /o*de*6uan);

Se puede renombrar una entrada como un procedimiento


procedure -n.uiry (Person : in /ame; Phone : out /um0er) renames ,perator.Directory*-n.uiry;

Si se llama a una entrada de una tarea que no est activa, se eleva la excepcin +askin9*-rror

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

14

Aceptacin (1)
N

Para que se lleve a cabo una cita, la tarea receptora debe aceptar la llamada al punto de entrada correspondiente
accept Put(Char : Character; X,Y : Coordinate) do -- escribir Char en la posicin (X,Y) end Put; accept (et(4)(Data : )nput*Data) do -- leer Data del canal 3 end (et;

Debe haber al menos un accept por cada entrada (puede haber ms) El ndice identifica cul de las entradas de una familia se acepta
debe haber un accept para cada miembro de la familia

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

15

Aceptacin (2)
N

Una instruccin accept se puede poner en cualquier lugar del cuerpo de una tarea
en particular, se puede poner dentro de otro accept (siempre que sea de distinta entrada) no se pude poner en un procedimiento

El cuerpo del accept especifica las acciones que se ejecutan cuando se acepta la llamada
La secuencia de instrucciones puede incluir manejadores de excepciones

Si el cuerpo es nulo, se puede usar una forma simplificada:


accept -;

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

16

Diagrama de procesos

T2.E

T1

T2

accept E

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

17

Ejecucin de una cita extendida


N

Las dos tareas deben estar listas para realizar la comunicacin.


la que llega primero a la cita se suspende hasta que la otra ejecuta la instruccin complementaria (llamada o aceptacin)

Cuando las dos estn listas


se pasan los parmetros de entrada a la tarea llamada se ejecuta el cuerpo del accept se copian los parmetros de salida al cliente

N N

A continuacin, las dos continan su ejecucin asncronamente. Si varias tareas invocan el mismo punto de entrada de otra tarea, se colocan en una cola Una tarea que espera para poder realizar una cita permanece suspendida durante el tiempo que dura la espera

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

18

Sincronizacin (1)
A B

:.-(X,Y)

X accept -(X : in +; Y : out +) Y :; X; end E; do

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

19

Sincronizacin (2)
A B

accept -(X : in +; Y : out +) X :.-(X,Y) Y do Y :; X; end E;

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

20

Excepciones en citas
N

Puede elevarse una excepcin cuando se est ejecutando una cita


si hay un manejador en el cuerpo del accept, la cita termina normalmente si la excepcin no se maneja dentro del accept,
la cita termina inmediatamente la excepcin se vuelve a elevar en las dos tareas (puede ser annima en la que llama)

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

21

Ejemplo
accept Directory*-n.uiry (Person : in /ame; Phone : out /um0er) do Data*:ase.<ookup (Person, Phone*1ecord); Phone :; Phone*1ecord.Phone*/um0er; exception when Data*:ase./ot*2ound ;= Phone :; /o*Phone; end Directory*-n.uiry;

Si durante la ejecucin de <ookup se produce la excepcin /ot*2ound, se recupera el error dando un valor nulo al parmetro Phone y se termina la cita El cliente y el servidor continan normalmente Si se produce cualquier otra excepcin, la cita termina y la excepcin se propaga en los dos, inmediatamente despus de la llamada en el cliente, y de la aceptacin en el servidor

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

22

Espera selectiva
N

A menudo no es posible prever en qu orden se van a invocar las distintas entradas de una tarea Esto ocurre cuando sobre todo en las tareas servidoras
Un servidor es una tarea que acepta llamadas a una o ms entradas, y ejecuta un servicio para cada una de ellas un cliente es una tarea que solicita servicios llamando a las entradas de un servidor Los servidores no saben en qu orden les van a llamar los clientes
deben estar dispuestos a aceptar cualquier llamada cuando no estn ocupados

Es necesario que una tarea pueda esperar simultneamente llamadas en varias entradas

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

23

Aceptacin selectiva en Ada


N

Es una estructuraa de control que permite la espera selectiva en varias alternativas


se ect accept entrada_1 do >> alternativa_1 ... end entrada_1; ?secuencia_de_instrucciones@ or accept entrada_2 do >> alternativa 2 ... end entrada_2; ?secuencia_de_instrucciones@ or ... end se ect;

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

24

Ejemplo

task !ody +elephone*,perator is !egin oop se ect accept Directory*-n.uiry (Person : in /ame; Phone : out /um0er) do -- buscar el nmero y asignar el valor a Phone end Directory*-n.uiry; or accept 1eport*2ault (Phone : /um0er) do -- avisar al servicio de mantenimiento end 1eport*2ault; end se ect; end oop; end +elephone*,perator;

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

25

Alternativas guardadas
N

N N

A veces es necesario que alguna de las alternativas de una seleccin se acepte slo en determinadas condiciones. Se pueden poner guardas en las alternativas. Una guarda es una expresin booleana.
when condicin ;= alternativa

Las guardas se evalan al ejecutar el select


Las alternativas cuyas guardas son verdaderas se tienen en cuenta para la seleccin. Se dice que estas alternativas estn abiertas Las alternativas cuyas guardas son falsas se ignoran. Se dice que estas alternativas estn cerradas Se considera un error que todas alternativas estn cerradas

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

26

Ejemplo

task !ody +elephone*,perator is !egin oop se ect accept Directory*-n.uiry(Person : in /ame; Phone : out /um0er) do -- buscar el nmero y asignar el valor a Phone end Directory*-n.uiry; or when +oday in 3eekday ;= accept 1eport*2ault (Phone : /um0er) do -- avisar al servicio de mantenimiento -- (slo en das laborables) end 1eport*2ault; end se ect; end oop; end +elephone*,perator;

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

27

Seleccin condicional
N

Una instruccin select puede tener una parte final de la forma:


se ect alternativa Aor alternativaB e se secuencia_de_instrucciones end se ect;

La parte else se ejecuta si al llegar al select no se puede aceptar inmediatamente ninguna otra alternativa No puede haber parte else y alternativas temporizadas en un mismo select La parte else no es una alternativa y, por tanto, no puede estar guardada
STRL - Mensajes - 20/03/07 2001-2002 Juan Antonio de la Puente 28

Alternativa terminate
N

Una de las alternativas de un select puede tener la forma:


terminate;

Esta alternativa se selecciona cuando


el tutor de la tarea ha completado su ejecucin todas las tareas que dependen del mismo dueo estn terminadas o esperando en un select con una alternativa terminate
En este caso terminan todas ellas simultneamente

N N N

Es conveniente que las tareas servidoras terminen as La alternativa terminate puede estar guardada Es incompatible con las alternativas temporizadas y con la parte else
2001-2002 Juan Antonio de la Puente 29

STRL - Mensajes - 20/03/07

Resumen de la aceptacin selectiva


N

Se evalan las guardas; slo se consideran las alternativas abiertas (guardas verdaderas)
si todas las alternativas estn cerradas se eleva Program_Error

Si hay llamadas en una o ms alternativas abiertas, se elige una de forma indeterminista


se ejecuta el accept y la secuencia que le sigue, y termina el select

Si no hay llamadas pendientes


si hay parte else se ejecuta inmediatamente y se termina el select si no, la tarea se suspende hasta que llegue una llamada a una de las alternativas abiertas si hay alternativa terminate y ya no se pueden recibir ms llamadas, termina la tarea

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

30

Llamada condicional

La llamada condicional permite que un cliente retire su peticin si no es aceptada inmediatamente


se ect llamada_a_entrada !secuencia_de_instrucciones" e se secuencia de instrucciones end se ect;

Si la llamada no se acepta inmediatamente, se abandona y se ejecuta la parte else Aqu tampoco puede haber ms de una alternativa Slo se debe usar si la tarea puede realizar trabajo til cuando no se acepta la llamada

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

31

Tareas y exclusin mutua


N

Una tarea slo puede ejecutar una instruccin accept en un momento dado.
Los cuerpos de las instrucciones accept estn en exclusin mutua Esto asegura la integridad de los recursos de las tareas servidoras Se puede usar para emular un objeto protegido en Ada 83

Ejemplo
task type SerCer is -- gestiona un recurso global entry SD(...); -- servicio #1 entry S#(...); -- servicio #2 ... -- etc$ end SerCer;

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

32

Esquema de servidor
task !ody SerCer is -- estructura de datos del recurso !egin oop se ect accept SD (...) do ... end SD; or accept S# (...) do ... end S#; ... or ... end se ect; ... end oop; end SerCer;

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

33

Mensajes en C/POSIX.1c
N

N N

Las colas de mensajes permiten efectuar comunicacin asncrona, indirecta y simtrica entre threads o procesos Una cola de mensajes puede tener varios escritores y lectores Las colas tienen nombre Cada cola tiene un tampn asociado
si se llena, se bloquea el emisor (se puede anular) el receptor se bloquea si el tampn est vaco Si hay varios threads bloqueados se reanuda uno arbitrariamente
se puede especificar que se reanude el ms prioritario

Hay ms opciones, bastante complicadas

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

34

Definiciones

EF m.ueue.h FE typedeG ... m"d_t; struct m"_attr A lon9 m.*Gla9s; lon9 m.*ma'ms9; lon9 m.*ms9si8e; lon9 m.*curms9s B %& message 'ueue descriptor &% %& %& %& %& message 'ueue (lags &% ma)imum number o( messsages &% ma)imum message size &% number o( messages 'ueued &%

m.dt*t m"_open(const char Fname, int oGla9); int m"_c ose(m.d*t m.des); int m"_send(m.d*t m.des, const char Fms9*ptr, si8e*t ms9*len, unsi9ned int ms9*prio); sssi8e*t m"_receive(m.d*t m.des, char Fms9*ptr, si8e*t ms9*len, unsi9ned int Fms9*prio);

STRL - Mensajes - 20/03/07

2001-2002 Juan Antonio de la Puente

35

Resumen
En Ada las tareas pueden comunicarse por medio de citas, segn un modelo de clientes y servidores
Una tarea puede tener entradas, que se pueden llamar desde otras tareas La tarea receptora debe aceptar la llamada para que se produzca la cita La tarea que llama espera si la llamada todava no se ha aceptado
N

La aceptacin selectiva permite:


Esperar simultneamente llamadas en varias entradas Ejecutar acciones alternativas cuando no hay llamadas pendientes Terminar la ejecucin de un servidor cuando ya no es necesario

N N

La llamada condicional permite evitar que una tarea se quede esperando la aceptacin de una cita Las colas de mensajes de POSIX permiten efectuar comunicacin asncrona, indirecta y simtrica
2001-2002 Juan Antonio de la Puente 36

STRL - Mensajes - 20/03/07

También podría gustarte