Tema 2.

Anuncio
Tema 2
Lenguajes de programación
PRIMERA PARTE
Características
Tareas
Comunicación de tareas
Objetos protegidos
Sentencia requeue
Maria Isabel Alfonso Galipienso. 2006
1
Indice
„ Características
„ Tareas
„ Comunicación de tareas
„ Objetos protegidos
„ Sentencia requeue
Maria Isabel Alfonso Galipienso. 2006
2
1
Lenguajes de programación
UN BUEN LENGUAJE DE
PROGRAMACIÓN ...
UN LENGUAJE DE
PROGRAMACIÓN MALO...
„ Nos ayuda a construir
„ Nos hace más difícil el
software que sea:
„
„
„
„
construir software que sea:
Fiable
Safe
Secure
Mantenible
„
„
„
„
Fiable
Safe
Secure
Mantenible
Es posible escribir buen
software con un mal lenguaje.
Requerirá ingenieros con más
experiencia. En cualquier caso,
se necesitará más tiempo y
será más COSTOSO que con la
utilización de un buen lenguaje.
Un buen lenguaje de
programación nos facilita
el trabajo. Pero no hace
el trabajo por nosotros.
Maria Isabel Alfonso Galipienso. 2006
3
Cuestiones a considerar
FACTORES HUMANOS QUE
AFECTAN LA PROGRAMACIÓN
„ Los humanos cometen
PROPIEDADES DE UN BUEN
LENGUAJE DE PROGRAMACIÓN
„ Hace que sea más difícil
errores
„ La gente se "mueve"
„ Los autores del código no
son los mismos que lo
mantienen
„ El software evoluciona
constantemente
Maria Isabel Alfonso Galipienso. 2006
„
„
„
„
escribir código incorrecto
Soporta abstracción
Facilita la escritura de
código legible
Soporta una organización
modular del software
Portabilidad
4
2
Un ejemplo (I)
„ ¿Podéis contestar en menos de 20 segundos cuál de
las dos rutinas siguientes realizan de forma correcta
lo siguiente?:
„
Devolver el contenido de n bits de una palabra de 32 bits
„
„
„
Desde el bit que ocupa la posición p
Hasta el bit que ocupa la posición p-n+1
El bit de posición 0 es el de la parte de la derecha
n bits
Bit
31
………
Bit
p
…………
Bit
p-n+1
………
Maria Isabel Alfonso Galipienso. 2006
Bit
0
5
Un ejemplo (II)
C
unsigned get_bits (unsigned x, int p, int n) {
return (x >> (p-n+1)) & ~(~0 << n);
}
Ada 95
function Get_Bits (X : Bit_Array; P : Bit; N : Offset) return Bit_Array is
begin
return X (P – N + 1 .. P);
end Get_Bits;
Maria Isabel Alfonso Galipienso. 2006
6
3
Objetivos de diseño de algunos
lenguajes de programación
„C
„
„
Portabilidad, lenguaje ensamblador de alto nivel
No contempla cuestiones sobre safety o security
„ C++
„ Lenguaje orientado a objetos compatible con C
„ No contempla cuestiones sobre safety o security
„ Java
„ Soluciona los problemas sobre insecurity de C++
(p.e. no podemos crear un virus con Java)
„ No contempla cuestiones sobre safety
Maria Isabel Alfonso Galipienso. 2006
7
El lenguaje Ada
„ Versión "industrial" de Pascal diseñado para desarrollar:
„
„
Software safe y secure
Software que necesita mantenerse
„ Muchos estándares sobre seguridad (safety) recomiendan el
uso de Ada para alcanzar niveles altos de integridad
„ Características de C++ adoptadas en Ada
„
„
Templates (Generics)
Excepciones
„ Características de Java adoptadas en Ada
„
„
Comprobación de índices en Arrays
Comprobación de división por cero
„ Agunos lenguajes derivados de Ada: Spark, VHDL, PL SQL
Maria Isabel Alfonso Galipienso. 2006
8
4
Algunas aplicaciones industriales en
Ada
„ Críticas para las empresas
„
„
„
„
Tecnologías Canal+ : Pago por visionado,
control de acceso
BNP: Lenguage comercial
Philips: Equipamiento de ensamblado de
semiconductores
Volvo: planta de producción
„ Críticas en cuanto a misiones
„
„
„
„
Astree: Señalización ferroviaria en el
ámbito Europeo
Weirton Steel - controlador de procesos
Mondex (dinero electrónico)
Scanning Electron ( microscopio)
„ Críticas en cuanto a safety
„
„
Airbus A340
Boeing 777
9
Maria Isabel Alfonso Galipienso. 2006
Ada y C/C++
Muchos expertos afirman que ningún sistema de seguridad
crítico se debería implementar nunca en C
Diseño e Implementación con Ada95
„ La falta de experiencia en el
Diseño (?) e Implementación con
C/C++
uso de Ada produce sistemas
con un pobre rendimiento
„ La falta de experiencia en el
uso de C/C++ produce errores
de código
Maria Isabel Alfonso Galipienso. 2006
10
5
Indice
„ Características
„ Tareas
„ Comunicación de tareas
„ Objetos protegidos
„ Sentencia requeue
Maria Isabel Alfonso Galipienso. 2006
11
¿Qué es una tarea?
„ Unidad de programa que se ejecuta concurrentemente
Sobre un procesador (un único thread de control)
Multi-programación (múltiples threads)
Multi-proceso (múltiples threads)
Entornos distribuidos
„ Siempre hace de Esclavo (Slave)
Debe tener un padre (master)
A veces es abortable
Puede ser abortada por QUALQUIERA (siempre que tenga
visibilidad)
Ya que debe tener un padre, nunca puede ser una unidad de
librería
Maria Isabel Alfonso Galipienso. 2006
12
6
Tareas en Ada
„ En un programa en Ada, el usuario puede definir un
número de procesos internos (task) para cada uno de
los cuales se define un hilo de ejecución
„ Ada permite comunicar y sincronizar tareas asumiendo
los modelos de memoria compartida y paso de
mensajes
„ Por cada programa Ada se crea un hilo de ejecución
(padre) y tantos procesos hijos como tareas se han
definido
13
Maria Isabel Alfonso Galipienso. 2006
Declaración de tareas
„ Usando tareas simples
declare
task RECURSOS ;
task body RECURSOS is
begin
loop
null;
end loop;
end RECURSOS ;
begin
...
end;
Maria Isabel Alfonso Galipienso. 2006
„ Usando tipos de tareas
task type RECURSOS ;
task body RECURSOS is
begin
loop
null;
end loop;
end RECURSOS ;
REC : RECURSOS;
CTO_REC : array (1..10) of
RECURSOS;
type USO_REC is access RECURSOS ;
RECURSO1: USO_REC ;
CTO_REC : array (1..10) of USO_REC;
14
7
Identificación de tareas
package Ada.Task_Identification is
type Task_Id is private;
Null_Task_Id : constant Task_Id;
function "=" (Left, Right: Task_Id) return Boolean;
function Image (T: Task_Id) return String;
function Current_Task return Task_Id;
procedure Abort_Task (T : in out Task_Id);
function Is_Terminated(T : Task_ID) return Boolean;
function Is_Callable (T : Task_ID) return Boolean;
private
... -- not specified by the language
end Ada.Task_Identification;
Image devuelve una cadena (string) que identifica a la tarea
Current_Task devuelve un valor que identifica a la tarea
15
Maria Isabel Alfonso Galipienso. 2006
Atributos de tareas
Task_Type’Callable;
- - is Task in a callable state.
- - Devuelve Boolean.
Task_Type’Terminated;
- - is Task Terminated.
- - Devuelve Boolean.
E’Count;
- - número de llamadas pendientes en una cola de un “entry”.
- - devuelve Unversal_Integer;
T’Identity;
- - Devuelve un valor de Task_ID
- - Permitido solo dentro del cuerpo de un entry
- - o una sentencia accept.
Maria Isabel Alfonso Galipienso. 2006
16
8
Ejecución de tareas
„ La ejecución de una tarea se lleva a cabo en un
proceso de dos fases:
ACTIVACIÓN: Consiste en la elaboración de las
declaraciones del cuerpo de la tarea.
EJECUCIÓN: consistente en la ejecución de las sentencias de
la tarea.
EJEMPLO
declare
A: T;
B: T;
begin
...
end;
padre
declare
begin
end
tarea A
declarada activación
ejecución
tarea B
declarada activación
ejecución
Maria Isabel Alfonso Galipienso. 2006
17
Activación/terminación de tareas
ACTIVACIÓN
Tareas estáticas
Tareas dinámicas
„ Dependen del bloque,
„ No dependen de la unidad donde se
subprograma o cuerpo de tarea
crean, sino de la unidad donde se
donde se definan
declara el tipo puntero
„ Se activan justo antes de empezar „ Se activan al ejecutarse el operador
la ejecución de la unidad
new
„ No puede terminar hasta que
„ Pueden seguir existiendo aunque
terminen todas las tareas que
termine la unidad progenitora
dependen de ella
TERMINACIÓN
Termina la ejecución del cuerpo
Se pone de acuerdo con otras tareas para
terminar conjuntamente
n Es abortada por otra tarea.
n
n
Maria Isabel Alfonso Galipienso. 2006
18
9
Ejemplos
„ Tareas y paquetes
package P is
...
end P;
package body P is
task A;
task body A is
...
end A;
begin -- A comienza aquí
-- Sentencia inicial de P
end P;
-- El programa no termina hasta
-- que no haya terminado A
„ Tareas y procedimientos
procedure example is
task A; -- especificación
task B;
task body A is --cuerpo
...
begin
...
end A;
task body B is --cuerpo
...
begin
...
end B;
begin -- A y B comienzan aquí
-- Las instrucciones de example
-- se ejecutan junto con A y B
end example; -- espera a A y B
19
Maria Isabel Alfonso Galipienso. 2006
Ejemplos
„ Tareas dinámicas
procedure example is
task type T;
type A is access T;
P: A;
Q: A := new T; -- Se crea Q.all
- - que se ejecuta inmediatamente
task body T is ...
„ Tutor de una tarea dinámica
declare
task type T;
type A is access T;
begin
...
declare --bloque interior
X: T; - - el tutor de X es el
-- bloque interior
begin
...
P:= new T; -- Se crea P.all
Q:= new T; -- Se otra Q.all
-- La primera tarea sigue
-- ejecutándose, pero es anónima
...
end example;
Maria Isabel Alfonso Galipienso. 2006
Y: A := new T; - - el tutor de Y es
-- el bloque exterior
begin -- X comienza aquí
...
end; -- espera a que termine X
... -- Y.all es anónima aquí
end ; -- espera a que termine Y.all
20
10
Indice
„ Características
„ Tareas
„ Comunicación de tareas
„ Objetos protegidos
„ Sentencia requeue
21
Maria Isabel Alfonso Galipienso. 2006
Comunicación de tareas
„ Memoria compartida
T1
T3
T2
T4
Objetos protegidos
„ Mensajes
T1
T3
T2
T4
Maria Isabel Alfonso Galipienso. 2006
Cita extendida
22
11
Indice
„ Características
„ Tareas
„ Comunicación de tareas
„ Objetos protegidos
„ Sentencia requeue
23
Maria Isabel Alfonso Galipienso. 2006
Objetos protegidos (I)
„ Proporcionan un mecanismo de
sincronización entre procesos
„ Permiten controlar el acceso a datos
compartidos entre múltiples procesos
„ Tienen 3 tipos de operaciones:
„
„
„
funciones protegidas,
procedimientos protegidos, y
entradas (entry).
Objeto protegido
procedure
datos
function
entry
Maria Isabel Alfonso Galipienso. 2006
24
12
Objetos protegidos (II)
„ Los procedimientos protegidos proporcionan
acceso mutuamente exclusivo de lectura-escritura
a los datos de un objeto protegido.
„ Las funciones protegidas proporcionan acceso
concurrente a los datos de sólo lectura.
„ Los entry protegidos también proporcionan acceso
exclusivo a los datos de lectura-escritura.
„ Los entry protegidos tienen una barrera específica
(expresión booleana). Dicha barrera debe ser
cierta antes de la llamada a entry para poder
acceder a los datos.
Maria Isabel Alfonso Galipienso. 2006
25
Tipos protegidos. Ejemplo (I)
package Mailbox_Pkg is
type Parcels_Count is range 0 .. Mbox_Size;
type Parcels_Index is range 1 .. Mbox_Size;
type Parcels_Array is array ( Parcel_Index ) of Parcels
protected type Mailbox is
entry Send (Item : Parcels); -- almacena un elemento
entry Receive (Item : out Parcels); -- recupera un elemento
procedure Clear;
function Number_In_Box return Integer;
private
Count
: Parcels_count := 0;
Out_Index : Parcels_Index := 1;
In_Index : Parcels_Index := 1;
Data
: Parcels_Array ;
end Mailbox;
end Mailbox_Pkg;
Maria Isabel Alfonso Galipienso. 2006
26
13
Tipos protegidos. Ejemplo (II)
package body Mailbox_Pkg is
protected body Mailbox is
entry Send ( Item : Parcels) when Count < Mbox_Size is
-- bloquea hasta que haya espacio
begin
Data ( In_Index ) := Item;
In_Index := In_Index mod Mbox_size + 1;
Count := Count + 1;
end Send;
entry Receive ( Item : out Parcels ) when Count > 0 is
-- bloquea hasta que hayan elementos
begin
Item := Data( Out_Index );
Out_Index := Out_Index mod Mbox_Size + 1;
Count := Count -1;
end Receive;
27
Maria Isabel Alfonso Galipienso. 2006
Tipos protegidos. Ejemplo (III)
procedure Clear is
begin
Count := 0;
Out_Index := 1;
In_Index := 1;
end Clear;
--sólo un usuario cada vez
function Number_In_Box return Integer is
-- varios usuarios pueden acceder a la vez
begin
return Count;
end Number_In_Box;
end Mailbox;
end Mailbox_Pkg;
Maria Isabel Alfonso Galipienso. 2006
28
14
Tipos protegidos. “Broadcast” (I)
Supongamos que una tarea tiene que comunicar un
mensaje a un cierto número de tareas que están
esperando. Todas las tareas estarán en espera en la
“entrada” correspondiente, que estará "abierta" sólo
cuando llegue un nuevo mensaje.
protected type Broadcast is
entry Receive (M : out Message); -- recupera un mensaje
entry Send (M : Message); -- envía un mensaje
private
New_message: Message;
Message_arrived: Boolean := False;
end Broadcast;
Maria Isabel Alfonso Galipienso. 2006
29
Tipos protegidos. “Broadcast” (II)
protected body Broadcast is
entry Receive (M : out Message) when Message_Arrived is
begin
M:= New_Message;
if Receive’Count = 0 then
Message_Arrived := False;
end if;
end Receive;
entry Send (M : Message) is
begin
if Receive’Count > 0 then
Message_Arrived := True;
New_Message:= M;
end if;
end Send;
end Broadcast;
Maria Isabel Alfonso Galipienso. 2006
30
15
Indice
„ Características
„ Tareas
„ Comunicación de tareas
„ Objetos protegidos
„ Sentencia requeue
Maria Isabel Alfonso Galipienso. 2006
31
Sentencia requeue (I)
requeue Entry_Name [with abort];
„ Requeue permite que
una llamada a un entry
se sitúe al final de la cola
para procesarla más
tarde.
„ Sin la opción abort, la
entrada “reencolada” es
protegida frente a una
posible cancelación.
Maria Isabel Alfonso Galipienso. 2006
32
16
Sentencia requeue (II)
„ Una llamada a requeue puede darse entre llamadas
a entry de tareas y de objetos protegidos.
„ Se puede dar una llamada a requeue:
„ dentro del mismo entry,
„ a otro entry en la misma unidad
„ a otra unidad
„ Ejemplos de uso de requeue:
„ Problema de control de recursos
„ Implementación de "eventos"
Maria Isabel Alfonso Galipienso. 2006
33
Control de recursos (I)
type Request_Range is range 1..Max;
protected Resource_Controller is
entry Request(R: out resource; Amount: Request_Range);
procedure Free (R: Resource; Amount: Request_Range);
private
entry Assign(R: out Resource; Amount: Request_Range);
Freed: Request_Range:= Request_Range'Last;
New_Resources_Released: Boolean:= False;
To_Try: Natural:= 0;
,,,
end Resource_Controller;
Maria Isabel Alfonso Galipienso. 2006
34
17
Control de recursos (II)
protected body Resource_Controller is
entry Request(R: out resource; Amount: Request_Range)
when Freed > 0 is
begin
if Amount <= Freed then
Freed:= Freed - Amount;
- - Allocate;
else
requeue Assign;
end if;
end Request;
...
Maria Isabel Alfonso Galipienso. 2006
35
Control de recursos (III)
...
entry Assign(R: out resource; Amount: Request_Range)
when New_Resources_Released is
begin
To_Try:= To_Try - 1;
if To_Try = 0 then
New_Resources_Released:= False;
end if;
if Amount <= Freed then
Freed:= Freed - Amount;
-- allocate
else
requeue Assign;
end if;
end Assign;
...
Maria Isabel Alfonso Galipienso. 2006
36
18
Control de recursos (IV)
...
procedure Free(R: Resource; Amount: Request_Range) is
begin
Freed:= Freed + Amount;
-- free resources
if Assign'Count > 0 then
To_Try:= Assign'Count;
New_Resources_Released:= True;
end if;
end Free;
end Resource_Controller;
37
Maria Isabel Alfonso Galipienso. 2006
Sentencia requeue. Eventos
protected Event is
entry Wait;
entry Signal;
private
entry Reset;
Occurred : Boolean :=
False;
end Event;
Maria Isabel Alfonso Galipienso. 2006
protected body Event is
entry Wait when Occurred is
begin
null;
-- cuerpo vacío
end Wait;
entry Signal when True is
-- barrera es cierta siempre
begin
if Wait’Count > 0 then
Occurred := True;
requeue Reset;
end if;
end Signal;
entry Reset when Wait’Count =
0 is
begin
Occurred := False;
end Reset;
end Event;
38
19
Ejemplo: Metro circular
„ Se intenta simular el comportamiento del recorrido circular de un
metro.
„ El metro realiza paradas en las estaciones. Cada estación es un
OBJETO PROTEGIDO.
esperan para
bajar
esperan para subir
Estación
Estación
Tren
Estación
Estación
Estación
Estación
esperan para subir
espera para bajar
Maria Isabel Alfonso Galipienso. 2006
39
Estación i
Estación
entry arrive (destino: estación)
when Trainboarding and
On_Train < Capacity
procedure Stopping (P: pasajeros)
entry Alight (destino: estación)
when Trainstopped
procedure Boarding
procedure Closedoors (P: pasajeros)
On_Train: Passengers
Trainboarding: Boolean
Trainstopped: Boolean
Maria Isabel Alfonso Galipienso. 2006
40
20
Metro
„ Tarea que realiza las siguientes acciones:
loop
for S in Station_Address loop
Stations(S).Stopping(Volume);
Stations(S).Boarding;
Stations(S).Closedoors(Volume);
delay Travel_Times(S);
end loop;
end loop;
Maria Isabel Alfonso Galipienso. 2006
41
Stopping (p)
„ Procedimiento protegido:
On_Train:= P;
Trainstopped:= True;
„ Cuando Trainstopped sea cierto, los
pasajeros que estaban esperando a llegar a
esa estación, podrán bajar (estarán
encolados en Alight).
Maria Isabel Alfonso Galipienso. 2006
42
21
Boarding
„ Procedimiento protegido:
Trainstopped:= False;
Trainboarding:= True;
„ Cuando Trainstopped sea falso, ya no podrá
bajar ningún pasajero.
„ Cuando Trainboarding sea cierto, los
pasajeros que esperan en esa estación podrán
subir si quedan plazas (on_train < capacity).
Maria Isabel Alfonso Galipienso. 2006
43
Closedoors (p)
„ Procedimiento protegido:
P:= On_train;
Trainboarding:= False;
„ Cuando Trainboarding sea falso, ya no podrán
subir más pasajeros a bordo.
„ Se devuelve el número de pasajeros que lleva
el tren (On_train)
Maria Isabel Alfonso Galipienso. 2006
44
22
Pasajero
„ Tarea que realiza las siguientes acciones:
-- elegir origen y destino
Stations(origen).Arrive(destino);
Maria Isabel Alfonso Galipienso. 2006
45
Arrive (d)
„ Entry protegido:
barrera:
when Trainboarding and on_train < capacity
On_train:= On_train + 1;
requeue Stations(d).Alight;
„ El pasajero sube al metro, cuando el metro llegue a la
estación (Trainboarding) y haya plazas libres (on_train
< capacity), y después
„ Se queda esperando para bajar en la estación d
(requeue Stations(d).Alight).
Maria Isabel Alfonso Galipienso. 2006
46
23
Alight (d)
„ Entry protegido:
barrera: when Trainstopped
On_train:= On_train - 1;
„ El pasajero baja en la estación
correspondiente cuando el metro esté "parado"
(trainstopped).
Maria Isabel Alfonso Galipienso. 2006
47
24
Descargar