Sie sind auf Seite 1von 33

TEMA:

SOFTWARE, CMOS PROGRAMAS RESIDENTES Y


MANEJO DE INTERRUPCIONES
CURSO DE:
LAB. ARQUITECTURA DE COMPUTADORAS

AREQUIPA-PERU
2013

INDICE

I. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

II. Informe previo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

1. Programas residentes de los textos especializados en algún


lenguaje pequeño portable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

2. Descripción de la dirección base del reloj de tiempo


real de la PC y realización de un programa para poder

1
tener acceso a dicho reloj en lectura y escritura. . . . . . . . . . . . . . . . . . . . . . .9

3. Como programar alarmas de acuerdo al uso del reloj de


tiempo real de la PC Traer programa de alarmas. . . . . . . . . . . . . . . . . . . . . . 11

4. Descripción de las interrupciones por hardware usadas


en la PC cuales están ocupadas y cuales disponible. . . . . . . . . . . . . . . . . . . . 13

5. Descripción del procedimiento para acceder a una interrupción. . . . . . . . ..18

6. Descripción de las interrupciones por software usadas


en la PC cuales están ocupadas y cuales disponibles. . . . . . . . . . . . . . . . . . .19

7. Realización del diseño de un sistema de forma que


podamos probar las interrupciones de ambos tipos. . . . . . . . . . . . . . . . . . . 20

8. Descripción del setup de la PC, las opciones de configuración y los


parámetros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

CMOS PROGRAMAS RESIDENTES Y MANEJO DE INTERRUPCIONES

I.OBJETIVO: Conocer programación residente en memoria y la configuración del reloj de tiempo real de
la PC (leer y escribir el CMOS RAM). Conocer la manera en que se configura las interrupciones tanto por
hardware como por software.

II.INFORME PREVIO:

1. Programas residentes tipeados de los textos especializados en algún lenguaje pequeño portable.

Muchos de los servicios de interrupciones están hechos para que cualquier aplicación pueda utilizarla.
Para utilizarla debemos recurrir a los registros básicos del CPU (AX, BX, CX, DX, etc). Como manera de

2
convención se establece que con AX se especifica el valor de la función que se desea utilizar, los demás
registros se usarán de acuerdo a los requerimientos de la función a llamar. En Pascal estos registros de
CPU no pueden ser accedidos directamente excepto que se utilice lenguaje "Assembler", pero la unidad
DOS incluye un tipo de variables denominada "Registers" que en conjunto con el procedimiento "Intr"
permite llamar a una interrupción con los valores de registros puesta en la variable de tipo "Registers".
El tipo "Registers" corresponde a un "Record" (Registro) cuyos campos equivalen a los registros internos
de la CPU mencionados anteriormente.

Veamos un ejemplo muy sencillo de ello:

Uses Dos;
Var Regs: Registers;
Begin
Regs.Ax:= 1;
Regs.Bx:= 4;
Regs.Cx:= 3;
End.

Para poder utilizar una función debemos saber en qué interrupción está alojada, qué valor de AX la
identifica dentro de esa interrupción y qué parámetros son utilizados (Si utiliza BX, CX, DX, etc). Hay que
tener MUCHO CUIDADO con el uso de los registros y de las interrupciones pues el uso incorrecto de
ellos puede causar daños, por favor utilízalo con precaución.
Tanto el valor de la interrupción como el valor utilizado en AX se brindan en formato hexadecimal como
convención, así que cuando leas información de una interrupción en particular y ves valores en AX debes
comprender que están dados en hexadecimal a menos que esté indicado que está escrito en otro
formato numérico.

Como forma de ejemplo utilizaremos funciones de la INT 33 (Interrupción del ratón o "Mouse") y
nombraremos algunos valores de AX que corresponderán a las funciones disponibles.

INT 33 AX = 1 Hace visible el puntero del ratón


INT 33 AX = 2 Oculta el puntero del ratón

Escribiremos dos procedimientos, uno que utilice la primera función y el otro que realice la segunda
función.

{Aquí comienza el programa}


Uses Dos;

Procedure Ver_Cursor_Mouse;
Var Regs: Registers;
Begin
Regs.Ax:= 1;
Intr($33,Regs); {Llama a la interrupción del ratón}
End;

Procedure Ocultar_Cursor_Mouse;
Var Regs: Registers;
Begin

3
Regs.Ax:= 2;
Intr($33,Regs); {Llama a la interrupción del ratón}
End;

Begin
Ver_Cursor_Mouse;
ReadLn;
Ocultar_Cursor_Mouse;
End.
{Aquí termina}

Este programa mostrará el puntero del ratón, esperará a que presiones ENTER, oculta el puntero y sale.
La interrupción del ratón también brinda otras opciones, como por ejemplo saber qué botones del
mouse están siendo presionados. Para ello se utiliza AX = 3, esta función devuelve en el registro BL el
valor del botón que está presionado actualmente.
Estos son los valores posibles para BL:
0 - Ninguno de los botones
1 - Botón izquierdo
2 - Botón derecho
4 - Botón del medio

Los valores en BL pueden aparecer sumados, por ejemplo si BL es 6 es porque los botones derecho y del
medio están presionados al mismo tiempo (2+4).

Vamos a hacer una función que devuelva el valor del botón presionado y basándonos en ello haremos
un programa que muestre el puntero hasta que los botones iquierdo y derecho estén presionados al
mismo tiempo.

Vamos a utilizar el programa anterior.

{Aquí comienza el programa}


Uses Dos;
Function Que_Boton: Integer;
Var Regs: Registers;
Begin
Regs.Ax:= 3;
Intr($33,Regs); {Llama a la interrupción del ratón}
Que_Boton:= Regs.Bl; {La función devolverá el valor alojado en BL}
End;

Procedure Ver_Cursor_Mouse;
Var Regs: Registers;
Begin
Regs.Ax:= 1;
Intr($33,Regs); {Llama a la interrupción del ratón}
End;

4
Procedure Ocultar_Cursor_Mouse;
Var Regs: Registers;
Begin
Regs.Ax:= 2;
Intr($33,Regs); {Llama a la interrupción del ratón}
End;

Begin
WriteLn('Este es un ejemplo para utilizar interrupciones con el raton.');
WriteLn('Presiona los botones izquierdo y derecho al mismo tiempo para salir.');
Ver_Cursor_Mouse;
Repeat
Until Que_Boton = 3;
Ocultar_Cursor_Mouse;
End.
{Aquí termina}

La INT 33 es una interrupción establecida por un gestor, es decir, por un programa que se instala en
memoria y sirve para gestionar el ratón. Puede ocurrir que ese gestor no esté instalado en el momento
de la ejecución del programa, en esos casos las funciones para utilizar el ratón no pueden ser utilizadas.
Para saber si se puede utilizar los servicios de la INT 33 especifica AX = 0 y llama a la interrupción, si AX
sigue valiendo 0 después de la llamada es porque el gestor no está instalado, si vale distinto de cero es
porque se encuentra instalado y están disponibles los servicios. Basándonos en esta información
haremos una función que averigue si el servicio de INT 33 está disponible.

Uses Dos;

Function Hay_Mouse: Boolean;


Var Regs: Registers;
Begin
Regs.Ax:= 0;
Intr($33,Regs);
If Regs.Ax <> 0 Then Hay_Mouse:= True Else Hay_Mouse:= False;
End;

Begin
If Hay_Mouse Then WriteLn('Las funciones del raton estan disponibles.')
Else WriteLn('No hay funciones del raton disponibles - El raton no esta instalado.');
End.

Utilizando llamados de interrupciones que requieren búferes:

Ya entendiendo cómo funciona básicamente una interrupción podemos hablar ahora de otra utilidad
que tienen las interrupciones: La transmisión de datos entre una aplicación y otra por medio de búferes

5
de memoria.
Muchas veces es necesario enviar gran cantidad de datos a una interrupción (o también recibir
información en bloque de ella) y no nos alcanza con tener solo registros de 16 bits. Por ejemplo, para
escribir un mensaje por pantalla a través de DOS o bien recibir información sobre el controlador de
video VESA es necesario trabajar con un búfer que será llenado por la interrupción (En caso de recibir) o
leida por ella en caso de enviar datos. Para ello se pueden utilizar dos registros de CPU que nos permiten
especificar la posición en memoria del búfer.

Si en este momento te preguntas cómo se organiza la memoria de una PC, recuerda que toda PC tiene
un chip de 1 MB de memoria RAM llamada "memoria base". Esta memoria es la utilizada por el BIOS y
también por DOS (El cual la administra y almacena en ella las aplicaciones que se ejecuten). Imagina que
el chip de memoria base está dividida en 65536 bloques de 16 bytes cada uno. Estos bloques se los
denominan "segmentos". El BIOS se reserva muchos segmentos para uso propio, y el resto lo administra
DOS con el nombre de "memoria convencional". Cuando se ejecuta un programa, el código del
programa es almacenado en memoria convencional y el resto es utilizado por la aplicación misma. Pero
no alcanza con saber solo el segmento que queremos usar: También debemos especificar cuántos bytes
nos debemos "desplazar" desde el inicio del segmento para acceder a una posición específica en la
memoria RAM: A este "corrimiento" se lo llama "desplazamiento" o también "Offset".

Volviendo a los registros, uno de los registros es utilizado generalmente para especificar segmentos de
memoria, mientras que con un segundo registro indicamos desplazamiento que se debe realizar desde
el inicio del segmento indicado en el primer registro. En la mayoría de los casos se suele utilizar los pares
ES y DI, o DS y DX, o ES y BP.
Nota: Siempre hay que utilizar el par que la interrupción requiera (En las referencias se dan los nombres
de los registros que se utilizan para indicar búferes separándolos uno de otro a través de dos puntos ":",
como por ejemplo ES:DI, DS:DX o ES:BP)

Veamos un ejemplo:

Imprimir una palabra en pantalla utilizando DOS. Especificar:


AH = 9
DS:DX = un puntero a un string que termine con el símbolo "$"
Llamar a INT 21h. La llamada no devuelve nada en los registros.

Como vimos recién, DS:DX significa que DS es utilizado como valor de segmento y DX es el
desplazamiento.
Supongamos que lo que queremos imprimir está almacenado en una variable de tipo "String". Pues
¿Cómo obtener el segmento y el desplazamiento de esa variable para pasarlos a la interrupción? En
Pascal existen dos funciones, una es "Seg" y la otra es "Ofs". "Seg(x)" te devuelve el valor del segmento
de la variable "x" mientras que "Ofs(x)" te devuelve el valor de desplazamiento de la variable "x". (Es
importante destacar que el tipo de la variable "x" puede ser cualquiera: Un "String", un "Char", un
"Integer", un "Real", etc)

Sabiendo esto, veamos entonces cómo quedaría implementado:

Uses Dos;
Var
Regs: Registers;
S: String;
Begin

6
Write('Escribe la palabra a imprimir a traves de DOS: ');
ReadLn(S);
S:= S + '$'; {No olvidar que la llamada requiere que haya un $ al final}
Regs.Ah:= 9;
Regs.Ds:= Seg(S[1]);
Regs.Dx:= Ofs(S[1]);
Intr($21,Regs); {Llama a la interrupción de DOS}
End.

Notas:
1- Fue necesario especificar S[1] pues en S[1] está la primera letra del "String", no olvidar que en Pascal
se utiliza la posición S[0] para guardar la longitud del "String".
2- Lo que hace la llamada es imprimir lo que esté en un búfer especificado en DS:DX (Nuestro búfer es
en este caso la variable de tipo "String") y avanza DX (y DS si es necesario) hasta encontrar un símbolo $,
entonces sin imprimir ese símbolo la interrupción finaliza.

Cuando la interrupción devuelve direcciones de memoria:

Cuando la llamada a la interrupción devuelve una dirección de memoria (en lugar de recibirla de la
aplicación que la llama, como en el ejemplo anterior) debemos modificar el puntero que tendrá los
datos para que apunte a esa dirección de memoria dada por la interrupción.
Veamos el siguiente ejemplo:
AH = $62
Llamar a INT 21h
Devuelve: BX conteniendo el segmento del proceso actual.
Nota: El proceso actual se crea siempre en BX:0 (No hay desplazamiento)

Lo que hace esta llamada es devolver la dirección del PSP actual del programa (PSP significa "Prefijo de
segmento del programa", es una pequeña area de datos que crea DOS antes del segmento real del
programa y en donde se guarda entre otras cosas el tamaño del programa en memoria, el arreglo para
la apertura y uso de archivos, y la linea de parámetros actual). En este caso utilizaremos el PSP para
obtener la linea de parámetros utilizados en el momento de llamar al programa. DOS guarda la linea de
parámetros a partir de la posición $80 del PSP, y según la documentación de DOS, en la posición $80 se
guarda la longitud de la cadena y lo que sigue es la cadena en sí. Esto nos da a pensar que el formato
utilizado es como el formato del tipo "String" en Pascal.

Pero no podemos utilizar una simple variable de tipo "String" para que apunte a la linea de parámetros
del PSP, debemos hacerlo a través de una "variable puntero de tipo String" para que se apunte en este
caso a la linea de parámetros del PSP, es decir utilizando:

Var
S: ^String; {No es un "String" sino un puntero de tipo "String", notar el ^ al principio}

A través de la función "Ptr" podemos modificar la dirección de memoria adonde está apuntando el
puntero para que apunte en nuestro ejemplo al área del PSP. La función requiere dos parámetros, uno
es el segmento y otro es el desplazamiento a asignarle (Para nuestro ejemplo el segmento será BX y el
desplazamiento es $80 adonde está la linea de parámetros). Lo que devuelve es un puntero que apunta

7
a la dirección especificada, y lo que debemos hacer es asignarle ese valor devuelto a la variable puntero
"S".

Con toda esta información podemos ya elaborar la aplicación:

Uses Dos;
Var
S: ^String;
Regs: Registers;
Begin
Regs.Ah:= $62;
Intr($21,Regs);
S:= Ptr(Regs.Bx,$80);
If S^ = '' Then
Begin
WriteLn('Debes especificar parámetros al programa.');
WriteLn('Desde Turbo Pascal ve a "Run" y luego a "Parameters", y');
WriteLn('escribe por ejemplo "Hola a todos". Luego presiona CTRL-F9 para ejecutar.');
WriteLn;
WriteLn('Si lo ejecutas desde la linea de comandos y el programa');
WriteLn('se llama "prueba" escribe como ejemplo "prueba hola a todos"');
End Else
WriteLn('La linea de parámetros contiene: ',S^);
End.

Ya que S está apuntando a la linea de parámetros, si modificas S^ estarás modificando la linea de


parámetros almacenada en el PSP. Por ello debes tener mucho cuidado en no modificar por accidente el
PSP ni tampoco otros valores de importancia utilizados por DOS, ya que su modificación inapropiada
puede llevar a errores de asignación de memoria y posteriores bloqueos del sistema.

2. Descripción de la dirección base del reloj de tiempo real de la PC y realizar un programa para poder
tener acceso a dicho reloj en lectura y escritura.

Todos los ordenadores, y por tanto los PC disponen de un oscilador a cuarzo (se suele distinguir en la
placa base por su encapsulado metálico) que proporciona los pulsos de sincronismo a la CPU, a los
buses, y al reloj del PC.

El cuarzo es un material curioso para los físicos, si se le golpea produce una pequeña corriente eléctrica,
y si se le somete a una corriente eléctrica vibra a una frecuencia función de sus dimensiones físicas, a
esta propiedad los físicos le llaman piezoeléctrica. Hay más materiales en la naturaleza con esta
propiedad, pero nos quedaremos con el cuarzo. Con un cristal de cuarzo se consigue un buen patrón de
frecuencia, o de tiempo que es lo mismo (tiempo y frecuencia son dos magnitudes inversas la una de la
otra) y además de forma muy económica, es por ello que los relojes digitales han sustituido poco a poco
a los mecánicos. Sin embargo tiene un pequeño inconveniente, resulta que el cuarzo es muy sensible a
los cambios de temperatura, pues a nadie se le escapa que la temperatura produce dilataciones y
contracciones en los materiales, y ya hemos dicho que la frecuencia de oscilación de un cuarzo depende
de su tamaño físico. Para aplicaciones de precisión, los cristales de cuarzo se les hace funcionar en un
pequeño horno con la temperatura constante.

8
La frecuencia del cristal de cuarzo utilizado en los PC's suele ser de 32,768 MHz, pero tiene poca
importancia pues el cristal de cuarzo se le puede hacer trabajar en su modo fundamental o en algún
sobretono, además de que la frecuencia puede dividirse o multiplicarse con facilidadA partir de una
frecuencia de 100 MHz, que puede ser la de la memoria RAM, se divide por 12 y tenemos 8 MHz que es
la del bus ISA, la dividimos por 3 y tenemos 33 MHz que es la del bus PCI y por último la multiplicamos
por 5 y tenemos 500 MHz que es la de la CPU. Cuando se hace overcloking se modifican los valores de
los divisores y multiplicadores y nunca el reloj.

En el PC hay que distinguir dos relojes:

• El reloj de tiempo real (RTC Real Time Clock) o reloj hardware.


• El reloj virtual, reloj del sistema (System Clock) o reloj software.

El RTC está compuesto por un circuito contador ROM (Intel 8053 en los XT, Intel 8254 en los AT,
Motorota MC14618, Dallas Semiconductors DS1285) que a partir de los impulsos de frecuencia del
oscilador controlado por un cristal de cuarzo genera una interrupción cada 54,936 ms (18,206 veces por
segundo), otra rutina que los cuenta y una memoria CMOS donde se almacena el valor (14 registros con
un total de50 Bytes: año, mes, día, hora, minutos y segundos). El espacio restante de esta memoria
alberga otras informaciones de la BIOS, todos estos valores se mantiene en la memoria gracias a la pila o
batería que incorporan todos los PC desde 1984 (Modelo AT, antes había que teclear la hora cuando se
arrancaba el PC). Obsérvese que el reloj pasaría de las 00:00:00,98 a las 00:00:01.04

Hay unos modelos de relojes de la empresa Dallas que integran en una pequeña caja de plástico todos
los componentes.

El RTC funciona de forma continuada, gracias a la batería, esté encendido o apagado el ordenador. El
reloj del sistema lo mantiene el sistema operativo y se arranca en el momento que se enciende el
ordenador toma la fecha y la hora del RTC y se para cuando se apaga el ordenador

Mantenimiento

Ajuste horario del RTC

En el interior de un PC además de los cambios de temperatura del exterior, existen fuentes de calor que
modifican la temperatura como es el caso del procesador y de la fuente de alimentación, grabadora de
CD, etc. que hacen que el RTC se desajuste de segundos a minutos diariamente.

Desde la BIOS, DOS o Windows se puede ajustar de forma manual la fecha y la hora del RTC, pero es
preferible usar alguno de los programas cliente que permiten su ajuste de forma automática mediante
una conexión a uno de los muchos servidores de señales horarias de Internet

Dos programas gratuitos que permiten el ajuste del reloj de nuestro PC con una exactitud mayor que +/-
0,5 segundos son:

9
• NISTIME 3.2 (National Institute of Standars and Technologies) que es muy sencillo y eficaz.
Utiliza el puerto TCP 8013 y permite seleccionar el servidor horario que queremos utlizar. Se
puede descargar desde: http://www.bldrdoc.gov/timefreq/service/nts.htm.
• Atomic Clock sync v.1.0.3. es un programa con una cantidad de detalles pero de igual eficacia
que el anterior. Puede descargarse desde http://www.isbister.com/ y
http://www.worldtimeserver.com/

Ajuste horario del reloj del sistema

Este ajuste es para cambiar el uso horario, el día de la semana, etc.

Desde Windows Inicio -> Configuración -> Panel de control -> Configuración regional y Fecha y Hora.

Sustitución del reloj

Pasado el cambio de siglo, que obligo a cambiar muchos de los relojes de los PC, no suelen dar
problemas. Sin embargo hay muchos fabricantes de relojes para PC (relojes embebidos): Dallas
Semiconductors, Motorota, bechMArq, Twinhead, SGS-Thomson, Phillips, Epson, Motorota, etc. que
disponen de tablas de equivalencias (Ver por ejemplo la web http://www.resource800.com/ )

Sustitución de la pila

El agotamiento de la batería hace que se borre la Ram de la BIOS y además de perderse la


configuración se pierde la hora. En este caso basta con cambiar la pila (Ver apartado que trata la pila o
bateria del PC).

3. Como podemos programar alarmas de acuerdo al uso del reloj de tiempo real de la PC Traer
programa de alarmas.

Llamado de Interrupciones en Un Programa de Aplicación


Los compiladores de “C” y “C++” permiten llamar interrupciones desde un programa de
usuario. En el caso de programas DOS, ello se puede hacer usando la función especial int86. Esta
función se implementa de la siguiente manera:

Sintaxis

#include <dos.h>

int int86(int intno, union REGS *inregs, union REGS *outregs);

con

10
struct WORDREGS

unsigned int ax, bx, cx, dx, si, di, cflag, flags;

};

struct BYTEREGS

unsigned char al, ah, bl, bh, cl, ch, dl, dh;

};

union REGS

struct WORDREGS x;

struct BYTEREGS h;

};

La función int86 ejecuta la interrupción por software especificada por el número intno. Los registros de
la CPU son cargados de acuerdo a los valores entregados en inregs. A su retorno, la CPU copia los
valores de los registros y estado a la estructura outregs. Típicamente si el campo cflag en outregs es
diferente de 0, entonces la interrupción no se ejecutó correctamente.

Ejemplo

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#define VIDEO 0x10

void movetoxy(int x, int y)

11
union REGS regs;

regs.h.ah = 2; /* set cursor position */

regs.h.dh = y;

regs.h.dl = x;

regs.h.bh = 0; /* video page 0 */

int86(VIDEO, &regs, &regs);

int main(void)

clrscr();

movetoxy(35, 10);

printf("Hello\n");

return 0;

4. Descripción de las interrupciones por hardware usadas en la PC cuales están ocupadas y


cuales disponibles.

Una interrupción es un mecanismo que permite ejecutar un bloque de instrucciones interrumpiendo la


ejecución de un programa, y luego restablecer la ejecución del mismo sin afectarlo directamente. De
este modo un programa puede ser interrumpido temporalmente para atender alguna necesidad urgente
del computador y luego continuar su ejecución como si nada hubiera pasado.

Una interrupción es un mecanismo, con el cual un modulo de E/S puede interrumpir el procesamiento
normal de la CPU.
Esto sirve para mejorar el rendimiento del sistema. Este mecanismo puede llegar deshabilitarse si es
necesario.
Ejemplo, ya sabemos que la mayoría de los dispositivos externos son las lentos que la CPU, imaginemos
la CPU imprimiendo un documento

Procesador a 200 MHz (tiempo ciclo reloj = 5 ns; Ciclos por instrucción CPI = 2 , en promedio)
• Una instrucción tarda en promedio 2 x 5 ns = 10 ns =>lla computadora puede ejecutar ~100 Mips
Queremos imprimir un archivo de 10 Kbytes en una impresora láser de 20 páginas por minuto

• 1 página ? 3.000 caracteres (1 carácter = 1 byte)

12
• La impresora imprime 60.000 caracteres por minuto = 1 Kbyte/s

Hasta hora lo único que podíamos hacer era que la CPU envíe los datos que pudiera recibir la impresora
y esperar que termine de imprimir o que solicite mas datos.

Sin interrupciones:

• La CPU entra en un bucle y envía un nuevo byte cada vez que la impresora está preparada para
recibirlo.

• La impresora tarda 10 seg en imprimir 10 Kbytes

• La CPU está ocupada con la operación de E/S durante 10 seg.

(en ese tiempo la CPU podría haber ejecutado 1000 millones de instrucciones)

Con el uso de interrupciones la CPU no tiene que esperar, mandaría los datos a la impresora y seguiría
haciendo alguna tarea productiva.

Con interrupciones:

La impresora genera una interrupción cada vez que está preparada para recibir un nuevo byte.
• Si la gestión de interrupción (ATI) tiene 10 instrucciones (salvar contexto, comprobar estado, transferir
byte, restaurar contexto, rti)
• Para transferir 10 Kbyte tenemos que ejecutar 10.000 veces la ATI
? ejecutar 100.000 instrucciones para atender al periférico? la CPU tarda 0,001 seg.
• La CPU está ocupada con la operación de E/S durante 0,001 seg.
• La E/S por interrupciones reduce en 10.000 veces el tiempo que la CPU está ocupada gestionando la
impresora.

Esta diferencia es tan marcada porque el periférico es realmente muy lento, con periféricos rápidos, solo
con las interrupciones no alcanza para solucionar el problema.

13
En este gráfico se muestra el tiempo que utiliza la CPU en el periférico, la linea punteada nos marca en
que se estaría utilizando el CPU.

Cuando se atiende, un periférico el procesador ejecuta un programa que atiende al modulo de entrada
salida, este programa se carga, prepara lo necesario para que se pueda realizar la operación requerida
con el periférico, seguido a esto se ejecuta la instrucción solicitada, cuando termina el periférico su
tarea, en algunos casos el programa cargado puede realizar alguna otra tarea relacionada, para el lado
del periférico o para el lado de los buses, por ejemplo mandar información de algún error que se halla
detectado en el periférico, para luego proseguir con la ejecución del programa original.

Se puede ver, en la primera sección, que mientras está funcionando el periférico (entre los círculos 4 y
5) el CPU no hace nada, solo espera que termine, en cambio se puede apreciar en la segunda seccione
del gráfico, que luego de que el programa que atiende la E/S pone en funcionamiento el periférico, el
procesador dedica su tiempo en procesar el programa original hasta que reciba una nueva interrupción,
las 2 cruces identifican las interrupciones.
Bien, que sucedería si ocurre una interrupción mientras se está ejecutando una interrupción?
Hay 2 alternativas, la primera es que mientras se está atendiendo una interrupción se desactivan las
demás, luego que se termina de atender la interrupción el procesador, antes de proseguir con la

14
ejecución del programa principal, chequea si hay alguna interrupción pendiente, y así las va ejecutando
secuencialmente.

La desventaja es que no se tiene en cuenta ninguna prioridad, y es necesario porque hay peticiones que
en la que es importante atenderlas rápidamente y hay otras que no.
La otra alternativa es que las interrupciones tengan prioridad, entonces, si una interrupción es
interrumpida por otra que posee mayor prioridad, se almacena el contexto de ejecución de la
interrupción en curso, se carga el PC con la nueva dirección y se empieza a ejecutar las instrucciones del
programa que atiende la nueva interrupción, al terminar se continua atendiendo la interrupción
anterior, y cuando se termina de atender esta, se vuelve a la ejecución del programa principal.

Generalmente se aplica para realizar tareas elementales asincrónicas en el computador tales como
responder al teclado, escribir en la pantalla, leer y escribir archivos. Podemos considerar una tarea
asincrónica como aquella que es solicitada sin previo aviso y aleatoriamente desde el punto de vista del
computador. Tomemos el caso de la operación Ctrl-Alt-Supr. En Windows tiene el efecto de que
aparece en pantalla una lista de los procesos y ventanas en ejecución en el computador. En cambio en
el Sistema Operativo DOS cuando el usuario presiona simultáneamente dichas teclas el computador
procede a reinicializarse, aunque pueda estar ocupado ejecutando un programa en ese instante. Vale
decir fuerza obligadamente a que el computador se reinicialice. Ya sea en el sistema Windows o en
DOS, el computador no está constantemente monitoreando el teclado para ver si el usuario ha
solicitado un Ctrl-Alt-Del, ya que en ese caso consumiría mucho tiempo de proceso en ello y por ende la
capacidad de proceso se vería significativamente afectada. La solución empleada es una interrupción.

Luego cada vez que el usuario presiona una tecla, la CPU es advertida a través de una señal
especial de interrupción. Cuando la CPU advierte/recibe una señal de interrupción suspende
temporalmente el proceso actual almacenando en memoria RAM un bloque con toda la información
necesaria para restablecer posteriormente la ejecución del programa si es que procede. Enseguida la
CPU determina qué elemento ha solicitado la interrupción y para cada caso existe un bloque de
instrucciones que realiza la tarea correspondiente que es ejecutada a continuación. Terminada la
ejecución se restablece el programa original en el mismo punto en que fue interrumpido usando para
ello la información almacenada previamente.

Cada interrupción tiene asignada un número único. El PC está diseñado de manera que la
interrupción tiene asignada 4 bytes de memoria RAM. La dirección de los cuatro bytes en la memoria
corresponde al número de la interrupción multiplicado por 4. Por ejemplo la interrupción IRQ 5 tiene
asignada 4 bytes en la dirección 0x00014 (0000:0014). El contenido de los 4 bytes de memoria
RAM asignados a una interrupción contiene a su vez una dirección que es un puntero a un bloque de
instrucciones de máquina que realiza el procedimiento correspondiente. De este modo al iniciar la
ejecución de una interrupción de los cuatro bytes que tiene asignados se obtiene la dirección del bloque
de instrucciones que efectivamente se ejecutan. Por ejemplo si en la dirección 0000:0014 estuviera
almacenado el valor 0xFFF00, ello significa que en dicha dirección (ó (F000:FF00) se encuentra el bloque
de instrucciones a ejecutar cuando la interrupción IRQ 5 sea requerida.

Esta forma de direccionamiento indirecto para las interrupciones brinda la flexibilidad necesaria para
perfeccionar, modificar y extender el código de instrucciones correspondiente permitiendo mantener
por ejemplo la compatibilidad de las distintas versiones de BIOS con las aplicaciones y equipos que usan
las interrupciones.

Existen tres tipos de interrupciones:

a) requeridas por hardware

15
Las interrupción original y tradicional es aquella iniciada por un periférico que demanda atención ya que
ha ocurrido un evento relativo a este periférico que demanda algún procedimiento de parte de la CPU.
En un PC las primeras 16 interrupciones son de este tipo por lo que los primeros 64 bytes de la memoria
RAM son direcciones que apuntan bloques de instrucciones residentes en otras áreas de la memoria
RAM. Cabe notar que estas 16 primeras interrupciones que son generadas por hardware que necesita
atención rápida por lo que debe interrumpirse a la brevedad cualquier cosa que la CPU esté haciendo en
ese momento.

Una lista de las interrupciones generadas por hardware es la siguiente

IRQ Prioridad Función

0 1 Timer

1 2 Teclado Hardware

2 Reservada

3 11 COM 2

4 12 COM 1

5 13 Tarjeta de Sonido

6 14 Controlador Floppy

7 15 Puerta Paralela

8 3 Reloj (tics)

9 4 Libre para tarjeta de red, sonido, puerta SCSI

10 5 idem

11 6 idem

12 7 PS-mouse

13 8 Co-procesador matemático

14 9 Canal IDE primario

15 10 Canal IDE secundario

b) requerida por software para interactuar con periféricos

Una característica importante de la operación de interrupciones es que ellas están jerarquizadas para
resolver conflictos entre las múltiples interrupciones. Esto puede ser necesario por ejemplo mientras
una interrupción está siendo ejecutada para atender un dispositivo y en en ese momento un segundo

16
dispositivo pide una interrupción. Se debe tener un mecanismo para decidir que acción tomar. Este
mecanismo está basado en la priorización de interrupciones de modo que una interrupción de mayor
prioridad puede interrumpir una de menor prioridad pero no al revés. De este modo el sistema de
interrupciones funciona ordenadamente lo que permite por ende un funcionamiento robusto del
computador.

La administración del sistema de interrupciones mediante este esquema de priorizaciones es muy


eficiente de tal manera que su uso se extiende a la interacción con periféricos. De tal manera que si
necesita interactuar con un periférico entonces la CPU actúa a través del sistema de interrupciones
solicitándose a sí mismo una interrupción. De este modo previene que el periférico esté ocupado o bien
no disponible. Por ejemplo si la CPU desea escribir un carácter en la pantalla, en vez de hacerlo
directamente solicita una interrupción. La interrupción se ejecuta cuando las condiciones son las
adecuadas tanto del punto de vista del periférico como de la CPU.

Las interrupciones para comunicarse con los periféricos forman la base de lo que se conoce como las
interrupciones BIOS (Basic Input-Output System). Los vectores en la memoria asignada a estas
interrupciones apuntan a memoria ROM, ya que las funciones correspondientes vienen implementadas
desde fábrica y son independientes del sistema operativo. Las funciones BIOS se emplean con DOS,
Windows y Lynux indistintamente.

Los vectores de las interrupciones BIOS están ubicados a partir del vector 0x10H, vale decir
inmediatamente a continuación de los vectores 0 a 15 que son generados por hardware y que no son
enmascarables. Cabe hacer notar que la arquitectura del PC está definida de tal manera que el primer
Kilobyte del espacio de memoria está reservado para vectores de interrupciones, vale decir hay espacio
para 256 interrupciones.

Las interrupciones BIOS más importantes son las siguientes

Número Función

INT 0x10 Video

INT 0x11 Verificación de Equipo

INT 0x12 Verificación de Memoria

INT 0x13 Disquetera

INT 0x14 Puerta Serial

INT 0x15 Cassette

INT 0x16 Teclado

INT 0x17 Impresora

INT 0x18 Programa Basic

INT 0x19 Partida del Computador

INT 0x1A Hora del día

17
INT 0x1B Break Teclado

INT 0x1C Tics

INT 0x1D Tabla Inicialización de Video

INT 0x1E Tabla Inicialización de Disco

INT 0x1F Generador de Caracteres Gráficos

INT 0x1A Reloj

5. Descripción del procedimiento para acceder a una interrupción.

Ejecución de Una Interrupción


Una interrupción tiene asignada 4 bytes de memoria RAM. El PC está construido de modo que la
dirección de estos 4 bytes se obtiene del número de la interrupción multiplicado por 4. Por ejemplo la
interrupción 0x16 que responde al teclado tiene el vector alojado en la dirección 0000:0058. En esta
dirección/vector se asume un bloque de 4 bytes donde está contenido un vector que apunta a la
dirección donde efectivamente reside el bloque de instrucciones que procesa el llamado a la
interrupción. Por ejemplo en la dirección 0000:0058 podrá estar almacenado el valor FFFF:FF50, que es
la dirección donde comienza el bloque de instrucciones que procesa el llamado a la interrupción 0x16.
Esta es una forma flexible de administrar las funciones básicas del computador, ya que en este caso las
distintas versiones del BIOS y SS.OO. usan siempre el mismo número de interrupción (vector) para la
función básica, pero el bloque de instrucciones para procesar el llamado puede residir en cualquier
parte de la memoria RAM. Al encender y partir el computador, el sistema operativo llena los vectores
con las direcciones correctas. Si por error los vectores son borrados entonces cuando se desee
responder a la interrupción correspondiente no se ejecutará el bloque de instrucciones correcto y
probablemente el computador se bloquerá.

Este esquema flexible permite con cierto riesgo de acuerdo a lo anterior que incluso el usuario escriba
una función personal para responder a una interrupción. Para hacer dicha función efectiva (oficial) el
usuario debe dejar residente en memoria el bloque de instrucciones y modificar el vector
correspondiente con la dirección de dicho bloque. De este modo la próxima vez que se responda a la
interrupción el nuevo bloque de instrucciones será ejecutado en vez del anterior. Se asume que el
nuevo bloque de instrucciones se encarga de manejar la información necesaria para que una vez
finalizada la interrupción, el programa interrumpido resuma la ejecución sin problemas.

6. Descripción de las interrupciones por software usadas en la PC cuales están ocupadas y


cuales disponibles.

Requerida por software de uso general

El sistema de interrupciones funciona muy bien, ya que incluso permite que una interrupción
interrumpa la ejecución de otra interrupción que en ese momento esté siendo ejecutada. Las
interrupciones se pueden nestear aparentemente sin límite. Dada la eficiencia del esquema de
interrupciones también se estila usar interrupciones generadas por software. Vale decir el mismo
programa en ejecución puede llamar a una interrupción. En este caso la interrupción funciona como
una función o sub-rutina. Lo que ocurre en este caso es que al implementar una función como una

18
interrupción por software es que su prioridad y ejecución queda determinada por el manejo general de
interrupciones que hace el PC.
Las rutinas desarrolladas por el usuario para que se ejecuten como interrupciones permiten enmascarar
o inhibir la ejecución de interrupciones. La ejecución de la instrucción de máquinas DI (Desable
Interrupts) define que las interrupciones quedan deshabilitadas en adelante. De este modo ninguna
interrupción será concedida por la CPU excepto las primeras 16 que son no enmascarables (non-
maskable). La inhibición de interrupciones queda activa hasta que la CPU recibe la instrucción EI (Enable
Interrupts). Lo usual es que si el usuario, al comienzo del código de la interrupción incluya la instrucción
DI y al final del código incluya la instrucción EI. De este modo se asegura que cuando su interrupción
comience a ejecutar, esta no será interrumpida hasta que termine excepto aquellas generadas por
hardware (las primeras 16).

En el PC los sistemas operativos y los programas de aplicación usan intensamente las rutinas BIOS para
interactuar con los periféricos del computador. Del mismo modo los SSOO y los programas de
aplicación pueden usar el esquema de interrupciones para dar mayor orden y administrar los conflictos
que se generan durante la operación del computador. Por ejemplo el SO DOS usa interrupciones para el
control de la ejecución de programas, para la lectura y escritura de archivos, para el manejo de
directorios, etc. La mayoría de estas funciones están implementadas en un gran bloque de instrucciones
en el marco de la INT0x21.

Los vectores disponibles para interrupciones empleadas por el sistema operativo o programas de
aplicación se ubican a partir de la interrupción 0x21 (vector N. 21). El usuario puede elegir usar
cualquier número de interrupción para una aplicación específica pero es su responsabilidad que no se
produzcan conflictos a causa del número escogido.

Interrupciones en el Sistema Operativo Windows

Hasta la aparición del Sistema Operativo Windows 95, las tareas fundamentales del computador se
realizaban empleando tanto interrupciones BIOS como interrupciones DOS. De tal manera que ambas
familias de funciones estaban disponibles para aplicaciones de usuarios. No obstante, a partir del
sistema operativo mencionado las funciones DOS fueron desechadas y reemplazadas por otras nuevas,
particularmente las llamadas rutinas Windows API (“Application Programming Interface”). Esto varió
fundamentalmente la forma de operar en lo que se refiere a las tareas que realizaban las interrupciones
0x20H para arriba.
Sin embargo, actualmente las interrupciones BIOS se mantienen vigentes con la misma función y forma
de operar anteriores, de modo que todas las tareas asignadas a dichas rutinas están todavía disponibles
y se usan para aplicaciones del usuario. Entre las rutinas aún disponibles se cuentan las más
importantes para efectos de interfase con el mundo exterior, vale decir aquellas que se encargan de la
medición del tiempo, del uso de la puerta paralela, de la puerta serial, etc.

Tan importante además del hecho de mantener vigentes las rutinas BIOS, es el hecho de que ello obliga
a mantener fija una cierta arquitectura de los puertas de E/S. Por ello en el primer PC hasta el actual, las
puertas de E/S asignadas a periféricos específicos es la misma, ya sea se trate de la medición del tiempo,
de la puerta paralela, de la puerta serial, del gameport, etc. Esto permite una cierta continuidad y
permanencia de las aplicaciones de interface con el mundo exterior que nos interesa

7. Realización del diseño de un sistema de forma que podamos probar las interrupciones de ambos
tipos.

En una PC existen 256 interrupciones, enumeradas desde 00 a FF (255 en hexadecimal). Muchas de


estas interrupciones son utilizadas por el BIOS y por DOS para brindar a las aplicaciones diversas
funciones (Por ejemplo, el BIOS llama a INT 09 cada vez que se pulsa una tecla, INT 10 es utilizado por

19
BIOS para dar a las aplicaciones que la llamen servicios de video, a INT 1C 18.2 veces por segundo e INT
21 es utilizado por DOS para brindar sus servicios como abrir archivos, utilizar carpetas, cambiar la hora,
etc; INT 33 brinda todos los servicios para utilizar el ratón, entre otros).

¿Puedo llamar a una interrupción? ¿Cómo utilizarla?

Sí. Muchos de los servicios de interrupciones están hechos para que cualquier aplicación pueda
utilizarla. Para utilizarla debemos recurrir a los registros básicos del CPU (AX, BX, CX, DX, etc.). Como
manera de convención se establece que con AX se especifica el valor de la función que se desea utilizar,
los demás registros se usarán de acuerdo a los requerimientos de la función a llamar. En Pascal estos
registros de CPU no pueden ser accedidos directamente excepto que se utilice lenguaje "Assembler",
pero la unidad DOS incluye un tipo de variables denominada "Registers" que en conjunto con el
procedimiento "Intr" permite llamar a una interrupción con los valores de registros puesta en la variable
de tipo "Registers". El tipo "Registers" corresponde a un "Record" (Registro) cuyos campos equivalen a
los registros internos de la CPU mencionados anteriormente.

Veamos un ejemplo muy sencillo de ello:

Uses Dos;
Var Regs: Registers;
Begin
Regs.Ax:= 1;
Regs.Bx:= 4;
Regs.Cx:= 3;
End.

Para poder utilizar una función debemos saber en qué interrupción está alojada, qué valor de AX la
identifica dentro de esa interrupción y qué parámetros son utilizados (Si utiliza BX, CX, DX, etc). Hay que
tener MUCHO CUIDADO con el uso de los registros y de las interrupciones pues el uso incorrecto de
ellos puede causar daños, por favor utilízalo con precaución.
Tanto el valor de la interrupción como el valor utilizado en AX se brindan en formato hexadecimal como
convención, así que cuando leas información de una interrupción en particular y ves valores en AX debes
comprender que están dados en hexadecimal a menos que esté indicado que está escrito en otro
formato numérico.

Como forma de ejemplo utilizaremos funciones de la INT 33 (Interrupción del ratón o "Mouse") y
nombraremos algunos valores de AX que corresponderán a las funciones disponibles.

INT 33 AX = 1 Hace visible el puntero del ratón


INT 33 AX = 2 Oculta el puntero del ratón

Escribiremos dos procedimientos, uno que utilice la primera función y el otro que realice la segunda
función.

{Aquí comienza el programa}

Uses Dos;

Procedure Ver_Cursor_Mouse;

20
Var Regs: Registers;
Begin
Regs.Ax:= 1;
Intr($33,Regs); {Llama a la interrupción del ratón}
End;

Procedure Ocultar_Cursor_Mouse;
Var Regs: Registers;
Begin
Regs.Ax:= 2;
Intr($33,Regs); {Llama a la interrupción del ratón}
End;

Begin
Ver_Cursor_Mouse;
ReadLn;
Ocultar_Cursor_Mouse;
End.
{Aquí termina}

Este programa mostrará el puntero del ratón, esperará a que presiones ENTER, oculta el puntero y sale.

La interrupción del ratón también brinda otras opciones, como por ejemplo saber qué botones del
mouse están siendo presionados. Para ello se utiliza AX = 3, esta función devuelve en el registro BL el
valor del botón que está presionado actualmente.
Estos son los valores posibles para BL:
0 - Ninguno de los botones
1 - Botón izquierdo
2 - Botón derecho
4 - Botón del medio

Los valores en BL pueden aparecer sumados, por ejemplo si BL es 6 es porque los botones derecho y del
medio están presionados al mismo tiempo (2+4).

Vamos a hacer una función que devuelva el valor del botón presionado y basándonos en ello haremos
un programa que muestre el puntero hasta que los botones iquierdo y derecho estén presionados al
mismo tiempo.

Vamos a utilizar el programa anterior.

{Aquí comienza el programa}


Uses Dos;
Function Que_Boton: Integer;
Var Regs: Registers;
Begin
Regs.Ax:= 3;

21
Intr($33,Regs); {Llama a la interrupción del ratón}
Que_Boton:= Regs.Bl; {La función devolverá el valor alojado en BL}
End;

Procedure Ver_Cursor_Mouse;
Var Regs: Registers;
Begin
Regs.Ax:= 1;
Intr($33,Regs); {Llama a la interrupción del ratón}
End;

Procedure Ocultar_Cursor_Mouse;
Var Regs: Registers;
Begin
Regs.Ax:= 2;
Intr($33,Regs); {Llama a la interrupción del ratón}
End;

Begin
WriteLn('Este es un ejemplo para utilizar interrupciones con el raton.');
WriteLn('Presiona los botones izquierdo y derecho al mismo tiempo para salir.');
Ver_Cursor_Mouse;
Repeat
Until Que_Boton = 3;
Ocultar_Cursor_Mouse;
End.
{Aquí termina}

La INT 33 es una interrupción establecida por un gestor, es decir, por un programa que se instala en
memoria y sirve para gestionar el ratón. Puede ocurrir que ese gestor no esté instalado en el momento
de la ejecución del programa, en esos casos las funciones para utilizar el ratón no pueden ser utilizadas.
Para saber si se puede utilizar los servicios de la INT 33 especifica AX = 0 y llama a la interrupción, si AX
sigue valiendo 0 después de la llamada es porque el gestor no está instalado, si vale distinto de cero es
porque se encuentra instalado y están disponibles los servicios. Basándonos en esta información
haremos una función que averigue si el servicio de INT 33 está disponible.

Uses Dos;

Function Hay_Mouse: Boolean;


Var Regs: Registers;
Begin
Regs.Ax:= 0;
Intr($33,Regs);
If Regs.Ax <> 0 Then Hay_Mouse:= True Else Hay_Mouse:= False;
End;

22
Begin
If Hay_Mouse Then WriteLn('Las funciones del raton estan disponibles.')
Else WriteLn('No hay funciones del raton disponibles - El raton no esta instalado.');
End.

8. Descripción el setup de la PC, las opciones de configuración y los parámetros.

Para ingresar al mismo, se debe presionar la tecla <del> o <supr> al arrancar la máquina.

Para modificar los parámetros, se utilizan las teclas de <Av pag> y <Re pag>.

Para salir del menu actual, se presiona <ESC>.

Para grabar y salir, se presiona <F10>

Descripción de las opciones del menu

STANDARD CMOS SETTINGS

Contiene los parámetros básicos que normalmente deben ser ajustados para que el sistema funcione.

DATE

Fecha del sistema

TIME

Hora del sistema

DAYLIGHT SAVINGS

Si se lo habilita, adelantará y atrasará en una hora cuando comience el verano y el invierno, para el
Hemisferio Norte. Normalmente dejarlo deshabilitado, y que el Windows se encargue de esto.

IDE PRIMARY MASTER

Aquí se ingresan los parámetros físicos del disco IDE Primario, Maestro.

IDE PRIMARY SLAVE

Idem al anterior, para el IDE Primario, Esclavo. Normalmente es para el segundo disco duro físico, si lo
hay.

IDE SECONDARY MASTER

Idem al anterior, para el IDE Secundario, Maestro.

IDE SECONDARY SLAVE

23
Idem al anterior, para el IDE Secundario, Esclavo. Normalmente es ocupado por el CD Rom.

FLOPPY DRIVE A:

FLOPPY DRIVE B:

Aquí se ingresa el tipo de unidad de disketera que se tiene. Puede ser de 1.44 MB, de 1.2 MB, etc.
Normalmente: 1.44 MB. Para el A:, y en sistema con dos disketeras, para el A: 1.2 MB, y para el B: 1.44
MB.

VIDEO DISPLAY TYPE

Es el tipo de tarjeta de video que tiene el sistema. Normalmente es EGA/VGA, pero se debe poner el
tipo que está físicamente instalado.

HALT ON

Se especifica aquí qué tipos de errores harán detener al sistema, durante el POST ( Power on self test ).

All errors: El sistema se detendrá en todos los errores.

No errors: El POST no detendrá el sistema en ningún error.

All But keyboard: El sistema se detendrá en cualquier error, menos en el de teclado. Esto es útil si se
tiene un equipo sin teclado, por ejemplo un servidor de impresión, o un puente de red, etc.

All but Floppy: Todos los errores detendrán el sistema, menos en el de la disketera.

All but floppy/keyb: Todos los errores, menos el de teclado y el de disketera.

Normalmente se deja esta opción en All errors, salvo casos especiales, como los citados.

ADVANCED FEATURES

VIRUS PROTECTION

El Bios del sistema no tiene forma de saber si un programa tiene virus o no. Lo que esta opción hace es
detectar cuando un programa está intentando escribir en el sector de arranque del disco, siendo
probablemente un virus. Cuando esto ocurre emitirá una advertencia, solicitando autorización para esta
escritura. Si se responde que si, entonces se podrá escribir en el sector de arranque.

INTERNAL CACHE

Esta opción habilita la cache interna del procesador, de Nivel 1 ( Level 1 ).

EXTERNAL CACHE

24
Con esta opción se habilita la cache externa, conocida como cache nivel 2.

QUICK POWER ON SELF TEST

Si se habilita este ítem, la rutina de autotest inicial será más breve, pero se correrá el riesgo de no
detectar errores de memoria, por ejemplo, en el arranque.

MEMORY TEST TICK SOUND

El Post emitirá un sonido de tick cuando haga el chequeo de memoria.

BOOT SEQUENCE

Se fija aquí la secuencia de arranque. Si está en A,C, el sistema buscará primero el disco de arranque en
la unidad A:, y si está en C,A, el sistema lo buscará primero en C: y luego en A:

En los Setup más nuevos, que permiten hasta cuatro dispositivos IDE, se puede fijar cualquiera de los
dispositivos como de primera búsqueda, y en el orden en que se desee.

NUM LOCK STATUS ON POWER

Habilita el estado de la tecla numlock al arrancar, si estará on o off.

SWAP FLOPPY DRIVES

Intercambia el nombre de las disketeras A: y b:

FLOPPY DRIVE SEEK

Hará arrancar las disketeras en el proceso de boot.

TYPEMATIC DELAY

Controla la capacidad de repetición del teclado.

TYPEMATIC RATE

Estos ajustes controlan la tasa de repetición del teclado, cuando la característica de Typematic delay
está activa. Generalmente se expresa en caracteres por segundo.

Nota: Algunos teclados más nuevos tienen la capacidad de hacer este ajuste embutidos en los mismos, y
son el "key repeat" o el "repeat rate".

FAST A20/A20 GATE OPTION

25
Sirve para habilitar la línea 21 de direccionamiento. Antiguamente las XT no la necesitaban, pero a partir
de la AT se tuvo mayor capacidad de direccionamiento. Para que el chipset controle la línea de
direccionamiento, se debe habilitar esta opción.

VIDEO BIOS SHADOW

Cuando se habilita esta opción, la ROM BIOS de video se copia a un bloque de memoria RAM. Esto
acelera al sistema, ya que la RAM es más rápida que la ROM.

SYSTEM BIOS SHADOW

Esta opción copia el contenido de la ROM BIOS del sistema a la memoria RAM. Ya que el contenido de la
ROM BIOS es utilizado intensamente, habilitar esta opción aumenta bastante la velocidad del sistema.

C8000-CBFFF SHADOW

Esta opción copia el contenido de cualquier ROM que se tenga en este intervalo de direcciones, a la
memoria RAM, acelerando el rendimiento del sistema. Sin embargo, aquí las cosas son un poco más
complicadas, ya que algunas tarjetas utilizan tanto ROM como RAM, y mapean esta RAM como espacio
de direcciones también. Si las tarjetas hacen esto, y habilitamos el Shadow, la misma no funcionaría
adecuadamente ya que el shadow protege la memoria contra escritura, como si fuera una ROM.

Por eso, normalmente se deja deshabilitada ( disabled ) esta opción.

Nota: algunas placas permiten el shadow ( sombreamiento ), en bloques de 16 kb, y otras en bloques de
32 kb.

CC000-CFFFF SHADOW

D0000-D3FFF SHADOW

D4000-D7FFF SHADOW

D8000-DBFFF SHADOW

DC000-DFFFF SHADOW

Ver explicación del ítem anterior.

ADVANCED CHIPSET FEATURES

La mayoría de estos ítems son para un ajuste fino del desempeño de la memoria cache, la memoria ram,
los buses, etc, y optimizar el rendimiento.

CHIPSET SPECIAL FEATURES/GLOBAL FEATURES

Algunas placas tienen este ajuste genérico, que al ser habilitados, hace algo que aumenta la velocidad
del sistema. Hay que deshabilitar si se tienen problemas con máquinas que se cuelgan, o resetean.

26
CACHE TIMING

Este ítem determina la velocidad a la que el chipset leerá datos desde la cache externa ( Level 2 cache ).
Normalmente aparece como x-y-y-y. En este caso el parámetro se refiere al número de ciclos de clock
para hacer una lectura de 32 bytes en modo burst desde la línea de cache externa. Cada entrada en la
cache de una PC moderna es de 256 bits, y los datos son leídos desde la caché utilizando cuatro lecturas
consecutivas de 64 bits. La primera lectura es normalmente más lenta que las otras, portanto esta es la
"x" de arriba, y las próximas lecturas con las "y"s. Por ejemplo, 3-1-1-1, significa que la lectura tomará
un total de seis ciclos de reloj ( clock ).

En general, cuanto menores estos números, más rápido será el sistema. Esto depende del sistema, de la
memoria, de la velocidad del bus de memoria, etc. Si el BIOS soporta un "Auto" para este parámetro, es
recomendable usarlo. Se puede utilizar el método prueba-error, es decir, ir bajando los números, pero
hay que estar preparados para cuelgues, reseteos, inestabilidad, etc. Hasta encontrar los números
correctos.

LEVEL 2 CACHEABLE DRAM SIZE/ CACHE OVER 64 MB OF DRAM

Este parámetro controla cuánto de la memoria del sistema será cubierto por la cache de nivel 2. Utilizar
porciones de memoria sin "cachear" pueden reducir la velocidad del sistema. Hay que asegurarse que
este valor sea de cómo mínimo igual al total de memoria ram del sistema.

NOTA: Este parámetro no está presente en sistemas que tienen la cache de nivel 2 integrada ( Pentium
Pro, Pentium II, Celeron, Athlon, Duron, Pentium III etc. ).

LEVEL 2 CACHE SIZE

Las placas nuevas no tienen esta opción, ya que detectan automáticamente el tamaño de la memoria
cache de nivel 2 presente. Esta opción aparecía en las placas antiguas, en donde se escribía
manualmente cuánta cache se tenía instalada.

SYSTEM BIOS CACHEABLE

Habilitar esta opción permitirá que se "cachee" el BIOS del sistema, lo que aumentará la velocidad.

VIDEO BIOS CACHEABLE

Idem al anterior. Se deshabilita esta opción solamente en casos de inestabilidad del sistema.

DRAM PARITY CHECKING

Cuando se habilita, permite el chequeo de paridad de la memoria Ram del sistema. Se debe habilitarla
cuando se utiliza el control de paridad, y deshabilitarla si no.

NOTA: Si se habilita el control de paridad, y físicamente la memoria RAM instalada no tiene control de
paridad, el sistema se detendrá e indicará error de paridad. Lógicamente, si se tiene físicamente
instalada memoria RAM con control de paridad, y se deshabilita esta opción, el sistema funcionará
normalmente, pero obviamente, no se realizará el test de paridad.

DRAM PARITY/ECC MODE

27
Los sistemas más nuevos soportan los controles de paridad y de ECC ( Error correcting code ) para
corrección y detección de errores de memoria RAM. El ECC es un sistema más avanzado que el simple
control de paridad. Normalmente, se selecciona Parity.

SINGLE BIT ERROR REPORT

Si la placa madre posee el sistema ECC para errores de memoria RAM, significa que el hardware es capaz
de detectar y corregir errores de un solo bit ( single bit error ) automáticamente. En este caso, sería útil
saber cuándo ocurrió esto, para tener indicios prematuros de una posible falla de hardware. Habilitando
esta opción el sistema avisará cuando haga correcciones de un solo bit. Se recomienda habilitar esta
opción, si se tiene habilitado el sistema ECC. Si no, hay que deshabilitar.

DRAM SPEED/DRAM TIMING/ DRAM AUTOCONFIGURATION

La mayoría de los Setups vienen con una opción "Auto" para controlar automáticamente los tiempos de
la memoria del sistema. Estos ajustes generalmente vienen en una de estas dos formas:

• Dynamic Automatic Timing Setting: Cuando se pone en "Auto", el chipset detectará en el


arranque qué tipo de memoria y cache se tienen instalados, y automáticamente ajustará todos
los tiempos de acuerdo a lo que detecte. Esto asegura básicamente un buen rendimiento.

• Fixed timing Based on Memory Speed: En vez de tener una opción "Auto" algunos Bios
permiten seleccionar de entre una serie de velocidades de memoria comunes. Aquí se
encuentran opciones como 70ns, 60 ns, EDO, y "Manual".

NOTA: Cuando se tienen memorias de velocidades diferentes, se ajustará por la memoria de menor
velocidad.

DRAM R/W LEADOFF TIMING

Este parámetro controla cuántos ciclos de reloj (clock) son necesarios para el primer acceso a la
memoria durante una ráfaga de cuatro lecturas (burst). Utiliza la notación x-y-y-y, como explicado
anteriormente, la x se refiere a la primera lectura, y las "y" a las siguientes. La primera lectura es
siempre más lenta.

Los BIOS nuevos traen una opción de "Auto", que configura automáticamente estos parámetros para
una mayor velocidad.

NOTA: Algunos sistemas permiten configurar de manera diferente para la Lectura y para la Escritura, y
otros ambos a la vez.

DRAM READ TIMING/DRAM BURST READ TIMING/DRAM READ WAIT STATES

Este parámetro controla cuántos ciclos de reloj serán utilizados para la lectura en ráfagas (burst) de la
memoria. Similar al caso anterior, utiliza el formato x-y-y-y.

En algunas máquinas viejas, se les llama Wait States ( estados de espera ).

28
En algunas placas, se tienen dos parámetros, en formado x-y-y-y/x-y-y-y, en este caso el primero se
utilizará para la memoria Ram tipo EDO, y el segundo para cuando la memoria instalada sea del tipo
FPM ( Fast page Memory ).

DRAM WRITE TIMING/DRAM BURST WRITE TIMING/ DRAM WRITE WAIT STATES

Similar al anterior, pero para los ciclos de Escritura en la Ram dinámica.

DRAM SPECULATIVE LEADOFF

Algunas placas permiten acelerar el relativamente lento primer acceso a la memoria, lo que resulta en
mayor velocidad. Lo que la máquina hace es "engañar" al controlador de memoria iniciando el ciclo de
lectura aún antes de que la dirección necesaria haya sido completada. Si habilitar esta opción vuelve al
sistema inestable, hay que deshabilitarla.

TURN AROUND INSERTION

Cuando se habilita esta opción, se insertará un ciclo extra de clock entre ciclos consecutivos de lectura
de RAM dinámica. Normalmente el sistema es más lento, ya que este ciclo extra de espera no es
necesario. Claro que si el sistema está inestable, habilitándolo se podría tener una mejoría.

MEMORY HOLE AT 15 MB

Reserva estas direcciones de memoria para comunicarse con periféricos. Antiguamente esta área era
considerada como muy poco probable de alguna vez ser utilizada, portanto se la utilizó para
comunicación con discos duros.

Actualmente, se puede dejarla deshabilitada, a no ser que se tenga algún periférico que utilice esta
opción, lo que es bastante poco probable.

AT BUS CLOCK SPEED/DIVISOR

Esta parámetro controla la velocidad del bus ISA. Puede venir en dos formas: una es directamente con la
velocidad del bus en Megahertz ( 6 MHZ, 8 MHZ, por ejemplo ), y otra , la más común, es como una
fracción de la velocidad del bus PCI. ( PCICLK/3, PCICLK/4, PCICLK/6, etc.). Hay que elegir la opción que
esté más cerca de la velocidad estándar del ISA, que es 8.33 MHZ. Por ejemplo, para una máquina con
bus PCI de 33 MHZ, debe ajustarse en PCICLK/4, y para una máquina de 25 MHZ debe ponerse en
PCICLK/3, y para una de 66 MHz, en PCICLK/8, etc.

8 BIT I/O RECOVERY TIME

Este ajuste permite insertar ciclos de clock adicionales después de una solicitud de Entrada/Salida de 8
bits al bus ISA, que corre mucho más lentamente que el bus PCI. Por defecto se pone en 1 ciclo, pero se
puede poner hasta 5 o más. Dejar si es posible en el default.

16 BIT I/O RECOVERY TIME

Similar al anterior, pero de 16 bits.

PCI/PnP CONFIGURATION

29
Esta sección trata específicamente del bus PCI y de los ajustes del Plug and Play ( PnP ). Obviamente que
las placas que no poseen bus PCI no tendrán esta sección. Casi siempre el bus PCI se configura
automáticamente, pero para casos particulares es útil conocer los siguientes parámetros.

PLUG AND PLAY AWARE OS

Le indica al BIOS que el sistema operativo utilizado es compatible con Plug and Play. Así, si se habilita
esta opción, en el arranque, el BIOS buscará las tarjetas plug and play instaladas en el sistema.

Hay placas que directamente no tienen esta opción, sino que asumen que el sistema operativo es
compatible con Plug and Play, y siempre inicializarán las tarjetas.

PCI IDE BUS MASTER

Algunas placas tienen un ajuste específico para habilitar el bus mastering de discos duros IDE. Si se
utiliza el PCI bus mastering, se debe habilitar esta opción. Si no, dejarla deshabilitada.

AUTOMATIC RESOURCE ALLOCATION

Hay varios ajustes de la sección PCI/PnP que tratan con la asignación de interrupciones. Esto incluye las
IRQ normales, y los recursos internos de las interrupciones del bus PCI. En la mayoría de los casos no es
necesario seleccionar manualmente los recursos de interrupciones, así que se la deja en "Auto".

Cuando se elige "Auto", no se podrá modificar la opción que generalmente viene a continuación, que es
"PCI IRQ AND DMA SETTINGS". Para poder hacer esta configuración manualmente, se debe elegir la
opción "Manual".

PCI IRQ AND DMA SETTINGS

Cuando no se utiliza la asignación automática de recursos de interrupción, el BIOS permite designar


específicamente a cuales interrupciones del sistema y a cuales canales de DMA se desea usar para los
dispositivos PnP. Para cada IRQ o DMA se puede elegir entre "PCI/PnP" y "ISA legacy".

Normalmente, las IRQ que se pueden poner son IRQ 3,4,5,7,9,10,11,12,14 y 15. Los canales de DMA son
0,1,3,5,6,7, ya que los demás están reservados por otros dispositivos del sistema

Es preferible poner la opción automática, pero si el BIOS no tiene esta opción, es mejor poner todos en
la opción PCI/PnP, a menos que se tenga un problema con alguna tarjeta plug and play que esté
tomando recursos de otra tarjeta ISA, caso en el cual sería bueno poner para esa IRQ en cuestión, la
opción ISA legacy.

NOTA: a veces cuando se selecciona la opción "Auto" para los ajustes PCI, esta sección o no se puede
cambiar, o directamente desaparece de pantalla, para que no se pueda cambiar accidentalmente.

1ST / 2ND / 3RD / 4TH AVAILABLE PCI INTERRUPT

Los buses PCI utilizan su propio esquema de interrupciones, y normalmente se llaman #1, #2, #3, #4, o
bien #A, #B; #C; #D. Algunas tarjetas PCI necesitan ser capaces de utilizar una de las líneas de IRQ
normales del sistema, para comunicarse con el procesador. Este ajuste mapea las interrupciones del PCI

30
a interrupciones IRQ normales, diciéndole al BIOS cual línea de interrupción debe usar para las tarjetas
PCI que necesiten una. Generalmente se utilizan las IRQ9, IRQ10, IRQ11 e IRQ12.

Esta opción no aparece si se eligió la configuración automática.

PCI/VGA PALETTE SNOOP

La paleta VGA es el conjunto de colores que utiliza la tarjeta de video cuando está en modo de 256
colores. Ya que hay miles de colores, y solamente se pueden usar 256 a la vez, se utiliza una paleta de
colores que contiene los colores en uso. Algunas tarjetas VGA especiales, o decodificadores MPEG por
hardware, necesitan chequear la paleta VGA para verificar los colores en uso. Habilitando esta opción,
se permite que la tarjeta haga eso.

Esta opción es muy rara de usar en una máquina de escritorio común.

POWER MANAGEMENT

En esta sección aparecen los parámetros para controlar el sistema de ahorro de energía de la placa
madre. Normalmente se lo deshabilita. En caso de habilitarse, se tendrán opciones que controlarán la
actividad del teclado, del mouse, y de otros periféricos que pueden ser seleccionados a través de su
correspondiente IRQ. Cuando no se detecte actividad en esas IRQs o en los periféricos, el chipset
deshabilitará el video, apagando el monitor, y enviará al procesador a un estado de menor consumo de
energía. Apenas se detecte actividad en cualquiera de los periféricos "monitoreados" por el sistema de
ahorro de energía, se volverá a la normalidad.

NOTA: No todos los monitores son compatibles con la norma de ahorro de energía DPMI, portanto se
debe chequearlos muy bien antes de habilitar esta opción, porque corremos el riesgo de dañar el
monitor.

INTEGRATED PERIPHERALS

Las placas madre actuales ya traen integradas las interfaces para disco duro, disqueteras, puertos
seriales, y puertos paralelos. En algunos modelos inclusive ya viene integrada la tarjeta de video, de
sonido, y otros, que también aparecerán en esta sección si así fuera.

INTEGRATED FLOPPY DISK CONTROLLER

Habilita o deshabilita la controladora de disquetera (FDC) integrada. Siempre se habilita esta opción, a
menos que se tenga otra controladora de disquetera insertada en una ranura de expansión.

INTEGRATED IDE CONTROLLERS

Habilita o deshabilita la controladora de disco duro. Si se tiene una tarjeta controladora IDE insertada en
una ranura de expansión, o si no se tienen dispositivos IDE (por ejemplo si solo se tienen discos duros
SCSI), se puede deshabilitar esta controladora.

Esta interface IDE tiene dos canales, cada uno de los cuales tiene un maestro y un esclavo, por tanto se
pueden conectar hasta cuatro dispositivos IDE. Algunas placas permiten elegir cuál controladora se
habilitará, si la primaria, la secundaria, ninguna o ambas.

31
Normalmente se habilitan ambos canales, el primario y el secundario, que aparece como "both", que
significa ambos en inglés.

INTEGRATED SERIAL PORT1/SERIAL PORT 2

En esta sección se especifican los recursos para el puerto serial 1 y el puerto serial 2. Así se pueden
especificar exactamente cuáles direcciones de Entrada/salida e interrupciones IRQ utilizarán los puertos
seriales que pueden ser controlados por el BIOS, que son el COM1, COM2, COM3 Y COM4.

INTEGRATED PARALLEL PORT

Similar al caso anterior, pero para el control de los puertos paralelos, conocidos como LPT1 Y LPT2.

INTEGRATED PARALLEL PORT MODE

Los puertos paralelos tienen diversos modos de operación. Originalmente los puertos paralelos eran de
una sola dirección, desde la PC hacia el periférico. Actualmente se utilizan los puertos paralelos
bidireccionales. Las opciones más comunes son:

SPP: Puerto paralelo estándar. Es la opción por defecto ( y más lenta )

EPP: También llamado puerto paralelo bidireccional.

ECP: Utilizando un canal de DMA, permite mayor velocidad. Se utiliza en casos cuando se tiene escáner,
unidad Zip, impresora a chorro de alta velocidad, etc.

PARALLEL PORT ECP DMA CHANNEL

Si el sistema utiliza el modo ECP para el puerto paralelo, en esta parte se configura si cuál canal de DMA
utilizará. Generalmente se opta por el DMA1 o el DMA3.

PS2 MOUSE ENABLE

Algunas placas poseen un puerto dedicado para el mouse, liberando el puerto serial que normalmente
se utiliza. Para habilitar este puerto de mouse, se utiliza esta opción.

USB ENABLE

Habilita el bus serial universal, utilizado por algunos periféricos nuevos.

IDE AUTO DETECTION AND CONFIGURATION

Esta opción permite detectar automáticamente la configuración de Cilindros, Cabezas y Sectores (CHS) y
modo de acceso a los dispositivos IDE instalados en el sistema, que son normalmente discos duros y
lectoras de CD, o DVD.

Obviamente, si el disco duro o la lectora láser instalados son del tipo SCSI, no detectará nada.

SET PASSWORD

32
Para guardar una contraseña de acceso al software de Setup.

Estas son las opciones más comunes en los software de Setup actuales. A medida que van apareciendo
procesadores y placas con chipsets mejorados, éstas irán evolucionando.

33

Das könnte Ihnen auch gefallen