Publicado el 15 de Octubre del 2018
870 visualizaciones desde el 15 de Octubre del 2018
132,9 KB
33 paginas
Creado hace 14a (10/09/2010)
Prácticas de Sistemas de Tiempo Real
Curso 2010–2011
Juan Zamorano Flores, Francisco Sánchez Moreno
jzamora@fi.upm.es, fsanchez@fi.upm.es
Departamento de Arquitectura y Tecnología de Sistemas Informáticos
Facultad de Informática
Universidad Politécnica de Madrid
Marzo 2011
Índice general
Normas Generales
1. Práctica 1: Planificación cíclica
. . . .
. .
1.3.1. Depuración . . .
. . . .
1.1. Descripción . . .
1.2. Codificación en Ada
. . . .
1.3. Plataforma de desarrollo . . . .
. . . .
1.4. Codificación en C/POSIX . . . .
1.5. Plataforma de desarrollo . . . .
. . . .
1.6. Trabajo práctico .
1.7. Material a entregar
. . . .
. . . .
. . .
2. Práctica 2: Planificación multitarea
. . . .
2.1. Descripción . . .
. . . .
2.2. Tareas esporádicas
. . . .
2.3. Codificación en Ada
2.4. Codificación en C/POSIX . . . .
. . . .
2.5. Trabajo práctico .
2.6. Material a entregar
. . . .
. . . .
. . .
. .
. . . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . .
. . .
. . .
. . .
. . .
. . .
1
3
3
3
6
7
8
9
11
11
13
13
14
15
21
28
28
I
II
ÍNDICEGENERAL
Normas Generales
Para poder aprobar será necesario presentar las prácticas 1 y 2 de este cuaderno de
prácticas.
Se hará examen en Junio y Septiembre. Su peso en la nota será de un 33 % (el mismo
para cada práctica), siendo necesario aprobarlo con una nota igual o superior a 5.
La detección de copia en alguna práctica supondrá suspender el curso completo por
la parte copiadora y para los copiados también. Por tanto, se recomienda a todos
los alumnos proteger sus cuentas adecuadamente, poner palabras clave, y estar al
tanto cuando envíen listados para evitar el robo de los mismos. En caso de robo
de listados, los alumnos deberán comunicar dicha incidencia en el departamento
por correo electrónico, adjuntando una copia del programa que estaba en el listado
robado.
Se utilizará el correo electrónico, siempre que se pueda, como forma habitual de
comunicación alumno–profesor.
Las prácticas podrán realizarse en grupos de una o dos personas. Si bien en la nota
de cada práctica se tendrá en cuenta el número de alumnos del grupo: por ejemplo,
una práctica que obtiene un 7 en un grupo de dos puede obtener un 9 si es individual.
Todas las prácticas deberán presentarse en el plazo fijado dentro de cada convo-
catoria. Aquellas prácticas que se presenten fuera de plazo, serán corregidas en la
siguiente convocatoria. El plazo de entrega coincide con el día del examen.
Todas las prácticas deberán respetar las normas de presentación descritas para cada
práctica en particular.
Los alumnos deben inscribirse a la lista de correo de la asignatura mandando su
nombre a fsanchez@fi.upm.es
1
Capítulo 1
Práctica 1: Planificación cíclica
1.1. Descripción
La práctica 1 de Sistemas de Tiempo Real consiste en la realización de un planificador
cíclico que permita planificar un conjunto de tareas que debe construir el alumno.
Dicho conjunto de tareas tiene las siguientes características temporales:
Tarea Tiempo de Cómputo Período Plazo de respuesta
A
B
C
D
E
3
3
2
2
2
10
10
20
20
20
10
10
20
20
20
Cuadro 1.1: Características temporales de las tareas
El tiempo de cómputo, el plazo de respuesta y el período están expresados en segun-
dos. Nótese que el plazo de respuesta coincide con el período de cada tarea y que estos
son armónicos entre sí.
1.2. Codificación en Ada
La primera parte de esta práctica consiste en codificar el planificador cíclico y las tar-
eas utilizando el lenguaje de programación Ada. En particular, se utilizará el subconjunto
definido en el perfil de Ravenscar.
El perfil de Ravenscar establece un conjunto de restricciones para el lenguaje Ada, la
definición de este subconjunto de Ada se puede encontrar en el fichero ravenscar.ps
en el directorio /usr/local/openravenscar/apoyo de batman. Sin embargo,
desde el punto de vista de esta práctica, las restricciones más importantes son que no se
puede usar la sentencia delay, el paquete Ada.Calendar y el paquete Ada.Text_IO.
El sistema de compilación Ada que se usará GNAT/ORK está basado en el compilador
GNAT, y el conjunto de restricciones correspondientes al perfil de Ravenscar se establece
colocando el fichero de configuración gnat.adc en el mismo directorio donde residen
los fuentes.
3
4
CAPÍTULO1. PRÁCTICA1:PLANIFICACIÓNCÍCLICA
gnat.adc
pragma Ravenscar;
pragma Restrictions (No IO);
pragma Task Dispatching Policy (FIFO Within Priorities);
pragma Locking Policy (Ceiling Locking);
El código de las tareas deberá:
Imprimir en pantalla la indicación del comienzo de cada ejecución: "Tarea <nom-
bre(A B ...)><minutos:segundos>". Como no se puede utilizar el paquete Ada.
Text_IO, se utilizará el paquete Kernel.Serial_Output que proporciona
el sistema de compilación GNAT/ORK. Este paquete permite imprimir objetos del
tipo String a través de una línea serie del computador de ejecución.
Simular el tiempo de cómputo mediante una sentencia delay until Hora ac-
tual + Tiempo de Cómputo. El tiempo de cómputo correspondiente a la es-
critura en pantalla se considera despreciable.
Cada tarea se implementará como un procedimiento. El planificador cíclico invocará
estos procedimientos de forma que se verifiquen sus requisitos temporales.
La estructura del planificador cíclico es la siguiente:
cyclic_executive.adb
with Kernel.Serial Output;
use Kernel.Serial Output;
with Tareas;
with Ada.Real Time;
use Ada.Real Time.Time Span;
use type Ada.Real Time.Time;
procedure cyclic executive is
type Minor Cycle type is mod . . .;
Minor Cycle: Minor Cycle type := 0;
Minor Cycle Duration : constant Ada.Real Time.Time Span :=
Ada.Real Time.Milliseconds (. . .);
Next Time : Ada.Real Time.Time := Tareas.Time Zero + Minor Cycle Duration;
begin
loop
delay until Next time;
case Minor Cycle is
when 0 => Tareas.Tarea A;
Tareas.Tarea B;
. . .
when 1 => Tareas.Tarea A;
Tareas.Tarea C;
. . .
. . .
end case;
Minor Cycle := Minor Cycle + 1;
Next Time := Next time + Minor Cycle Duration;
if Ada.Real Time.Clock > Next Time then
Put Line ("Error de desbordamiento");
5
10
15
20
25
30
1.2. CODIFICACIÓNENADA
5
end if;
end loop;
end cyclic executive;
Las tareas se codificarán en un paquete llamado tareas cuya estructura es la siguiente:
tareas.ads
with Ada.Real Time;
package Tareas is
Time Zero : constant Ada.Real Time.Time := Ada.Real Time.Clock;
procedure Tarea A;
procedure Tarea B;
. . .
end Tareas;
tareas.adb
with Ada.Real Time;
use type Ada.Real Time.Time;
use type Ada.Real Time.Time Span;
with Kernel.Serial Output;
use Kernel.Serial Output;
package body Tareas is
procedure Tarea A is
. . .
begin
−− Obtener el número de segundos transcurridos desde el tiempo
−− inicial con Ada.Real Time.To Duration
Segundos Duration := Ada.Real Time.To Duration(
Ada.Real Time.Clock − Time Zero);
−− Calcular minutos y segundos
−− Se puede convertir los segundos que es un Duration a entero.
Segundos enteros := Integer (Segundos Duration);
. . .
−− Imprimir “Tarea A <minutos:segundos>”
Put("Tarea A ");
Put(Integer’Image(minutos));
Put(Integer’Image(segundos));
New line;
−− Consumir tiempo de cómputo
delay until Ada.Real Time.Clock +
Ada.Real Time.Milliseconds (tiempo de computo);
end Tarea A;
. . .
35
5
10
5
10
15
20
25
30
35
6
end Tareas;
CAPÍTULO1. PRÁCTICA1:PLANIFICACIÓNCÍCLICA
1.3. Plataforma de desarrollo
Una vez codificados el programa principal y el paquete tareas, para compilar, enlazar y
montar se utilizará el sistema de compilación GNAT/ORK (http://www.openravenscar.org).
Este sistema de compilación permite desarrollar software en Ada utilizando las re-
stricciones del perfil de Ravenscar en computadores i386 GNU/Linux y SPARC/Solaris.
El código generado se ejecuta en computadores basados en el ERC32, que es un proce-
sador resistente a la radiación desarrollado por la ESA (European Space Agency).
El sistema se encuentra instalado en batman en el directorio /usr/local/open-
ravenscar y, para poder utilizarlo, el directorio /usr/local/openravenscar/
bin debe de estar incluido en la variable de entorno PATH.
Por otra parte, como no se dispone de computadores reales se utilizará el simulador
TSIM (http://www.gaisler.com) que se encuentra instalado en mismo directorio de bat-
man.
Para compilar, enlazar y montar el programa cyclic_executive se puede utilizar
el siguiente Makefile, que se encuentra en batman en el directorio /usr/local/open-
ravenscar/apoyo/practica1/ada.
Makefile
#−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
#
#−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
EXAMPLES Makefile
# the Main procedure
MAIN = cyclic executive
# the gnatmake
GNATMAKE = sparc−ork−gnatmake
# Gnat1 compilation flags
GF = −g
# Do not use optimization for debugging
#GF = −O2
# Gnatbind flags
BF =
# Gnatlink flags
LF = −k −specs ork specs −mcpu=cypress
#−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
# Main rule
all :
$(MAIN).adb
$(GNATMAKE) $(MAIN) −cargs $(GF) −bargs $(BF) −largs $(LF)
clean : force
@/bin/rm −f *.o *.nm *.ali b˜*.* *.s *˜ $(MAIN) *.map
force :
5
10
15
20
25
30
1.3. PLATAFORMADEDESARROLLO
7
Si se ordena:
make
La salida mostrada, en caso de no haber errores, será:
sparc-ork-gnatmake cyclic_executive -cargs -g -bargs
-specs ork_specs -mcpu=cypress
sparc-ork-gcc -c -g cyclic_executive.adb
sparc-ork-gcc -c -g tareas.adb
sparc-ork-gnatbind -x cyclic_executive.ali
sparc-ork-gnatlink -k -specs ork_specs -mcpu=cypress
Comentarios de: Prácticas de Sistemas de Tiempo Real (0)
No hay comentarios