Академический Документы
Профессиональный Документы
Культура Документы
Tema 1, Introducción.
Cualquier actividad o sistema de proceso de información que tiene que responder a un estímulo de
entrada generado externamente en un periodo finito y especificado. En informática cuando hablamos
de tiempo real significa que la salida del programa está acotada.
La corrección de un STR no depende solo del resultado lógico sino también del tiempo en el que se
producen los resultados (La cota temporal no debe ser necesariamente corta). Failure to respond is as
bad as the wrong response
STR estrictos (hard). systems where it is absolutely imperative that responses occur within the
required deadline. Control de vuelo.
STR no estrictos (soft). systems where deadlines are important but which will still function correctly
if deadlines are occasionally missed. Sistema de adquisición de datos.
STR firme (firm real-time). Sistemas no estrictos, el tiempo límite puede no cumplirse
ocasionalmente, en los cuales no hay beneficio por entregar tarde un servicio. Una respuesta tardía
no tiene valor ninguno. Sistema video conferencia.
A single system may have hard, soft and firm real-time subsystems. In reality many systems will have
a cost function associated with missing each deadline
• Time-aware — system makes explicit reference to time (eg. open vault door at 9.00)
• Reactive — system must produce output within deadline (as measured from input)
• Time-triggered — computation is triggered by the passage of time (cada 25 ms).
• Event-trigger — computation is triggered by an external or internal event
1
Culex. Sistemas Tiempo Real (2017- 2018)
El papel del computador en sistema más grandes hace que se les conozca como sistemas embebidos.
Son sistemas de propósito específico con un limitado número de instrucciones.
Características STR.
Fases de diseño:
1. Especificación de requisitos. Define la funcionalidad del Sistema. Comportamiento
temporal, en caso de fallos, requisitos de fiabilidad. Se usan estrategias como la
Descomposición: partición en partes más pequeñas y la Abstracción: proporciona una
visión simplificada del Sistema obviando los detalles.
2. Diseño de la arquitectura.
3. Diseño detallado.
4. Implementación.
2
Culex. Sistemas Tiempo Real (2017- 2018)
5. Prueba y validación. Pruebas exigentes.
3
Culex. Sistemas Tiempo Real (2017- 2018)
Tema 2, Fiabilidad y tolerancia a fallos.
Uno de los principales requisitos, por lo tanto, para cualquier lenguaje de programación de tiempo
real es que debe facilitar la construcción de sistemas altamente fiables.
The reliability (fiabilidad) of a system is a measure of the success with which it conforms to an
authoritative specification of its behaviour. When the behaviour of a system deviates from that which
is specified for it, this is called a failure (fallo). Failures result from unexpected problems internal
to the system that eventually manifest themselves in the system's external behaviour. These problems
are called errors and their mechanical or algorithmic cause are termed faults (defectos).
Systems are composed of components which are themselves systems so: > failure -> fault -> error
-> failure -> fault
SOFTWARE FAULTS
Called Bugs; Heisenbugs (a heisenbug is a software bug that seems to disappear or alter its behavior
when one attempts to study it): only active under rare conditions. Bohrbugs (A bohrbug, by
opposition, is a "good, solid bug. they do not change their behavior and are relatively easily detected):
reproducible identifiable.
Software doesn’t deteriorate with age: it is either correct or incorrect but faults can remain dormant
for long periods
Usually related to resource usage; e.g. memory leaks
4
Culex. Sistemas Tiempo Real (2017- 2018)
5.2 Modos de fallo.
Both approaches attempt to produces systems which have well-defined failure modes
Fault prevention, attempts to eliminate any possibility of faults creeping into a system before it goes
operational.
Fault avoidance(evitacion). Fault avoidance attempts to limit the introduction of faults
during system construction; e.g. componentes hardware de calidad.
Fault removal(eliminación): procedures for finding and removing the causes of errors;
Fault tolerance, enables a system to continue functioning even in the presence of faults.
System testing can never be exhaustive and remove all potential faults. A test can only be used to
show the presence of faults, not their absence. It is sometimes impossible to test under realistic
conditions. Most tests are done with the system in simulation mode and it is difficult to guarantee that
the simulation is accurate. Requirements errors during the system's development may not manifest
themselves until the system goes operational.
Design errors (hardware and software) will exist. In spite of all the testing and verification techniques,
hardware components will fail; the fault prevention approach will therefore be unsuccessful when:
either the frequency or duration of repair times are unacceptable, or the system is inaccessible for
maintenance and repair activities (An extreme example of the latter is the crewless spacecraft
Voyager, currently at 11 billion miles from the sun!).
SO, THE ALTERNATIVE IS FAULT TOLERANCE.
5
Culex. Sistemas Tiempo Real (2017- 2018)
• Full Fault Tolerance: the system continues to operate in the presence of faults, just for a limited
period, with no significant loss of functionality or performance.
• Graceful Degradation (Degradacion controlada. Fail soft): the system continues to operate in the
presence of errors, accepting a partial degradation of functionality or performance during recovery or
repair.
• Fail Safe: the system maintains its integrity while accepting a temporary halt in its operation.
All fault-tolerant techniques rely on extra elements introduced into the system to detect & recover
from faults. The aim is minimising redundancy while maximising reliability.
Warning: the added components inevitably increase the complexity of the overall system. This itself
can lead to less reliable systems; e.g. first launch of the space shuttle (El lanzamiento fue abortado
debido a un problema de sincronización de los computadores replicados).
It is advisable to separate out the fault-tolerant components from the rest of the system.
HARDWARE FAULT TOLERANCE
Two types: static (or masking) and dynamic redundancy.
Static: redundant components are used inside a system to hide the effects of faults; e.g.
Triple Modular Redundancy (TMR).
TripleModularRedundancy — 3 identical subcomponents and majority voting
circuits; the outputs are compared and if one differs from the other two, that output is
masked out. It assumes the fault is not common (such as a design error) but is either
transient or due to component deterioration.
To mask faults from more than one component requires NmodularRedundancy.
Dynamic: redundancy supplied inside a component which indicates that the output is in
error; provides an error detection facility; recovery must be provided by another
component; e.g. communications checksums (códigos de redundancia cíclica) and
memory parity bite
6
Culex. Sistemas Tiempo Real (2017- 2018)
The results (VOTES) should be identical, if different the consensus result, assuming there is one,
is taken to be correct.
En la programación de N-versiones resulta crucial la eficiencia y la facilidad con la que el programa
director compara los votos y decide cuándo existe un desacuerdo. Desafortunadamente, no todos los
resultados son de una naturaleza exacta. En concreto, en aquellos votos que requieren cálculos con
números reales, será difícil que diferentes versiones produzcan exactamente el mismo resultado.
Las técnicas utilizadas en la comparación de estos tipos de resultados se denominan votación inexacta.
Otra dificultad asociada a la aritmética de precisión finita es el llamado problema de la comparación
consistente. Este problema se da cuando una aplicación tiene que realizar una comparación basada
en un valor finito dado en la especificación ya que al acercarnos al valor umbral una pequeña
variación puede modificar el resultado de la comparación determinando entonces el curso de la
acción.
N-version programing depens on: initial specification (the majority of software faults comes from
inadequate specification), independence of design (diferentes programadores y lenguajes) and
adequate budget.
ALTERNATIVE TO STATIC REDUNDANCY IS DINAMIC REDUNDANCY: It has four phases.
• Error detection (en el entorno o en la propia aplicación).
Hardware; e.g. illegal instruction, desbordamiento.
O.S/RTS; e.g. null pointer, valor fuera de rango.
Coding checks (redundant data, e.g. checksums).
Timing checks (e.g. temporizador guardián como el pedal del hombre muerto en los trenes).
Reasonableness checks (e.g. assertion).
Structural checks (e.g. redundant pointers in linked list).
• Damage confinement and assessment; To what extent has the system been corrupted? (the delay
between a fault occurring and the detection of the error means erroneous information could have
spread throughout the system).
7
Culex. Sistemas Tiempo Real (2017- 2018)
Damage confinement is concerned with structuring the system to minimise the damage
caused by a faulty component (also known as firewalling). Modular decomposition
provides static damage confinement; allows data to flow through well-define pathways.
Atomic actions provide dynamic damage confinement; they are used to move the system
from one consistent state to another.
• Error recovery; Techniques should aim to transform the corrupted system into a state from which it
can continue its normal operation.
Forward error recovery continues from an erroneous state by making selective corrections
to the system state; e.g. Redundant pointers in data structures and the use of self-
correcting codes such as Hamming Codes.
Backward error recovery, restoring the system to a previous safe state (checkpoint) and
executing an alternative section of the program. Advantage: the erroneous state is cleared
and it does not rely on finding the location or cause of the fault. Disadvantage: it cannot
undo errors in the environment!
La restauración no resulta tan simple como se ha descrito cuando se trata de procesos concurrentes
que interacciona entre sí.
• Fault treatment and continued service - an error is a symptom of a fault; although the damage is
repaired, the fault may still exist. So, the error may happen again; the final phase of Fault Treatment
is to eradicate the fault from the system.
8
Culex. Sistemas Tiempo Real (2017- 2018)
RECOVERY BLOCK SYNTAX
10
Culex. Sistemas Tiempo Real (2017- 2018)
Diapos resumen 1 y 2 del capítulo 2
11
Culex. Sistemas Tiempo Real (2017- 2018)
Una excepción se puede detectar desde;
• El entorno (ArrayIndexOutOfBoundsException, ArithmeticException).
• La aplicación (Error en comprobación de aserción).
Pueden ser; Síncronas, se producen inmediatamente como resultado de un código que intenta una
operación inapropiada o Asíncronas, aparecen algún tiempo después de la operación que provoca el
error. Las excepciones asíncronas suelen recibir el nombre de señales y se suelen emplear en
programación concurrente.
Según el lenguaje de programación se pueden declarar de forma diversa. En Ada se definen como
constantes, que deben ser declaradas explícitamente. En Java/C++ son objetos de un tipo particular y
que pueden o no haber sido declarados explícitamente
declare
begin
exception
end ;
En Java no todos los bloques pueden tener manejador de excepciones, hay que definir explícitamente
el bloque en el que se podrá lanzar una excepción.
try {
} catch ( ExceptionType e) {
// handler for e
12
Culex. Sistemas Tiempo Real (2017- 2018)
¿Qué ocurre si no hay manejador?
Considerarlo un error del programador y notificarlo en tiempo de compilación. a veces
una excepción solo puede ser manejada en el contexto en que el procedimiento fue
invocado, eg. excepción como resultado de una aserción que involucra a los parámetros.
Propagar la excepción, una excepción no atrapada provocara la terminación de un
programa secuencial. Si hay más de un proceso, normalmente se aborta el proceso en el que
aparece la excepción no manejada (no está claro si la excepción debe propagarse al proceso
padre).
13
Culex. Sistemas Tiempo Real (2017- 2018)
6. 3 Manejo de Excepciones (para procesos secuenciales).
ADA: declaración explicita de excepciones, modelo de terminación, propagación de
excepciones y un paso de parámetros limitado (solo permite cadenas de texto). Se declara con
la palabra clave exception ó con el paquete predefinido Ada.Exceptions, que define un tipo
privado Exception Id. Todas las excepciones declaradas con exception tienen asociado un
Exception Id, que se puede acceder con el atributo predefinido Identity.
Una excepción generada en un manejador de excepción no puede ser manejada por ése u otros
manejadores del mismo bloque (o procedimiento). En lugar de esto, se termina el bloque y se
busca un manejador en el bloque exterior o en el punto de llamada de un subprograma
Cada método debe definir una lista de excepciones throwable que puede lanzar. Deben ser
subclases de Exception. El método puede lanzar estas excepciones y las tipo unchecked. Si
un método intenta arrojar una excepción que no se ha declarado, aparece un error de
compilación.
Un bloque catch(Exception E) se puede considerar equivalente a la sentencia when others de
Ada.
Podemos usar finally como parte de una sentencia try. El código se ejecuta, en cualquier caso,
exista excepción o no.
public class ErrorRestriccionEntero extends Exception
……………
public void ponValor(int V) throws ErrorRestriccionEntero, OtroError
{
…………;
}
…………….
void comprueba (int valor) throws ErrorRestriccionEntero
{
if valor > 100 || valor < 0 ) {
throw new ErrorRestriccionEntero(0, 100, valor);
};
}
Aquí throw new ErrorRestriccionEntero (0, 100, valor) crea y lanza un objeto del tipo
(ErrorRestriccionEntero) con los valores adecuados de sus variables de instancia.
15
Culex. Sistemas Tiempo Real (2017- 2018)
En el lenguaje C no hay definido mecanismo alguno de manejo de excepciones.
Para implementar en C un modelo de terminación, es preciso guardar el estatus de los registros
del programa y demás información a la entrada del dominio de una excepción, para
restaurarlos si acaece una excepción. Tradicionalmente se ha asociado C con UNIX, de modo
que para este fin se pueden utilizar las primitivas de POSIX setjmp y longjmp. La rutina setjmp
almacena el estatus del programa y devuelve un 0; la rutina longjmp restaura el estatus del
programa y provoca que el programa abandone su ejecución actual reiniciándose desde la
posición donde se invocó setjmp.
16
Culex. Sistemas Tiempo Real (2017- 2018)
C++ es similar a Java, excepto en que no requiere una declaración explícita de excepciones.
Más bien, puede lanzarse como excepción cualquier instancia de una clase. No existen
excepciones predefinidas.
17
Culex. Sistemas Tiempo Real (2017- 2018)
Una fibra (In computer science, a fiber is a particularly lightweight thread of execution), es
invisible al SO. Se implementa a nivel de aplicación.
Un objeto (paradigma O.O.) es Activo, ejecuta acciones espontaneas | Reactivo, es invocado por otros
objetos
Cuatro tipos de entidades:
Pasiva, reactivo sin restricciones de sincronización. Necesita un hilo de control externo.
Recurso Protegido, reactivo con restricciones de sincronización.
Activa, con una hebra interna explícita o implícita.
Servidor, activo con restricciones de sincronización compartido por varios hilos.
Mecanismos básicos para representar la ejecución concurrente
fork/join. La instrucción fork (bifurca) especifica que una rutina deberá ejecutarse
concurrentemente con el invocador. La instrucción join (reúne) hace que el invocador espere
a la finalización de la rutina invocada.
18
Culex. Sistemas Tiempo Real (2017- 2018)
Concurrencia en ADA
La unidad de concurrencia es la tarea (task). Las tareas deben ser declaradas explícitamente. Las
tareas se crean implícitamente en el momento en que se entra en su ámbito de visibilidad.
Una tarea puede terminar de varias formas; Si completa la ejecución de su código, Si ejecuta
terminate, si es abortada (todas las dependientes también).
Concurrencia en Java.
Creación de hilos mediante la clase java.lang.Thread. También se define una interfaz estándar
runnable (Cualquier clase que desee expresar una ejecución concurrente debe implementar esta
interfaz y proporcionar el método run)
21
Culex. Sistemas Tiempo Real (2017- 2018)
La inclusión de tareas en un lenguaje de tiempo real incrementa el poder expresivo y facilidad de uso
del lenguaje. Sin concurrencia, el software debe construirse como un único bucle de control. La
estructura del bucle no puede reflejar la distinción lógica entre componentes del sistema
Dificultades en la espera activa; Los protocolos son difíciles de entender, programar y demostrar su
corrección, Las pruebas no examinan todas las posibles secuencias de ejecución, es posible que
existan secuencias que lleven a una violación de la exclusión mutua o bien a un bloqueo activo
(livelock – condición de error donde una o más tareas no puede progresar, pero hacen uso del
procesador. Por el contrario, un deadlock las tareas no puede progresar, pero están suspendidas y no
hacen uso del procesador), los bucles de espera activa son ineficientes y por último, una tarea que
hace un mal uso de las variables compartidas puede corromper todo el sistema.
22
Culex. Sistemas Tiempo Real (2017- 2018)
8.3 Suspender y reanudar.
Para evitar ineficiencia de la espera activa se puede Suspender la tarea cuando la condición no se
cumple. Esto evita la ineficiencia de los bucles de espera, pero pueden encontrase problemas por
condiciones de carrera. Hay varias soluciones para resolver este problema de condición de carrera,
todas ellas ofrecen cierta forma de operación de suspensión en dos etapas. Esencialmente, P1 debe
anunciar que planea suspenderse próximamente. Cualquier operación de reanudación que encuentre
con que P1 no está suspendido verá aplazado su efecto, y cuando Pl se suspenda, será reiniciado
inmediatamente.
Java proporciona suspend y resume y Ada proporciona el concepto de objeto de suspensión.
8.4 Semáforos.
Mecanismo simple para programar la exclusión mutua y sincronización de condición. Simplifican los
protocolos de sincronización y eliminan necesidad de espera activa.
Se basan en el uso de una variable entera no negativa, solo modificada en la inicialización mediante
wait(S) o signal(S).
wait(S): si S>0, decrementa S. Si no, pospone la tarea.
signal(S): incrementa S.
Si wait(s) pospone la tarea, el RTSS eliminará la tarea de la cola de ejecución y la insertará en una
cola de espera, Cuando se señalice el semáforo signal(s), una de las tareas en espera se hace ejecutable
(FIFO).
El semáforo es una primitiva de sincronización de bajo nivel simple y elegante, No obstante, un
programa construido solo con semáforos es propenso a errores.
23
Culex. Sistemas Tiempo Real (2017- 2018)
8.6 Monitores.
El problema principal con las regiones condicionales es que pueden estar dispersas a lo largo de todo
el programa. Los monitores están pensados para atenuar este problema proporcionando regiones de
control más estructuradas. Las regiones críticas consideradas se escriben como procedimientos, y
están encapsuladas en un único módulo, llamado monitor. Como módulo, se ocultan todas las
variables que deben ser accedidas bajo la exclusión mutua. Adicionalmente, todas las llamadas a
procedimientos del módulo tienen garantizada su ejecución con exclusión mutua.
Con la definición dada, wait y signal son incompletas ya que permiten dos tareas en ejecución dentro
del monitor. Esto ocurre cuando una tarea señaliza a otra que estaba bloqueada. Soluciones:
Signal se permite solo como la última acción.
Una operacion signal provoca la ejecución de una sentencia return.
Una señal que libera a otra tarea se bloquea a si misma.
La tarea liberada debe competir por el acceso al monitor cuando la que ha señalizado
termina.
Las críticas a los monitores se centran en el uso de las variables de condición. Sustituyendo esta
aproximación a la sincronización por el uso de guardas. se obtiene una abstracción más estructurada.
Esta forma de monitor se denominará objeto protegido (Ada).
Métodos sincronizados en Java.
En muchos aspectos, los objetos protegidos de Ada son como objetos en un lenguaje de programación
orientado a objetos basado en clases. Java, que tiene la concurrencia totalmente integrada,
proporciona un mecanismo en el que los monitores pueden ser implementados en el contexto de clases
y objetos.
El modificador del método synchronized y la sincronización de bloque.
Cuando un método se etiqueta con el modificador synchronized, el acceso al método sólo se puede
realizar una vez que se ha obtenido el bloqueo asociado con el objeto. Así pues, para obtener
exclusión mutua total, cada método tiene que ser etiquetado como synchronized.
24
Culex. Sistemas Tiempo Real (2017- 2018)
Un bloque puede marcarse como synchronized. Recibe como parámetro el objeto sobre el que se
obtiene el bloqueo. Esta práctica puede reducir la ventajas de la encapsulación.
Aunque los métodos o bloqueos sincronizados permiten el acceso mutuamente excluyente a los datos
en un objeto, esto no es adecuado si el dato es estático. Los datos estáticos son datos compartidos
entre todos los objetos creados a partir de una clase. Para obtener acceso mutuamente excluyente,
estos datos requieren que todos los objetos estén bloqueados.
La sincronización condicional requiere soporte adicional. Tenemos los métodos de la clase Object.
wait provoca la suspensión de la tarea y libera bloqueos asociados al objeto.
notify despierta un hilo en espera.
notifyAll despierta todos los hilos en espera.
Si se invoca un método sin bloqueo, se genera una excepción de tipo IllegalMonitorStateException.
Tanto notify como notifyAll no liberan el bloqueo, por lo que los hilos que se despiertan deben
competir por el acceso. Una diferencia importante con otros lenguajes es que no hay variables de
condición explicitas.
A modo de resumen, las diferentes primitivas de sincronizacion son:
Los semáforos.
Regiones criticas condicionales.
Monitores.
25
Culex. Sistemas Tiempo Real (2017- 2018)
Mutex (Semáforos binarios).
Objetos protegidos.
Métodos sincronizados.
Concurrencia en Java la proporciona una abstracción de monitor mediante los métodos y sentencias
synchronized. Concurrencia en Ada objetos protegidos proporcionan exclusión mutua y
sincronización de alto nivel con barreras (expresiones booleanas).
Ambas tareas deben estar preparadas para la comunicación. Si una está preparada y la otra no, la que
está preparada esperará a la otra. Cuando estén las dos listas, los parámetros de la tarea cliente serán
pasados a la tarea servidor. El servidor ejecuta el código de dentro del accept. Al final del accept, los
resultados son devueltos al cliente y ambas tareas continúan independientemente.
Sistemas distribuidos
Son necesarios procesos de comunicación entre procesadores heterogéneos cuyos mecanismos
permitan que la traducción de datos y partición en paquetes sea transparente a los procesos, los
mensajes recibidos se encuentren en buenas condiciones y sean del tipo esperado y que no haya
restricciones para la comunicación en relación a los tipos de datos.
28
Culex. Sistemas Tiempo Real (2017- 2018)
Estándares de comunicación en SiDi: Application programming interface, remote procedure call y,
finalmente, Objetos distribuidos.
Las llamadas a procedimientos remotos son una extensión que permite a un proceso ejecutar código
que reside en más de una máquina.
En el modelo de objetos distribuidos, se busca extender el concepto RPC para su uso en un modelo
de computación distribuida orientado a objetos.
Ada permite la reserva estática de objetos, la identificación de objetos remotos Ada y la ejecución
distribuida de métodos remotos (Remote_Call_Interface).
Java permite enviar el código de un objeto y la creación remota de instancias, así como la invocación
remota y distribuida (Java.rmi).
29
Culex. Sistemas Tiempo Real (2017- 2018)
Independent tasks do not communicate or synchronize with each other. Consequently, if an error
occurs within one task, then recovery procedures can be initiated by that task in isolation from the
rest of the system. Recovery blocks and exception handling can be used as described in Chapters 2
and 3. Cooperating tasks, by comparison, regularly communicate and synchronize their activities in
order to perform some common operation. if any error condition occurs, it is necessary for all tasks
involved to perform error recovery. The programming of such error recovery is the topic of this
chapter. Competing tasks communicate and synchronize in order to obtain resources; they are,
however, essentially, independent. An error in one should have no effect on the others. Unfortunately,
this is not always the case, particularly if the error occurred while a task was in the act of being
allocated a resource. Reliable resource allocation is considered in Chapter 8. Where cooperating tasks
communicate and synchronize through shared resources, recovery may involve the resource itself.
This aspect of resource allocation will also be considered in Chapter 8.
La interacción entre dos tareas no siempre implica una sola comunicación, en ocasiones será necesaria
la interacción de dos o más tareas, por lo tanto, las tareas involucradas deben ver un estado del sistema
coherente. La actividad conjunta de un grupo de tareas debe ser vista como una acción atómica o
indivisible.
30
Culex. Sistemas Tiempo Real (2017- 2018)
Indivisibilidad (aislamiento).
Anidamiento. Evitando solapamiento entre ellas, anidamiento explícito.
Concurrencia.
Las acciones atómicas deben permitir la programación de procedimientos de recuperación
31
Culex. Sistemas Tiempo Real (2017- 2018)
Acciones atómicas en JAVA
Usamos interfaces para declarar las acciones atómicas
32
Culex. Sistemas Tiempo Real (2017- 2018)
10.3 Acciones atómicas y recuperación de errores hacia atrás.
In Chapter 2, it was shown that when backward error recovery is applied to groups of communicating
tasks, it is possible for all the tasks to be rolled back to the start of their execution. This was the so-
called domino effect. The problem occurred because there was no consistent set of recovery points or
a recovery line. An atomic action provides that recovery line automatically. If an error occurs inside
an atomic action then the tasks involved can be rolled back to the start of the action and alternative
algorithms executed; the atomic action ensures that tasks have not passed any erroneous values
through communication with tasks outside the action. When atomic actions are used in this way they
are called conversations.
La semántica de una conversación se puede resumir de la siguiente forma:
Al entrar en la conversación se guarda el estado del proceso.
Sólo se permite comunicación con otros procesos activos en la conversación y gestores de
recursos.
Para abandonar la conversación todos los procesos deben pasar el test de aceptación. Si
algún test falla todos los procesos son restaurados.
Como alternativa se puede usar la instrucción dialog y discuss
Con el modelo de terminación del manejo de excepciones, si todos los procesos activos en la acción
tienen un manejador y todos manejan la excepción sin generar ninguna otra, entonces la acción
atómica se completa normalmente. Si se utiliza un modelo de reanudación, cuando excepción ha sido
tratada, el proceso activo retoma su ejecución en el punto en el que la excepción fue generada.
Con cualquiera de los modelos, si no existe un manejador de excepciones en ninguno de procesos
activos en la acción, o falla uno de los manejadores, entonces la acción atómica falla con la excepción
estándar atomic_action_failure. esta excepción se genera para todos los procesos involucrados.
33
Culex. Sistemas Tiempo Real (2017- 2018)
Manejo de excepciones en acciones atómicas
Excepciones concurrentes; Más de una tarea pueden generar excepciones al mismo tiempo.
Puede haber manejadores distintos en cada proceso. Difícil elegir manejador, existencia de
una tercera excepción: conjunción de las dos Uso de árbol de excepciones; se elige la
excepción raíz del subárbol más pequeño que las contenga a todas, cada proceso puede tener
un árbol distinto de excepciones.
Excepciones en acciones anidadas; Todas las tareas deben participar en la recuperación.
34
Culex. Sistemas Tiempo Real (2017- 2018)
Ada y acciones atómicas
Se implementan mediante paquetes: Cada rol representa un proceso en el paquete.
Recuperación de errores hacia atrás (Conversaciones).
Cada proceso contiene un bloque de recuperación.
Uso de ATC para informar a cada tarea si se ha producido un fallo en alguna de las
restantes.
El objeto protegido Controlador se encarga de esta comunicación.
Recuperación de errores hacia delante.
Cada proceso tiene un bloque de manejo de excepciones.
Uso de ATC para informar a cada tarea si se ha producido un fallo en alguna de las
restantes.
El objeto Controlador señaliza el disparo si se ha generado alguna excepción que no
haya sido manejada en alguno de los componentes
Cada tarea indica si ha manejado la excepción con éxito y si alguna tarea indica que
la acción debe ser abortada, todas las tareas generarán Fallo_Accion_Atomica.
ATC en RT-Java
Para facilita el uso estructurado java proporciona la interfaz Interruptible. La implementarán los
objetos que quieran proporcionar un método interruptible. El método run de la interfaz es
interruptible y si se interrumpe se llama al método interruptAction.
36
Culex. Sistemas Tiempo Real (2017- 2018)
RT java y acciones atómicas.
37
Culex. Sistemas Tiempo Real (2017- 2018)
directamente entre ellos para pasarse información sobre sus propias actividades, pueden comunicarse
para coordinar el acceso a los recursos compartidos, esta comunicación no necesita ser atómica. La
implementación de entidades de recursos requiere alguna forma de agente de control. Si el agente de
control es pasivo, entonces se dice que el recurso es protegido (o sincronizado). Alternativamente,
si se requiere un agente activo para programar el nivel correcto de control. el controlador de recursos
es llamado servidor.
El acto de asignación de recursos tiene implicaciones en la fiabilidad; Un fallo en un proceso puede
provocar que un recurso no esté disponible para los demás, Inanición de recursos si se permite que
otros lo monopolicen. Los procesos pueden llegar a una situación de interbloqueo.
38
Culex. Sistemas Tiempo Real (2017- 2018)
En el contexto del control de recursos, la información necesaria para expresar estas restricciones se
puede clasificar:
Tipo de petición de servicio: p.ej. lectura sobre escritura.
Orden en el que llegan las solicitudes: asegurar un reparto igualitario, impedir inanición.
Estado del servidor y de todos los objetos que gestiona: p.ej. un recurso solo se puede
asignar si está libre.
Parámetros de una solicitud: El orden de las operaciones en un servidor puede estar
restringido por la información contenida en los parámetros de las peticiones. Si la expresividad
es insuficiente: Se requiere doble interacción con el gestor de recursos y esta debe hacerse de
forma atómica
La prioridad del cliente: El dispach puede ordenar la prioridad
En general hay dos aproximaciones a la restricción del acceso para un servicio:
Espera condicional: se aceptan todas las solicitudes, pero cualquier proceso cuya solicitud
no se pueda atender se suspende en una cola (monitor).
Evitación: las solicitudes no se aceptan a menos que puedan ser satisfechas. Las condiciones
bajo las que se puede aceptar una solicitud se expresan como una guarda en una acción de
aceptación. Posee una forma más estructurada de programación de gestores de recursos, pero
carece de potencia expresiva.
El problema de la potencia expresiva se puede mejorar con la funcionalidad de reencolado.
39
Culex. Sistemas Tiempo Real (2017- 2018)
11.5 Nombrado asimétrico y seguridad.
En lenguajes que tienen nombrado simétrico directo, un proceso servidor (o un recurso protegido)
conoce siempre la identidad del proceso cliente con el que está tratando. Éste es también el caso con
esquemas de nombrado indirecto basados en un intermediario uno a uno. El Nombrado asimétrico
hace, sin embargo, que el servidor no sea consciente de la identidad del cliente. Ya se ha apuntado
antes que esto tiene la ventaja de que se pueden escribir servidores de propósito general, pero puede
conducir a una seguridad deficiente en la utilización de los recursos.
Un recurso se solicita normalmente en dos modos de acceso: Acceso compartido o exclusivo.
11.7 Interbloqueos.
Los accesos compartidos pueden generar: interbloqueos (T1 tiene acceso exclusivo a R1 y solicita el
acceso a R2 y T2 tiene acceso exclusivo a R2 y solicita el acceso a R1), livelock (un conjunto de
procesos interaccionando colocados en bucles de los que no pueden salir, pero en los que no están
haciendo ningún trabajo) o inanición.
Condiciones necesarias para que ocurra el interbloqueo.
Exclusión mutua: sólo un proceso puede utilizar un recurso al mismo tiempo (es decir, el recurso no
se puede compartir o está limitado su acceso concurrente).
Mantenimiento y espera: debe haber procesos que mantengan recursos mientras esperan por otros.
No desalojo (no apropiación): un recurso sólo puede ser liberado por un proceso voluntariamente.
Espera circular: debe existir una cadena circular de procesos, de forma que cada proceso mantenga
recursos que son solicitados por el siguiente proceso en la cadena.
Para manejar los interbloqueos, y obtener así un STR fiable, tenemos 3 aproximaciones posibles:
Prevención de interbloqueo; garantizando que nunca ocurra al menos una de las 4 condiciones
Evitación de interbloqueo; Si se tiene más información sobre el uso de los recursos, entonces
es posible diseñar un algoritmo que permita que ocurran las cuatro condiciones pero que aun
así el sistema no entre en un estado de interbloqueo.
40
Culex. Sistemas Tiempo Real (2017- 2018)
Detección y recuperación; como conocer información sobre el uso de recursos es difícil se
puede permitir que ocurra el interbloqueo y luego tomar acciones correctivas (grafos de
asignación de recursos)
Reloj en JAVA
Standard Java (java.lang), System.currentTimeMillis Devuelve los milisegundos transcurridos desde
el 1 de enero de 1970 GTM.
41
Culex. Sistemas Tiempo Real (2017- 2018)
Las Clases Date y Calendar (java.util) hacen uso de currentTimeMillis para crear objetos.
Real-Time Java, añade relojes de tiempo real con alta resolución.
In Real~Time Java, the sleep method (defined in the RealtimeThread class) can be used for both
relative and absolute delays.
En ADA para calcular un retardo relativo. En ADA para calcular un retardo absoluto.
Start := Clock; -- from calendar START := Clock;
loop FIRST_ACTION;
exit when (Clock - Start) > 10.0; delay until START + 10.0;
end loop; SECOND_ACTION;
42
Culex. Sistemas Tiempo Real (2017- 2018)
12.4 Programming timeouts (tiempo limite de espera).
Perhaps the simplest time constraint that an embedded system can have is the requirement to
recognize, and act upon, the non-occurence of some external event. For example, a temperature sensor
may be required to log a new reading every second, the failure to give a reading within 10 seconds
being defined as a fault. In general, a timeout is a restriction on the time a task is prepared to wait for
a communication.
También se usan timeouts para programar tiempos límite de ejecución de las tareas. Se puede hacer
uso de timeouts en cualquiera de las posibilidades de sincronización:
Semáforos.
Regiones críticas condicionales (CCR).
Variables de condición en monitores.
Entradas en objetos protegidos.
Timeouts en acciones.
Un timeout puede considerarse una notificación asíncrona. Útil para capturar errores de código
(bucles infinitos) y también para definir tareas con partes obligatorias y opcionales (La parte opcional
solamente se ejecutará si hay tiempo disponible).
Timeouts son implementados mediante una subclase de AsynchronouslyInterruptedException
denominada Timed.
43
Culex. Sistemas Tiempo Real (2017- 2018)
12.6 Temporal scopes (ámbitos temporales).
Facilitan la representación de requisitos temporales, Identifican a un conjunto de sentencias asociadas
con una restricción temporal: límite temporal (deadline), Retardo mínimo (min. Delay), retardo
máximo (max. Delay), Tiempo máximo de ejecución (max. execution time), Lapso de tiempo
máximo (max. elapsed time).
45
Culex. Sistemas Tiempo Real (2017- 2018)
Soportan la ejecución de procesos de forma directa. En cada instante se determinará cuál es el proceso
que deba ejecutarse.
Alternativas de planificación:
Planificación de prioridad estática o fija: FPS Cada proceso tiene una propiedad estática
fija calculada antes de la ejecución. Esquemas apropiativo/no apropiativo/apropiación
diferida. Esquema asignación monotonico: (A cada proceso se le asigna una prioridad en
función de su periodo, prioridad 1 la menor).
Test Planificabilidad basada en la utilización: Esquema apropiativo basado en
prioridades usando el Algoritmo de tasa monotónica. Si se cumple U los N procesos
cumplirán sus tiempos limite. Mayor periodo menor prioridad.
U = 0,24 + 0,25 + 0,33 = 0,82 y 0,82 no es <= 0.78 por lo tanto no pasa el test.
46
Culex. Sistemas Tiempo Real (2017- 2018)
test de utilización para FPS no es exacto y no es aplicable a modelos más generales.
Para el proceso de mayor prioridad el tiempo de respuesta en su peor caso = a su
tiempo de ejecución ( R = C), pero para el resto existen interferencias Ri = Ci + Ii
48
Culex. Sistemas Tiempo Real (2017- 2018)
13.10 Interacciones y bloqueos entre procesos.
Inversión de prioridad, Un proceso es suspendido a la espera de que
otro proceso de menor prioridad realice algún cálculo (Se dice
que el proceso de mayor prioridad está
bloqueado).
Si un proceso tiene m secciones críticas que pueden provocar su bloqueo, el máximo número de veces
que puede ser bloqueado será m.
Si B es el máximo tiempo de bloqueo y k el número de secciones críticas, el proceso i tiene un límite
superior de bloqueo dado por:
Tiempo de respuesta con bloqueo.
El tiempo de respuesta teniendo en cuenta el factor de bloqueo se puede calcular como:
49
Culex. Sistemas Tiempo Real (2017- 2018)
Y con la ecuación de recurrencia:
50
Culex. Sistemas Tiempo Real (2017- 2018)
Protocolo inmediato de acotación de la prioridad: ICPP (fija la prioridad de un
proceso tan pronto como bloquea un recurso).
Cada proceso tiene asignada una prioridad por defecto.
Cada recurso tiene definido un valor cota estático (Prioridad máxima de los procesos
que lo utilizan).
Un proceso tiene una prioridad dinámica, que es el máximo entre su prioridad y los
valores techo de cualquier recurso que tenga bloqueado.
Un proceso solamente podrá ser bloqueado al principio de su ejecución.
Cuando el proceso comience, todos los recursos deben estar libres. Si no es así, algún
proceso tendrá una prioridad mayor o igual, y la ejecución del proceso será pospuesta
OCCP Versus ICCP: El comportamiento en el peor caso es idéntico. ICPP es más sencillo de
implementar (No hay que monitorizar las relaciones de bloqueo). ICPP produce menos cambios de
contexto (El bloqueo es previo a la ejecución), ICPP requiere más cambios de prioridad.
51
Culex. Sistemas Tiempo Real (2017- 2018)
Fluctuaciones en la activación(jitter) y tiempos limites arbitrarios.
In the Simple model, all tasks are assumed to be periodic and to be released with perfect periodicity;
that is, if task l has period T, then it is released with exactly that frequency. Sporadic tasks are
incorporated into the model by assuming that their minimum interarrival interval is T. This is not,
however, always a realistic assumption.
Por tanto, los tiempos limite puede ser arbitrarios, Es posible que D (y potencialmente) R > T.
Adicionalmente, La tolerancia a fallos (hacia adelante o atrás) implica cálculos extra pero los tiempos
límite (deadlines) deben seguir cumpliéndose.
Instante critico y desplazamientos.
En el análisis de planificabilidad presentado al principio del este capítulo, se supone que todos los
procesos comparten un tiempo de activación común. El instante crítico es aquel en el activan todos
los procesos a la vez (esto suele ocurrir en el instante 0). Para la planificación de prioridades estáticas,
esta suposición resulta segura; si todos los procesos cumplen sus requisitos de temporización cuando
son activados conjuntamente, siempre serán panificables. Existen, sin embargo, conjuntos de
procesos que se pueden beneficiar de la elección explícita de sus tiempos de activación de forma que
no compartan un instante crítico. Se podría decir que un proceso tiene un desplazamiento con
respecto a otros.
52
Culex. Sistemas Tiempo Real (2017- 2018)
Si hay que admitir ciertos procesos y rechazar otros, es preciso conocer la importancia relativa de
cada uno. Asignación de valores para admisión/rechazo:
Estático: El proceso siempre tiene el mismo valor, requiere especialistas en el dominio de
aplicación.
Dinámico: El valor del proceso se calcula cuando se activa.
Adaptativo: El valor del proceso cambia durante su ejecución.
la programación basada en prioridad es más propia de los SO que de los lenguajes pero el enfoque de
los SO no resulta adecuada para sistemas de tiempo real estricto.
RESUMEN
Esquema de planificación;
Define un algoritmo para la compartición de recursos
Permite la predicción del comportamiento en el peor caso
Implementación mediante ejecutivo cíclico: un ciclo principal / varios ciclos secundarios
Uso de un sistema basado en prioridades para solventar los inconvenientes del ejecutivo cíclico
Procesos esporádicos
Secciones no expropiables
Fluctuaciones en la activación
Test de utilización: No es exacto
Análisis del tiempo de respuesta: Más flexible y Adaptable (Procesos periódicos y aperiódicos,
Bloqueos , Planificación cooperativa, Tolerancia a fallos, Desplazamientos).
Ada y RT-Java para planificación: Ambas soportan la planificación basada en prioridades. Java
permite la implementación de sistemas más dinámicos
53
Culex. Sistemas Tiempo Real (2017- 2018)
La interfaz física de un dispositivo suele efectuarse mediante un conjunto de registros. Con buses
para memoria (intel) y para dispositivos de E/S separados lógicamente, el computador precisa de dos
tipos de instrucciones de ensamblado:
Acceso al dispositivo. Ejemplo: IN AC, PORT OUT AC, PORT
Mientras que en la arquitectura E/S sobre memoria. (Ej. M68000). Según las direcciones se accederá
al dispositivo o a la memoria.
Hay que destacar dos tipos de mecanismos generales para efectuar y controlar la E/S: mecanismos de
control dirigido por estatus, y mecanismos de control dirigidos por interrupción.
Dirigido por estatus: Cada programa realiza las comprobaciones para determinar el estatus
del dispositivo. Clases de instrucciones hardware para este mecanismo:
Operaciones de test.
Operaciones de control.
Operaciones de E/S
Dirigido por interrupción: Permiten que la E/S se efectúa asíncronamente. Las
interrupciones aumentan grado de no determinismo, pueden no estar permitidas en los STR.
Controlado por programa.
Iniciado por programa, acceso Directo a Memoria (DMA).
Controlado por programa de canal.
Los dos últimos tipos pueden provocar robos de ciclo de acceso a memoria al procesador y
producir situaciones no deterministas.
Elementos necesarios para los dispositivos dirigidos por interrupción:
Mecanismos de cambio de contexto.
Cambio de contexto: Preservación del estado del procesador. Establecimiento del
estado adecuado del procesador. Restauración del estado del proceso suspendido.
Estado de un proceso: PC. Estatus del programa. Registros.
Niveles de cambios de contexto: Básico(PC), Parcial (PC. Estatus del programa), Completo.
Identificación del dispositivo de la interrupción.
54
Culex. Sistemas Tiempo Real (2017- 2018)
Vectorizados: consulta del vector de interrupción y su correspondencia con las
direcciones de los dispositivos HW.
Por estatus. Existen varios dispositivos conectados al mismo controlador. Cada
interrupción tiene una palabra de estatus asociada que especifica el dispositivo.
Por sondeo. Se pregunta por el estatus de cada dispositivo.
Algunas arquitecturas modernas asocian una primitiva de alto nivel al servicio de la
interrupción.
Identificación de la interrupción. Comprobar la información de estatus del dispositivo, la
misma interrupción señala su causa.
Control de interrupciones. Control de interrupciones mediante la habilitación / inhabilitación
de las mismas. Mecanismos:
Control por estatus por interrupción.
Control por máscara de interrupción.
Control por nivel de interrupción.
Control de prioridad. Prioridad para atender las interrupciones. Mecanismos estáticos o
dinámicos relacionados con los mecanismos de control y niveles de prioridad del
procesador.
Ejemplo Motorola 68000 (Arquitectura sobre Memoria, interrupciones vectorizadas). Cuando
ocurre una interrupción: Almacena PC y estatus del procesador (PSW). Se cargan el nuevo PC y PSW
del vector de interrupción. La primera palabra contiene la dirección de la rutina de servicio, la
segunda contiene el PSW y la prioridad.
56
Culex. Sistemas Tiempo Real (2017- 2018)