Você está na página 1de 4

INTERRUPCIN SOFTWARE Y HARDWARE

Una interrupcin se genera cuando se quiere que la CPU deje de ejecutar el proceso en curso y ejecute una funcin especfica de quien produce la interrupcin. Cuando se ejecuta esta funcin especfica decimos que la CPU est atendiendo la interrupcin. Podemos realizar una clasificacin de las interrupciones, atendiendo a la fuente que las produce. Interrupcin software, se produce cuando un usuario solicita una llamada del sistema. Interrupciones hardware, son causadas cuando un dispositivo hardware requiere la atencin de la CPU para que se ejecute su manejador. Excepciones, son interrupciones causadas por la propia CPU, cuando ocurre algn suceso, por ejemplo una divisin por cero. Una Interrupcin software se produce cuando un usuario solicita un recurso del ncleo, mediante una llamada al sistema, open, write, read, mount, etc. Los pasos que se producen son los siguientes: El proceso usuario solicita la funcin correspondiente de la librera libc, que ha sido aadida en la compilacin del proceso. df = open (fichero, modo); La funcin de librera coloca los parmetros de la llamada en los registros del procesador y ejecuta la instruccin INT 0x80. Se conmuta de modo usuario a modo ncleo mediante las estructuras conocidas como las tablas IDT (Tabla Descriptora de Interrupciones) y GDT (Tabla Global de Descriptores). Entra a ejecutarse una funcin del ncleo, system_call, Interfase entre el usuario y el ncleo. 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 funcin system_call se visualiza en la siguiente figura. Llega la interrupcin software INT 80h y se busca en la IDT la entrada correspondiente a la interrupcin. Se obtiene un puntero desplazamiento al ncleo (D). Y una entrada (S) a GDT. La entrada en la GDT indica una base (B) y un limite (L) del ncleo. Se llega al manejador de interrupcin system_call.Interrupciones Software IDT (Tabla Descriptora de Interrupciones) Tabla que guarda los descriptores de interrupciones, cada vez que se produce una interrupcin se salta a una entrada de esta tabla. Contiene 256 entradas, y cada entrada tiene informacin para llegar a una funcin manejadora de la interrupcin. Contienen el campo denominado Selector, que tiene la direccin de una entrada de la tabla GDT; el campo Desplazamiento, que contiene el desplazamiento que hay que sumar a la base del ncleo para llegar a la funcin 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 proteccin, etc). Existe un registro IDTR dentro del microprocesador que contiene la direccin base y la longitud de esta tabla, para encontrarla con rapidez. Existe una tabla para todo el sistema. Para rellenar esta tabla se precisan instrucciones en ensamblador privilegiadas, un usuario normal no puede modificar sus entradas. GDT (Tabla Global de Descriptores) Esta tabla es nica para el sistema y contiene

informacin de los descriptores de segmentos del sistema, los microprocesadores de Intel obligan a trabajar con segmentos de memoria (base, longitud). Una de las entradas contiene la base y la longitud del segmento que contiene el ncleo del sistema operativo en memoria principal. Cada entrada tambin tiene otros campos que denominamos Atributos, que definen atributos del segmentos, como permisos de acceso a ese segmento. Dentro de la CPU existe un registro especifico GDTR para almacenar la direccin base y longitud de esta tabla y facilitar su acceso. Otras entradas de esta tabla describen las tablas LDT y el segmento TSS. LDT (Tabla Local de Descriptores) Cmo funciona una interrupcin A partir del offset 0 del segmento 0 hay una tabla de 256 vectores de interrupcin, cada uno de 4 bytes de largo (lo que significa que la tabla tiene una longitud de 1KB). Cada vector est compuesto por dos partes: offset (almacenado en la direccin ms baja) y segmento (almacenado en la direccin ms alta). Cuando se llama a una interrupcin (no importa si es por hardware o por software), el procesador ejecuta las siguientes operaciones: 1. PUSHF (guarda las banderas en el stack) 2. CTF/DI (borra la bandera de Trap y deshabilita interrupciones) 3. CALL FAR [4 * INT#] (salta a nueva CS:IP, almacenando direccin de retorno en stack) La expresin 4 * INT# es la forma de calcular la direccin de inicio del vector de interrupcin a utilizar en el salto. Por ejemplo, el vector de la INT21h estar en la direccin 84h Al efectuarse el salto, la palabra almacenada en la direccin ms baja del vector sustituye al contenido del registro IP (que previamente fue salvado en el stack) y la palabra almacenada en la direccin ms alta sustituye al contenido del registro CS (tambin salvado en el stack). Por ejemplo: La instruccin INT 21h es la usada para efectuar llamadas a las funciones del DOS. Supongamos que en la posicin de memoria 0000:0084 est almacenada la palabra 1A40h y en la direccin 0000:0086 est almacenada la palabra 208Ch. La prxima instruccin que se ejecute es la que est en la posicin 20C8:1A40 (nuevo CS:IP). El final de una rutina de interrupcin debe terminarse con la instruccin IRET, que recupera del stack los valores de CS, IP y Flags. Notemos que un llamado a interrupcin implica el cambio de estado automtico de la bandera de habilitacin de interrupciones. En pocas palabras, esto significa que al producirse una interrupcin, esta bandera inhabilita futuras interrupciones. Como la instruccin IRET restablece el registro de flags al estado anterior que tenia antes de producirse la interrupcin, las prximas interrupciones se habilitan en el mismo momento en que se produce el retorno desde la rutina de servicio.

Tipos de interrupciones Las interrupciones por software se comportan de igual manera que las de hardware pero en lugar de ser ejecutadas como consecuencia de una seal fsica, lo hacen con una instruccin.Hay en total 256 interrupciones, de la 0 a la 7 (excepto la 5) son generadas directamente por el procesador. Las 8 a 0Fh son interrupciones por hardware primitivas de las PC. Desde la AT en adelante, se incorpor un segundo controlador de interrupciones que funciona en cascada con el primero a travs de la interrupcin 2 (de ah que en la tabla siguiente se la denomine mltiplex). Las 8 interrupciones por hardware adicionales de las AT se ubican a partir del vector 70h. Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 112 113 114 115 116 117 118 119 Hexa 0 1 2 3 4 5 6 7 8 9 0A 0B 0C 0D 0E 0F 70 71 72 73 74 75 76 77 Generada CPU CPU CPU CPU CPU BIOS CPU CPU HARD HARD HARD HARD HARD HARD HARD HARD HARD HARD HARD HARD HARD HARD HARD HARD Descripcin Divisin por cero Single-step NMI Breakpoint Desbordamiento Aritmtico Imprimir Pantalla Cdigo de operacin invlido Coprocesador no disponible Temporizador del sistema (18,2 ticks por seg) Teclado Mltiplex IRQ3 (normalmente COM2) IRQ4 (normalmente COM1) IRQ5 IRQ6 IRQ7 (normalmente LPT1) IRQ8 (reloj de tiempo real) IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 (normalmente coprocesador matemtico) IRQ14 (normalmente Disco Duro) IRQ15

En cuanto a las interrupciones por software, estn divididas entre las llamadas por el BIOS (desde la 10h a la 1Fh) y las llamadas por el DOS (desde la 20h hasta la 3Fh). Esto es slo la versin oficial, ya que en realidad las interrupciones entre BIOS y DOS se extienden hasta la 7Fh.

Você também pode gostar