Marcando la diferencia

Sobrevolando los Vectores de Interrupciones


 

https://i2.wp.com/www.dcc.uchile.cl/~jpiquer/Docencia/SO/aps/img26.gif

1-      Concepto:

Un vector de interrupción es un array  que contiene apuntadores a las localizaciones dentro de la RAM (memoria).  La tabla de vectores de interrupción en él se indexa y acceden a través de su número de interrupción, una vez que se ha indicado el número de interrupción y en algunos casos realizado algunos cálculos para acceder a las posiciones de memoria donde se encuentra el vector involucrado a que se hace mención en la llamada a la interrupción. Una vez identificado la interrupción se procede a entregar el control del programa mediante un salto para la ejecución de las rutinas a la cual apunta el registro que contiene el dicho apuntador. Una vez que se ha terminado la ejecución del código al cual fue apuntado, el control es retornado al programa llamador (que ha generado la interrupción).

Los Microprocesadores en muchos casos incluyen instrucciones para gestionar las interrupciones internamente, es decir muchos de los valores son incluidos por el mismo sistema de hardware o software del sistema operativo, y mediante las llamadas a interrupciones se pueden ejecutar y tener acceso a las mismas.

Otra posibilidad constituye el hecho de que nosotros mismos podamos gestionar el acceso y ejecución de tales rutinas incluidas como apuntadores dentro del propio vector de interrupciones.

Si se llama incluye las llamadas a interrupciones, el mismo microprocesador gestiona las llamadas y retornos, incluyendo salvar y restaurar los registros internos del microprocesador que son necesarios para la llamada y retorno de las instrucciones que se van ejecutando.

Para el caso de que se necesite gestionar la tabla de interrupciones por cuenta propia se deben guardar y restaurar los registros (mediante la colocación en la pila los valores de registro y volver a restaurarlos quitando los valores anteriores para continuar con la ejecución normal del programa) antes y después de las llamadas provocadas por el salto de la ejecución de las interrupciones y su posterior retorno a la ejecución normal de las sentencias en el programa llamador.

2  –  Estructura de los Vectores de Interrupción:

Son por lo regular vectores de 32 bits, que están segmentadas en bloques de 16 bits cada una donde la parte más baja de la memoria se denomina Lo-Word y la parte alta del mismo se denomina Hi-word, (Word significa una palabra que es un bloque de 16 bits o 2 bytes, también se puede segmentar un Word en Byte-Lo y Byte-Hi respectivamente) pero no se los ve directamente como Word, sino que se los ve como apuntadores ya que cumplen esa función y específicamente  FAR POINTERs, son apuntadores lejanos!!

¿Por qué se los denomina FAR POINTERs?

Son apuntadores a otras direcciones de memoria que contienen sentencias para ser ejecutadas en el programa, el apelativo FAR se relaciona principalmente a que no necesariamente se da el caso de que la sentencia se encuentre en el mismo “Bloque de Instrucciones” y tampoco se puede encontrar en el mismo “Bloque de datos”, es decir se encuentra en un bloque de instrucciones y datos distintos a los que contiene el programa llamador, esto le confiere cierta independencia y espacios para que la subrutina llamada pueda operar al máximo manejando sus propios datos locales y tener más espacios de memoria y lograr modularidad.

 

3  –  llamando a una interrupción:

Para generar una llamada a interrupción es relativamente fácil, simplemente debemos indicar a que número de interrupción nos queremos referir o ejecutar.

INT Nº, donde INT corresponde con la instrucción de llamada misma y Nº corresponde con el número de interrupción que queremos utilizar. En algunos casos debemos incluir algunas informaciones antes y después de las llamadas a interrupciones como por ejemplo guardar valores y lo mismo para el caso de las restauraciones a valores anteriores; o quizás se necesiten pasar parámetros a las interrupciones.

4  –  Gestionando por propia cuenta las interrupciones:

Por lo general la tabla de interrupciones ocupa la parte inicial de la memoria, iniciando generalmente el vector en la posición cero y se extiende casi hasta cubrir apenas 255, es decir podría ocupar para la indexación del vector desde la posición 0 hasta 255, es decir podría ser un vector de 256 posiciones.

Como se explicó anteriormente cada vector ocupa 32 bits, ósea suponiendo el caso anterior necesitamos apenas 1024 bytes (4 * 256).

La evidencia más importante es que para direccionar en forma manual las interrupciones solo debemos multiplicar por 4 el número de interrupción al cual queremos referenciar.

Ejemplo: si el número de interrupción es 3, entonces debemos posicionarnos en realidad en la posición de memoria 12 (3 * 4) validos para procesamiento a nivel de bytes ya que nuestra estructura se compone de “doble palabra” es decir, 32 bits o “4 bytes”.

5-¿Por qué necesito gestionar en forma manual las interrupciones. O que gano con ellas?

Los que les explico aquí es un Tips importantísimo que he descubierto en algún tiempo cuando trabajaba con programación con ensambladores y microprocesadores, y espero les pueda servir de ejemplo para que los interesados puedan hacer uso de esto, y que puedan quitar el provecho necesario.

Resulta que en la llamada a interrupción es un salto especial incluido en los microprocesadores y que hacen uso de él, el mismo microprocesador, las rutinas de la BIOS, el mismo Sistema Operativos y algunas funciones Hardware y Software.

Por lo tanto resultan criticas en alguna medida y no se permiten que se pueda acceder directamente y manipular las interrupciones, o por lo menos no se debería permitir, pero como ven su disposición es tan accesible que uno puede reemplazar el contenido de los mismos re apuntando a otras direcciones que queramos ejecutar o directamente seguir la traza de las instrucciones que se van ejecutando paso a paso, tanto para aprender cómo están codificadas como para actuar sobre ellas o simplemente ver como se ejecutan estas instrucciones que luego podamos utilizar.

Me había sorprendido al encontrar que los programas de Trazas podrían seguir las ejecuciones de las interrupciones cuando ingresaba a ejecutar una interrupción en forma manual, porque si se utiliza la forma normal de acceso mediante la instrucción de interrupción “INT” no permitían ver lo que se estaba ejecutando, simplemente saltaba la ejecución una línea después de la llamada a interrupción.

Es magnífico entonces poder seguir paso a paso, es decir entrar en la Caja Negra de las sentencias que envuelven a las interrupciones.

Comentarios finales:

Muchas de las aplicaciones de Sistemas Operativos posiblemente hacen Copias de los contenidos del vector de interrupciones los modifican y luego retorna los contenidos reales no modificados. Es que esto había aparecido cuando no existía lo que conocemos hoy como multitarea, donde solo una aplicación podía tener acceso al sistema y tener acceso al vector de interrupciones.  Imagínense que pasaría si cada programa de hoy en día tratara de intervenir en el procesamiento del vector de interrupciones, en primer lugar no debemos permitir que las aplicaciones tengan accedo directo al mismo, y el otro motivo es que varias aplicaciones tratarían de colocar en el información relevante.

Seguramente cada sistema operativo tenga formas de implementaciones diferentes para cubrir con lo que les estoy comentando. De mi parte optaría por realizar varias copias del mismo vector y que modifiquen solo las copias, una vez que el programa finalice se devuelve el espacio de memoria utilizado y no permitiendo que los programas accedan al vector en forma directa sino ofreciendo APIs para que tengan acceso al mismo.😉

http://t0.gstatic.com/images?q=tbn:ANd9GcQE7JsKofuqwUQ2u4X-qFzrEpERnjiR2kajQXnKwSDDSNV8n5T3QA

That´s Right!!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s