INTERRUPCION POR SOFTWARE
LECCIÓN 2: INTERRUPCIONES SOFTWARE
2.1 Introducción..........................................................................................................................1
2.2 system_call............................................................................................................................3
2.3Sys_call_table.......................................................................................................................9
2.4 Excepciones........................................................................................................................15
Interrupciones Software
LECCIÓN 2: INTERRUPCIONES SOFTWARE
2.1 Introducción
Una interrupción se genera cuando se quiere que la CPU deje de ejecutar el proceso
en curso yejecute una función específica de quien produce la interrupción. Cuando
se ejecuta esta función específica decimos que la CPU está atendiendo la
interrupción. Podemos realizar una clasificación de las interrupciones, atendiendo a la
fuente que las produce.
Interrupcion software, se produce cuando un usuario solicita una llamada del
sistema.
Interrupciones hardware, son causadas cuando un dispositivohardware requiere la
atención de la CPU para que se ejecute su manejador.
Excepciones, son interrupciones causadas por la propia CPU, cuando ocurre algún
suceso, por ejemplo una división por cero.
Una Interrupción software se produce cuando un usuario solicita un recurso del
núcleo, mediante una llamada al sistema, open, write, read, mount, etc. Los pasos
que se producen son los siguientes:
Elproceso usuario solicita la función correspondiente de la librería libc, que ha sido
añadida en la compilación del proceso.
df = open (fichero, modo);
La función de librería coloca los parámetros de la llamada en los registros del
procesador y ejecuta la instrucción INT 0x80.
Se conmuta de modo usuario a modo núcleo mediante las estructuras conocidas
como las tablas IDT (Tabla Descriptora deInterrupciones) y GDT (Tabla Global de
Descriptores).
Entra a ejecutarse una función del núcleo, system_call, Interfase entre el usuario
y el núcleo.
Cuando se termina la llamada, system_call retorna al proceso que la llamo y se
retorna a modo usuario.
El modo de llegar a la función system_call se visualiza en la siguiente figura.
Llega la interrupción software INT 80h y se busca en la IDT la entradacorrespondiente a la interrupción.
Se obtiene un puntero desplazamiento al núcleo (D).
Y una entrada (S) a GDT.
La entrada en la GDT indica una base (B) y un limite (L) del núcleo.
Se llega al manejador de interrupción system_call.
Interrupciones Software
df = open(ficheor, modo);
open – libc
INT 80
TSS
EAX
LDT
Descriptor 1
EBX
Descriptor 2
ECX
Descriptor 3
...
0
S
IDT
D
1
S
D
A
2
S
DA
33
S
D
S
D
S
INT 80
255
B
IDTR
L
A
B
TR
B
GDT
L
L
A
A
B
L
A
A
B
L
A
A
B
L
A
D
A
B
L
A
S
D
A
B
L
A
S
D
A
L
A
LDTR
B
B
GDTR
CS
Descriptor n
FLG
Descriptor
Base
MEMORIA
NÚCLEO
+
Desplazamiento
system_call:
save_all
call sys_open
restore_all
sys_open
L
Limite
S – Selector
D – Desplazamiento
A – Atributos
B – Base
L - Limite
IDT (TablaDescriptora de Interrupciones)
Tabla que guarda los descriptores de interrupciones, cada vez que se produce una
interrupción se salta a una entrada de esta tabla. Contiene 256 entradas, y cada entrada
tiene información para llegar a una función manejadora de la interrupción. Contienen el
campo denominado Selector, que tiene la dirección de una entrada de la tabla GDT; el
campo Desplazamiento, que contieneel desplazamiento que hay que sumar a la base del
núcleo para llegar a la función que queremos que se ejecute cuando se interrumpe; por
último contiene una serie de campos denominados Atributos, que fijan si el desplazamiento
viene en bytes o en palabras, bits de protección, etc). Existe un registro IDTR dentro del
microprocesador que contiene la dirección base y la longitud de esta tabla, para...
Regístrate para leer el documento completo.