Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Mensajes
Mensajes
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
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
send
mensaje
N
receive
Representan la interaccin entre procesos mediante el intercambio de mensajes El tiempo va hacia abajo
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
Comunicacin asncrona
N
A B
N
send mensaje
receive
Comunicacin sncrona
N
A B
Invocacin remota
A B
N N
send suspendido
mensaje
receive reply
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
Deberan poderse enviar objetos de cualquier tipo Es difcil de conseguir en un entorno distribuido
diferentes representaciones de tipos de datos problemas con punteros
10
ndice
N N
11
12
Entradas
N
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);
Si se llama a una entrada de una tarea que no est activa, se eleva la excepcin +askin9*-rror
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
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
16
Diagrama de procesos
T2.E
T1
T2
accept E
17
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
18
Sincronizacin (1)
A B
:.-(X,Y)
19
Sincronizacin (2)
A B
20
Excepciones en citas
N
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
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
23
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;
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
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;
27
Seleccin condicional
N
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
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
Se evalan las guardas; slo se consideran las alternativas abiertas (guardas verdaderas)
si todas las alternativas estn cerradas se eleva Program_Error
30
Llamada condicional
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
31
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;
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;
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
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);
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
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