logotipo

img_google

La cacharrería.

Para que algunos conceptos que utilizaremos durante el curso no os suenen a chino, vamos a dedicar este capítulo a explicar unas pocas ideas sobre la organización y el funcionamiento de nuestro querido PC. :)
 

Estructura de la memoria.

Como os daréis cuenta a lo largo de esta explicación, la organización de la memoria en un PC no es que sea algo para elogiar. La razón es la falta de previsión que tuvieron los primeros desarrolladores de PCs en el año 1980, cuando dotaron a los primeros sistemas de una memoria de 16 KB y planificaron una necesidad máxima de 640 Kb, además, como el procesador que iba a gobernar esa arquitectura, el 8086 y 8088 de Intel, tenía un espacio de direcciones de 1MB, añadieron a esa memoria principal un área RAM para video, otra para la ROM-BIOS, para cartuchos ROM, vamos, que derrochaban todo lo que les sobraba y yo hoy me tengo que pegar para conseguir 5 Kb más de convencional :)

Toda esta memoria se administra en base a segmentos de 64 Kb, esto es debido a que el tipo de direccionamiento que escogieron para poder referenciar todas las posiciones de memoria fue el direccionamiento segmentado. Pero para ésto sí existe una explicación más lógica.

La tecnología de aquella época tan lejana :) solo permitía construir registros de 16 bits, (hoy en día me parece que vamos por 64 bits). Como la cantidad de memoria que puede ser direccionada depende directamente de la longitud de un registro, llamado registro de direcciones, con 16 bits se puede acceder a 2 a la 16=64 Kb. Para gobernar 1 Mb se necesitaba un registro de 20 bits, imposible para aquella época, de este modo, se optó por utilizar dos registros de 16 bits, a uno de ellos (registro de segmento) lo desplazamos cuatro posiciones a la izquierda (o se multiplica por 16) y le sumamos el otro registro (registro de desplazamiento) tal y como está, consiguiendo así nuestra dirección de 20 posiciones.

Como veis este tipo de direccionamiento es un poco lioso, y mucho más si lo comparamos con el direccionamiento lineal, donde se trata a la memoria como una 'línea' de direcciones todas consecutivas. Esta técnica se utiliza en otras arquitecturas, como la basada en los procesadores de la familia del 68000 de Motorola, (yo he trabajado con estos procesadores y creedme no hay ni punto de comparación en ese aspecto y en muchos otros), esos procesadores son los que se utilizan para programar los videojuegos de verdad, (sí, sí, los de las máquinas recreativas) y no me extraña nada. :)

Si tan mala es esa organización de la memoria, por qué seguimos utilizándola, si hoy en día disponemos de microprocesadores que direccionan hasta 4 Gb y registros de 64 bits, pues echarle la culpa a esas 4000 líneas de código que en su día fue el MS-DOS 1.0, el por qué del auge que tuvo este sistema operativo es un tema que supongo todos conoceréis, por lo que no voy a seguir con la clase de historia..... :)

Os muestro, para terminar con el apartado de la memoria, la organización en bloques de 64 Kb de la memoria del PC:

           Función                    Dirección         Bloques de 64 KB
           -------                    ---------         ----------------
       Memoria principal        0000:0000 - 9000:FFFF         10
       RAM video (EGA/VGA)      A000:0000 - A000:FFFF          1
       RAM de video             B000:0000 - B000:FFFF          1
       BIOS-ROM adic.           C000:0000 - C000:FFFF          1
       Cartuchos-ROM            D000:0000 - D000:FFFF          1
       Cartuchos-ROM            E000:0000 - E000:FFFF          1
       BIOS-ROM                 F000:0000 - F000:FFFF          1

Registros.

Uno de los componentes más importantes de un procesador son los registros. En ellos podemos cargar datos de la memoria de 16 y 8 bits, operar con ellos y luego devolverlos a la RAM; ésto lo realizaremos siempre que podamos, ya que trabajar con los registros es mucho más rápido que trabajar con la memoria directamente, debido a que no se necesita acceder a los buses del ordenador. Cuando he dicho 16 y 8 bits, me gustaría recordaros que aunque el tamaño de los registros a partir del 386 es de un mínimo de 32 bits, no se puede acceder a la totalidad de los mismos debido a que en DOS trabajamos en modo el Real. Pufff :)

        Existen cuatro tipos de registro según su función:
 

 
Estos dos últimos tipos se utilizan conjuntamente para formar la dirección de 20 bits que nombramos antes. Se suelen asociar según el orden con que fueron enumerados.

Cada registro de segmento tiene un objetivo diferente:

Puertos.

Se usan para la comunicación entre los programas y el hardware.Existen puertos de entrada y/o salida y cada uno tiene una dirección entre 0 y 65535. Las direcciones que referencian a cada puerto no son impuestas por el sistema, sino que dependen de las propias tarjetas y aunque existe una organización estándar, la mayoría de los fabricantes permite modificar los puertos de sus tarjetas por si surgen problemas.

El comunicarse con los puertos es semejante a trabajar con la memoria. Para utilizarlos se hará uso de las instrucciones máquina in y out. Los puertos para nosotros serán el más bajo nivel en el que trabajaremos, ya que leer o escribir datos en un puerto es 'hablar' directamente con la máquina sin necesidad de 'traductores' como la BIOS, pero ¡Ojo! hay que tener cuidado porque pueden saltar chispas. :)
 

Interrupciones.

Las interrupciones son una manera de llamar la atención de la CPU cuando se necesita su acción, si no existiesen, ésta gastaría su precioso tiempo en preguntar a todos los dispositivos si quieren sus servicios ( método llamado polling). Su función es controlar el hardware y servir de contacto entre los programas y las funciones de la BIOS y el DOS.

Existen dos tipos de interrupciones, software y hardware:
 

Tabla de interrupciones.

Es una estructura que se crea durante la puesta en marcha del ordenador y se sitúa en la parte más baja de la memoria, segmento 0 y desplazamiento 0, tiene 256 entradas de 4 bytes cada una, en total 1 kb de longitud. Su funcionamiento es el siguiente, cuando nosotros hacemos uso de una función de la BIOS o DOS, utilizamos una rutina que se encuentra en algún lugar de la ROM-BIOS, pero no sabemos su dirección, únicamente conocemos su número de interrupción. Este se utilizará como índice en dicha tabla, para que el sistema recupere la verdadera dirección del servicio requerido. Las interrupciones hardware también tienen asignada una entrada en esta tabla donde estará la dirección de la rutina que las atiende.

Por lo tanto, quede claro que cada entrada de 4 bytes en la tabla es una dirección, formada por 2 bytes del segmento y 2 del desplazamiento. Este indireccionamiento permite a los fabricantes de PC , usar sus propias rutinas ROM-BIOS, teniendo únicamente que poner la dirección de éstas, en la correspondiente posición de la tabla . Las nuevas rutinas, tendrán que tener los mismos parámetros y devolver los mismos valores que las funciones originales, así los usuarios y aplicaciones no distinguirán, unas rutinas de otras. Pero lo que a nosotros nos interesa es que también podemos sustituir esas direcciones, por la ídem de una rutina que hayamos creado nosotros, controlando así distintos sucesos como a nosotros nos interese. :)

Bueno con la somera explicación del funcionamiento de la tabla de interrupciones doy por terminado este artículo sobre el hardware del PC. Para que veáis como funcionan todas estas herramientas en un lenguaje determinado, (PASCAL) y con un objetivo determinado, (control del teclado) consultar el artículo sobre el teclado donde se utilizan todos estos recursos de la máquina y se dan más detalles 'sobre la marcha'. :)
 
 


[ Anterior | Índice | Siguiente ]

La última versión de este texto se podrá encontrar en Internet, en la dirección:
www.pobox.com/users/ncabanes/