Publicado el 14 de Enero del 2017
954 visualizaciones desde el 14 de Enero del 2017
112,1 KB
10 paginas
Creado hace 10a (07/05/2014)
Master en Computación
Plataformas de Tiempo Real
POSIX Avanzado y Extensiones
Tema 1. Ficheros y entrada/salida
Tema 2. Gestión de Interrupciones en MaRTE OS
Tema 3. Monitorización y control del tiempo de ejecución
Tema 4. Planificación EDF
Tema 5. Planificación a Nivel de Aplicación
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
Tema 2. Gestión de Interrupciones en
MaRTE OS
1
Interrupciones
2.1.
2.2. Modelos de gestión de interrupciones en MaRTE OS
2.3.
2.4. Ejemplo: Espera de interrupción
2.5. Ejemplo: Sincronización con semáforos
Interfaz para la gestión de interrupciones
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
2
2.1 Interrupciones
Interrupción: mecanismo mediante el cual es posible interrumpir
la ejecución del programa ejecutado por la CPU
2.1 Interrupciones
La mayoría de los dispositivos utilizan interrupciones para
notificar a la CPU que se ha producido un evento:
• nuevo dato disponible
• posibilidad de enviar nuevo dato
• cambio en una línea de estado
• error
• etc.
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
3
Tema 2. Gestión de Interrupciones en MaRTE OS
Conceptos fundamentales
2.1 Interrupciones
Tras la interrupción el programa permanece suspendido mientras
se ejecuta la rutina de servicio de interrupción (ISR) (también
denominada manejador de la interrupción)
Ejecución secuencial
del programa
Interrupción
Continua la
ejecución secuencial
del programa
...
a = b + 4;
c := 2 * PI * r;
if (a > 0)
a = 0;
else
b = b + 1;
...
manejador()
{
código del
manejador;
}
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
4
2.1 Interrupciones
Conceptos fundamentales (cont.)
Las distintas interrupciones que se pueden producir en un
computador se identifican mediante un número (tipo de la
interrupción)
La tabla de vectores de interrupción establece el enlace entre cada
tipo de interrupción y su ISR asociada
Manejador1
begin
...;
end Manejador1;
Manejador2
begin
...;
end Manejador2;
Tabla de vectores
de interrupción
0
tipo de
1
2
interrupción
3
4
5
...
1
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
2.1 Interrupciones
Ciclo de atención a interrupción
1. Se genera una interrupción, el procesador termina la
instrucción ensamblador que estaba ejecutando
Interrupción
PCPC
Flags
...
mov 0x80616d3,%eax
movl $0xf,0x4(%esp)
mov %eax,(%esp)
sub $0x4,%esp
mov 0x4(%ebp),%edx
...
2. Se salva en el stack el estado del procesador (contador de
programa y registro de estado)
PCPC
Flags
stack
PC
Flags
XX
XX
© M. Aldea, M. González
Mayo-2014
Plataformas de Tiempo Real
5
6
Tema 2. Gestión de Interrupciones en MaRTE OS
2.1 Interrupciones
Ciclo de atención a interrupción (cont.)
3. La CPU lee el tipo de interrupción y obtiene la dirección de su
ISR utilizando la tabla de vectores de interrupción
Tipo de
interrupción
5
Bus de datos
PCPC
Flags
Tabla de vectores
de interrupción
4
5
6
Manejador5
begin
...;
end Manejador5;
4. Se carga la dirección de comienzo de la ISR en el PC y se
deshabilitan nuevas interrupciones
Deshabilita
interrupciones
PCPC
Flags
Manejador5
begin
...;
end Manejador5;
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
7
2.1 Interrupciones
Ciclo de atención a interrupción (cont.)
5. Se ejecuta la ISR hasta llegar a la instrucción de retorno de
interrupción (RTI)
PCPC
Flags
Manejador5
begin
...;
RTI;
end Manejador5;
6. La instrucción RTI recupera del stack el estado original de la
CPU, con lo que el procesador continua la ejecución del
programa interrumpido
stack
PC
Flags
XX
XX
PCPC
Flags
...
mov 0x80616d3,%eax
movl $0xf,0x4(%esp)
mov %eax,(%esp)
sub $0x4,%esp
mov 0x4(%ebp),%edx
...
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
Controlador de interrupciones
2.1 Interrupciones
r
o
d
a
l
o
r
t
n
o
C
s
e
n
o
i
c
p
u
r
r
e
t
n
i
e
d
Temporizador
Líneas de requerimiento
de interrupción
Las líneas de requerimiento
de interrupción de cada
dispositivo no se conectan
directamente al procesador,
si no que lo hacen a través
del Circuito Controlador de
Interrupciones
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
8
9
Tema 2. Gestión de Interrupciones en MaRTE OS
Tabla de vectores de interrupción de un PC
2.1 Interrupciones
Tipo de
interrupción
0
1
2
3
4
5
6
7
Temporizador
Teclado
PIC esclavo
COM2
COM1
Paral. 2/tarj. sonido
Disquete
Paralelo 1
8
9
10
11
12
13
14
15
RTC
Reservada
Reservada
Reservada
Ratón PS/2
Coprocesador
Disco Duro
Reservada
...
...
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
10
Configuración de las interrupciones hardware en
2.1 Interrupciones
un PC estándar
C
P
I
)
r
e
t
s
a
M
(
IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
Temporizador
Serie 2
Paralelo 2
Serie 1
Paralelo 1
C
P
I
)
e
v
a
S
l
(
IRQ8
IRQ9
IRQ10
IRQ11
IRQ12
IRQ13
IRQ14
IRQ15
Reloj
Reservada
Reservada
Reservada
Ratón PS/2
Coprocesador
Reservada
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
11
2.2 Modelos de gestión de interrupciones en
2.2 Modelos de gestión de interrupciones en MaRTE OS
MaRTE OS
MaRTE OS permite dos modelos de gestión de interrupciones:
• Thread asociada con ISR
- utilizado cuando el driver tiene un thread dedicado (es el
único thread que accede directamente al dispositivo)
más sencillo y eficiente
sólo puede haber un thread asociado con cada interrupción
• Sincronización por semáforos
- utilizado cuando varios threads de usuario acceden
directamente al dispositivo
un thread puede esperar a la vez a varias interrupciones
varios threads pueden esperar a la misma interrupción
- los threads se encolan en el semáforo y son atendidos por prioridad
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
12
Tema 2. Gestión de Interrupciones en MaRTE OS
Thread asociada con ISR
Aplicación
2.2 Modelos de gestión de interrupciones en MaRTE OS
Driver
Thread
posix_intr_timedwait
Procesa dato
Thread
dedicado
Thread
Mutex y CV
Interrupción
Lee dato del
dispositivo
Manejador
Thread
Buffer
Buffer
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
Sincronización por semáforo
© M. Aldea, M. González
Mayo-2014
13
2.2 Modelos de gestión de interrupciones en MaRTE OS
Aplicación
Thread
Driver
Interrupción
wait
post
Semáforo
Lee dato del
dispositivo
Manejador
Thread
Buffer
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
14
2.3 Interfaz para la gestión de interrupciones
2.3 Interfaz para la gestión de interrupciones
La gestión de interrupciones no está estandarizada en POSIX
MaRTE OS proporciona una interfaz no estándar (en <intr.h>)
que permite:
• instalar y desinstalar manejadores de interrupción
- posix_intr_associate() y
posix_intr_disassociate()
• bloquear y desbloquear interrupciones
- posix_intr_lock() y posix_intr_unlock()
• esperar interrupciones (Thread asociada con ISR)
- posix_intr_timedwait()
(los nombres comienzan por "posix_" porque la interfaz fue
propuesta para una futura ampliación del estándar POSIX)
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
15
Tema 2. Gestión de Interrupciones en MaRTE OS
2.3 Interfaz para la gestión de interrupciones
Fuentes de interrupción
En <intr.h> se define el tipo intr_t para identificar las fuentes
de interrupciones existentes en el sistema
Además se proporcionan valores constantes de este tipo para las
distintas fuentes. Por ejemplo, en un PC:
TIMER_HWINTERRUPT
KEYBOARD_HWINTERRUPT
SERIAL1_HWINTERRUPT
PARALLEL1_HWINTERRUPT
DISKETTE_HWINTERRUPT
COPROCESSOR_HWINTERRUPT
...
temporizador
teclado
Puerto serie 1
Puerto paralelo 1
Disquete
Coprocesador matemático
Resto de interrupciones
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
16
2.3 Interfaz para la gestión de interrupciones
Manejadores de interrupción
Los manejadores de interrupción son funciones con el siguiente
prototipo
int intr_handler (void * area, intr_t intr)
• area permite identificar una región de memoria mediante la
cual el manejador y la aplicación pueden compartir datos
• intr identifica la fuente de interrupción que ha provocado la
invocación del manejador (útil cuando se utiliza el mismo
manejador para varias interrupciones)
Un manejador puede sincronizarse con los threads de la
aplicación utilizando semáforos definidos en area
• el manejador podrá invocar sem_post() sobre esos semáforos
Plataformas de Tiempo Real
Tema 2. Gestión de Interrupciones en MaRTE OS
© M. Aldea, M. González
Mayo-2014
17
2.3 Interfaz para la gestión de interrupciones
Manejadores de interrupción (cont.)
Un manejador debe retornar uno de los valores siguientes:
• POSIX_INTR_HANDLED_NOTIFY: el manejador ha atendido la
interrupción y, si hay algún thread esperando, deberá ser
activado por el sistema operativo
• POSIX_INTR_HANDLED_DO_NOT_NOTIFY: el manejador ha
atendido la interrupción pero el thread NO debe activarse
• POSIX_INTR_NOT_HANDLED: el manejador NO ha atendido la
interrupción; si hay otros manejadores asociados el sistema
operativo deberá invocar al siguiente
ISR1
ISR2
ISR3
ISR4
POSIX_INTR_NOT_HANDLED
POSIX_INTR_NOT_HANDLED
POSIX_INTR_HANDLED_NOTIFY o
POSIX_INTR_HANDLED_DO_NOT_NOTIFY
No es invocado
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
1
Comentarios de: Master en Computación - Plataformas de Tiempo Real - POSIX Avanzado y Extensiones - Tema 2. Gestión de Interrupciones en MaRTE OS (0)
No hay comentarios