Junio 2004

Anuncio
Examen de SISTEMAS DE TIEMPO REAL
Duración 90 minutos (con libros y apuntes)
24 de junio de 2004
NOMBRE:
Pregunta 1 (1 punto)
¿Cuál es la ventaja principal del método de planificación con prioridades fijas frente a los métodos de
planificación dinámica como el de planificar primero a la tarea más urgente (Earliest Deadline First)?
La principal ventaja del método de planificación con prioridades fijas frente a los métodos de planificación dinámica es su estabilidad. Es decir, en caso de sobrecarga transitoria empezarán a perder sus
plazos de respuestas las tareas menos prioritarias. Los métodos de planificación dinámica tienen un comportamiento impredecible en caso de sobrecarga.
Pregunta 2 (1 punto)
¿Qué ventajas tiene el protocolo del techo de prioridad frente al protocolo de herencia de prioridad?
¿Presenta alguna desventaja?
Los protocolos de techo de prioridad permiten obtener unos tiempos máximos de bloqueo menores
que el protocolo de herencia de prioridad. Además evitan los interbloqueos, los bloqueos encadenados y
proporcionan exclusión mutua, en monoprocesadores, sin mecanismos adicionales.
Sin embargo, como son más restrictivos al permitir el acceso a recursos compartidos, se producen
bloqueos que con el protocolo de herencia de prioridad no se producirı́an. Por lo tanto, los tiempos medios
de bloqueo son mayores.
Pregunta 3 (2 puntos)
El siguiente fragmento de programa Ada se corresponde con el de una tarea de prioridad media en un
sistema donde hay tareas de mayor y menor prioridad. ¿Cuánto podrı́a llegar a ser el lı́mite mı́nimo y
máximo de tiempo de ejecución de Periodic Activity? ¿Es necesario algún mecanismo adicional para
establecer correctamente dicho lı́mite? ¿Cuál?
task body Periodic is
pragma Priority (Medium Priority);
use Ada.Real Time;
Period : Time Span := Milliseconds (1 000);
Next Time : Time := Clock;
begin
loop
delay until Next Time;
Next Time := Next Time + Period;
select
delay 0.1;
raise Time Faliure
then abort
Periodic Activity;
end select;
end loop;
end Periodic;
5
10
15
El lı́mite máximo de tiempo de ejecución de Periodic Activity es de 100 milisegundos, ya que ası́
está limitado por la transferencia ası́ncrona de control. Sin embargo, el lı́mite minimo puede ser igual a 0.
En efecto, si justo antes de comenzar la ejecución de Periodic Activity la tarea Periodic es desalojada por tareas de mayor prioridad durante un lapso de tiempo mayor o igual a 100 milisegundos, al volver
a ejecución la temporización de la transferencia ası́ncrona de control habrı́a expirado. En este caso, se suspenderı́a inmediatamente la ejecución de Periodic Activity y se activarı́a la excepción Time Faliure.
Para establecer correctamente un lı́mite de tiempo de ejecución son necesarios relojes y temporizadores
basados en el tiempo de ejecución y no en el tiempo transcurrido, como es el caso del reloj de Ada.Real Time.
Pregunta 4 (3 puntos)
Un sistema de tiempo real tiene 4 tareas, TA-TD, y 2 objetos protegidos, PA y PB. Las siguientes tablas
contienen los atributos temporales de las tareas y los tiempos de ejecución de las actividades que ejecutan.
Tarea
TA
TB
TC
TD
Tipo
P
S
P
P
Perı́odo
150
120
15
60
Plazo de respuesta
150
40
15
60
Actividades
a1 , a2 , a3
b1 , b2 , b3
c1 , c2
d1
Suponiendo que el método de planificación es el de prioridades fijas con desalojo, y el acceso a los
objetos protegidos se realiza mediante el protocolo del techo de prioridad inmediato, se pide:
Actividad
a1
a2
a3
b1
b2
b3
c1
c2
d1
Tiempo de cómputo
5
6
5
5
2
3
4
4
10
Recurso
No
PB
PA
No
PA
PB
No
PA
No
1. Asignar prioridades a las tareas y calcular los techos de prioridad de los objetos protegidos.
2. Calcular los tiempos de bloqueo máximos de las tareas.
3. Calcular el tiempo de respuesta en el peor caso de las tareas TB y TC.
La asignación de prioridades basada en dar mayor prioridad a las tareas con menor plazo de respuesta,
permite planificar el conjunto de tareas con los siguientes tiempos de bloqueo y respuesta1 :
Response time analysis for task set Sample
-----------------------------------------Id Task
A PR Period Offset Jitter
WCET
Block Deadline Response Sch
-- --------- - -- ------- ------- ------- ------- ------- -------- -------- --1 TC
P 4 15.000
0.000
0.000
8.000
5.000
15.000
13.000 Yes
2 TB
S 3 120.000
0.000
0.000 10.000
6.000
40.000
40.000 Yes
3 TD
P 2 60.000
0.000
0.000 10.000
6.000
60.000
58.000 Yes
4 TA
P 1 150.000
0.000
0.000 16.000
0.000 150.000 102.000 Yes
Priority ceilings for shared resources
-------------------------------------Id Name
PR
-- --------- -1 PA
4
2 PB
3
Total processor utilization :
1 La cálculos han
89.00%
sido realizados con la herramienta RTA (ftp://ftp.dit.upm.es/str/software/rta/) que se distribuye con licencia GNU.
Pregunta 5 (3 puntos)
Dado el siguiente programa:
1. ¿Qué hace? Explique su funcionamiento.
2. ¿Qué mecanismos de comunicación y sincronización emplearı́amos en Ada 95 para hacer lo mismo?
3. ¿Hay algún error? Si lo hay indique en qué lı́nea y como se resolverı́a.
Código del servidor
/* estructura de un mensaje */
struct mensaje
char buffer[1024]; /* datos a enviar */
char cliente[256]; /* cola del cliente */
;
5
/* mutex y var. condicionales protección de la copia del mensaje */
pthread mutex t mutex mensaje;
int mensaje no copiado = TRUE;
pthread cond t cond;
10
void main(void)
mqd t q servidor;
/* cola del servidor */
struct mensaje mess; /* mensaje a recibir */
struct mq attr q attr; /* atributos de la cola */
pthread attr t t attr; /* atributos de los threads */
q attr.mq maxmsg = 20;
q attr.mq msgsize = sizeof(struct mensaje);
q servidor = mq open("SERVIDOR", O CREAT O RDONLY, 0700, &q attr);
pthread mutex init(&mutex mensaje, NULL);
pthread cond init(&cond, NULL);
pthread attr init(&t attr);
pthread attr setscope(&t attr,PTHREAD SCOPE SYSTEM);
pthread attr setdetachstate(&t attr, PTHREAD CREATE DETACHED);
while (TRUE)
mq receive(q servidor, &mess, sizeof(struct mensaje), NULL);
15
20
pthread create(&thid, &t attr, tratar mensaje, &mess);
/* se espera a que el thread copie el mensaje */
pthread mutex lock(&mutex mensaje);
while (mensaje no copiado)
pthread cond wait(&cond, &mutex mensaje);
mensaje no copiado = TRUE;
pthread mutex unlock(&mutex mensaje);
25
30
35
40
void tratar mensaje(struct mensaje *mes)
struct mensaje mensaje local;
struct mqd t q cliente; /* cola del cliente */
struct mensaje respuesta; /* mensaje de respuesta al cliente */
/* el thread copia el mensaje */
pthread mutex lock(&mutex mensaje);
memcpy((char *) &mensaje local, (char *)&mes, sizeof(struct mensaje));
/* ya se puede despertar al servidor*/
mensaje no copiado = FALSE;
pthread cond signal(&cond);
pthread mutex unlock(&mutex mensaje);
45
50
/* ejecutar la petición del cliente y preparar respuesta */
/* responder al cliente a su cola */
q cliente = mq open(mensaje local.cliente, O WRONLY);
mqsend(q cliente, (char *) &respuesta, sizeof(respuesta), 0);
mq close(q cliente);
pthread exit(0);
55
60
Código del cliente
struct mensaje /* estructura mensaje */
char buffer[1024]; /* datos envı́o */
char cliente[256]; /* cola cliente */
;
5
void main(void)
mqd t
mqd t
struct
struct
struct
q servidor; /* cola servidor */
q cliente; /* cola cliente */
mq attr attr; /* atr. cola */
mensaje peticion; /* peticion al servidor */
mensaje respuesta; /* respuesta del servidor */
attr.mq maxmsg = 1;
attr.mq msgsize = sizeof(struct mensaje);
10
15
q cliente = mq open("CLIENTE",
O CREAT O RDONLY, 0700, 0);
q servidor = mq open("SERVIDOR", O WRONLY);
20
/* preparar peticion */
mq send(q servidor, &peticion,
/* esperar respuesta */
mq receive(q cliente, &respuesta,
mq close(q servidor);
mq close(q cliente);
mq unlink("CLIENTE");
exit(0);
sizeof(struct mensaje), 0);
sizeof(struct mensaje), NULL);
25
30
Descargar