2.4.2 Servicios del Sistema
§1 Sinopsis
La tabla de vectores de interrupción IDT ("Interrupt Description Table") del PC es una zona de 1024 bytes en la memoria baja, que contiene un máximo de 256 vectores (punteros de 4 bytes) a los programas que atienden las interrupciones (ISR's "Interrupt service routine").
La primera misión de la IDT es contener los punteros a los servicios del BIOS ( H2.4.1). Aunque en realidad estos ocupan solo algunas de las 256 posiciones disponibles. El resto se completa con los denominados servicios del Sistema; quedando espacio para la inclusión de servicios especiales del usuario. Como es natural, los vectores de servicios del BIOS señalan a direcciones de memoria situadas en el espacio de la propia BIOS ( H4) [1] y son idénticos para un modelo determinado de ordenador, con independencia del SO cargado. Por ejemplo: MS-DOS; Windows o Linux. Mientras que los vectores de servicios del Sistema dependerán naturalmente del SO cargado y señalan a zonas de memoria RAM.
§2 Detalle de servicios del MS-DOS
La tabla de vectores de interrupción del PC tiene posiciones que son estándar, esto significa que algunos números de interrupción corresponden a un mismo servicio en todas las máquinas. En la tabla adjunta se han señalado algunos de estos servicios, indicando el número de interrupción, la dirección del vector y el uso de la ISR correspondiente.
Numero |
Dirección |
Uso |
0 |
0000h |
Cuando se realiza una división por cero, el procesador genera una excepción que tiene este número. |
1 |
0004h |
.Se utiliza para ejecutar programas paso a paso (depuradores). |
2 |
0008h |
Generado cuando se produce una interrupción no enmascarable NMI. |
5 |
0014h |
Servicio de impresión del contenido de la pantalla. La invocación de este servicio provoca el mismo resultado que la combinación de teclas SHIFT+CTRL (que utilizan este servicio). |
8 | 0020h | El reloj del sistema genera interrupciones con este número con una frecuencia de 18.21 veces por segundo aproximadamente (se conocen como "ticks"). Este servicio incrementa en una unidad la cuenta del reloj (almacenada en la memoria de datos de la ROM-BIOS). Del valor de este contador, que es puesto a cero cada 24 horas, se basan los servicios de hora del sistema (servicio 26 ). |
16 |
0040h |
Servicios de video. Contiene 16 subservicios tales como ajuste del tamaño y desplazamiento del cursor, escritura y lectura de un carácter o de un píxel, desplazamiento vertical ("Scroll"), ajuste y lectura del modo de video, etc. |
17 |
0044h |
Servicio de componentes del equipo. Proporciona una palabra de 16 bits que contiene información básica sobre los componentes instalados en el ordenador. |
18 |
0048h |
Este servicio informa del tamaño de la memoria instalada en el sistema. |
19 |
004Ch |
La ROM BIOS proporciona seis servicios estándar de disquete: Reinicialización; obtención del estado; lectura; escritura y verificación de sectores, y formateo de pistas. |
20 | 0050h | En esta interrupción se agrupan diversos subservicios de comunicaciones para puertos serie proporcionados por la BIOS: Inicializar los parámetros de inicio del puerto; enviar un carácter; recibir un carácter; obtener el estado del puerto. |
21 | 0054h | Incluye los servicios de cassette. En realidad es una reliquia prehistórica, ya que el PC tenía posibilidad de una cassette opcional. |
22 | 0058h | Incluye los servicios de teclado que incluye tres subservicios: Lectura de un carácter del buffer del teclado; Informar si hay algún carácter en el buffer; selección mayúsculas/minúsculas (estado del "Shift"). |
23 | 005Ch | Incluye tres subservicios para impresora: Enviar un carácter al puerto paralelo; Inicializar el puerto; obtener un informe esquemático del estado de la impresora. |
24 | 0060h | Esta es otra reliquia prehistórica. Se trata del cargador del intérprete BASIC; este lenguaje que estaba presente en la ROM de los primeros PC's. |
25 | 0064h | Este servicio es la rutina de puesta en marcha ("bootstrap") del equipo. El resultado de su activación es equivalente a su puesta en marcha. Se denomina reinicio en caliente, y es parecido al efecto que se consigue por el teclado con la combinación CTRL+ALT+DEL. |
26 | 0068h | Este servicio
suministra la hora del sistema mediante la inspección del contador de
ticks de reloj pasados desde media noche (ver servicio 8
).
Incluye dos subservicios, que permiten respectivamente leer y escribir
el valor del contador de ticks.
Nota: La librería estándar C++ dispone de una función clock() que devuelve el valor del tiempo transcurrido desde el inicio del programa. Esta función se basa en la inspección del contador de ticks. |
[1] En el caso de flash BIOS ( H4) esta memoria es copiada a RAM, por lo que sus vectores apuntan también a zonas de memoria RAM.