Índice general, Mostrar marcos, Sin marcos

Capítulo 1
Aspectos básicos del hardware

Un sistema operativo debe trabajar íntimamente con el hardware que le sirve de cimientos. El sistema operativo necesita ciertos servicios que solo pueden suministrar el hardware. Para entender totalmente el sistema operativo Linux, se necesita entender los aspectos básicos del hardware que hay debajo. Este capítulo muestra una breve introducción a dicho hardware: el PC moderno.

Cuando el número de Enero de 1975 de la revista ``Popular Electronics'' salió impreso con una ilustración del Altair 8080 en su portada, comenzó una revolución. El Altair 8080, llamado así por el lugar de destino de uno de los primeros episodios de Star Trek, podía ser ensamblado por entusiastas de la electrónica doméstica por sólo unos $397. Con su procesador Intel 8080 y 256 bytes de memoria, pero sin pantalla ni teclado, era una baratija según los estándares actuales. Su inventor, Ed Roberts, acuñó el término ``computadora personal'' (personal computer) para describir su nuevo invento, pero el término PC se usa ahora para referirse a casi cualquier ordenador que una persona puede levantar del suelo sin necesidad de ayuda. Siguiendo esta definición, incluso algunos de los muy poderosos sistemas Alpha AXP son PCs.

Los hackers entusiastas vieron el potencial del Altair, y comenzaron a escribir software y construir hardware para él. Para esos primeros pioneros representaba libertad; liberarse de los enormes sistemas ``mainframe'' con sus colas de proceso, administrados y protegidos por una élite clerical. Grandes fortunas fueron hechas de la noche a la mañana por gente que abandonaba los estudios fascinados por este nuevo fenómeno, una computadora que se podía tener en casa sobre la mesa de la cocina. Una gran cantidad de hardware estaba apareciendo, cada uno diferente de los demás hasta cierto punto, y los hackers del software estaban felices de escribir software para esas nuevas máquinas. Paradójicamente, fue IBM quien cinceló el molde del PC moderno anunciando el IBM PC en 1981, y sirviéndoselo a los compradores a principios de 1982. Con su procesador Intel 8088, 64K de memoria (expandible a 256K), dos unidades de discos flexibles y un Adaptador de Gráficos en Color (Colour Graphics Adapter - CGA) de 80 caracteres por 25 líneas, no era muy poderoso según los estándares actuales, pero se vendió bien. Fue seguido, en 1983, por el IBM PC-XT, que contaba con el lujo de un disco duro de 10Mbyte. No pasó demasiado tiempo hasta que los clones del IBM PC comenzaron a ser producidos por una hueste de compañías como por ejemplo Compaq, y la arquitectura del PC se convirtió en un estándar de hecho. Este estándar de hecho ayudó a una multitud de empresas de hardware a competir entre ellas en un mercado creciente que, para alegría de los consumidores, mantuvo los precios bajos. Muchas de las características arquitectónicas del sistema de aquellos primitivos PCs se han mantenido hasta llegar al PC moderno. Por ejemplo, incluso el más poderoso sistema basado en el Pentium Pro de Intel arranca en el modo de direccionamiento del Intel 8086. Cuando Linus Torvalds comenzó a escribir lo que se convertiría en Linux, escogió el hardware más completo y de precio más razonable, un PC Intel 80386.


Figure 1.1: Una placa madre de PC típica.

Mirando un PC desde fuera, los componentes más obvios son una caja de sistema, un teclado, un ratón y un monitor de vídeo. En el frente de la caja del sistema hay algunos botones, un pequeño indicador que muestra algunos números y una disquetera. La mayoría de los sistemas actualmente tienen un CD ROM, y si uno siente que debe proteger sus datos, entonces habrá también una unidad de cinta para copias de seguridad. Esos dispositivos se conocen de modo colectivo como periféricos.

Aunque la CPU controla todo el sistema, no es el único dispositivo inteligente. Todos los controladores de periféricos, por ejemplo el controlador IDE, tienen algún nivel de inteligencia. Dentro del PC (Figura  1.1) se puede ver una placa madre que contienen la CPU o microprocesador, la memoria y un número de conectores (slots) para los controladores de periféricos ISA o PCI. Algunos de los controladores, por ejemplo el controlador de disco IDE, pueden estar integrados en la placa del sistema.

1.1  La CPU

La CPU, o mejor, microprocesador, es el corazón de cualquier computadora. El microprocesador calcula, realiza operaciones lógicas y gestiona flujos de datos leyendo instrucciones desde la memoria y ejecutándolas. En los primeros días de la informática los componentes funcionales del microprocesador eran unidades separadas (y grandes físicamente). Fue entonces cuando se acuñó el término Unidad Central de Proceso (Central Processing Unit). El microprocesador moderno combina esos componentes en un circuito integrado, grabado en una pequeña pieza de silicio. Los términos CPU, microprocesador y procesador se usan de manera intercambiable en este libro.

Los microprocesadores operan sobre datos binarios; estos son datos compuestos de unos y ceros. Estos unos y ceros corresponden a interruptores eléctricos que están encendidos o apagados. Igual que 42 es un número decimal que significa ``4 decenas y 2 unidades'', un número binario es una serie de dígitos binarios, cada uno representando una potencia de 2. En este contexto, una potencia significa el número de veces que un número es multiplicado por si mismo. 10 elevado a 1 ( 101 ) es 10, 10 elevado a 2 ( 102 ) es 10x10, 103 es 10x10x10 y así sucesivamente. 0001 en binario es 1 en decimal, 0010 en binario es 2 en decimal, 0011 en binario es 3, 0100 en binario es 4, y así sucesivamente. Así, 42 en decimal es 101010 en binario ó (2 + 8 + 32 ó 21 + 23+ 25 ). En vez de usar el binario para representar números en los programas de computadora, otra base, la hexadecimal, es la que se usa normalmente. En esta base, cada dígito representa una potencia de 16. Como los números decimales van sólo de 0 a 9, los números del 10 al 15 se representan con un único dígito usando las letras A, B, C, D, E y F. Por ejemplo, E en hexadecimal es 14 en decimal y 2A en hexadecimal es 42 en decimal ((dos veces 16) + 10). Usando la notación del lenguaje de programación C (como hago a lo largo de este libro) los números hexadecimales llevan el prefijo ``0x''; el hexadecimal 2A se escribe como 0x2A .

Los microprocesadores pueden realizar operaciones aritméticas como sumar, multiplicar y dividir, y operaciones lógicas como ``¿es X mayor que Y?''.

La ejecución del procesador viene gobernada por un reloj externo. Este reloj, el reloj del sistema, envía pulsos de reloj regulares al procesador y, a cada pulso de reloj, el procesador hace algún trabajo. Por ejemplo, un procesador podría ejecutar una instrucción a cada pulso de reloj. La velocidad del procesador se describe en términos de la frecuencia de pulsos del reloj del sistema. Un procesador de 100Mhz recibirá 100 000 000 pulsos de reloj cada segundo. Puede llevar a confusión describir la potencia de una CPU por su frecuencia de reloj ya que diferentes procesadores realizan diferentes cantidades de trabajo a cada pulso de reloj. De todos modos, si el resto de las características son iguales, una mayor velocidad de reloj significa un procesador más potente. Las instrucciones ejecutadas por el procesador son muy simples; por ejemplo ``copia en el registro Y el contenido de la posición X de la memoria''. Los registros son el almacén interno del microprocesador, se usan para almacenar datos y realizar operaciones sobre ellos. Las operaciones realizadas pueden hacer que el procesador deje de hacer los que estaba haciendo y salte a otra instrucción en otra parte de la memoria. Estos pequeños ladrillos dan al microprocesador moderno un poder casi ilimitado ya que puede ejecutar millones o incluso miles de millones de instrucciones por segundo.

Las instrucciones deben ser obtenidas de la memoria para irlas ejecutando. Las propias instrucciones pueden hacer referencia a datos en la memoria, y esos datos deben ser obtenidos de la memoria y guardados en ella cuando se requiera.

El tamaño, número y tipo de registros dentro de un microprocesador depende enteramente de su tipo. Un procesador Intel 486 tiene un conjunto diferente de registros que un procesador Alpha AXP; para empezar, los del Intel son de 32 bits de ancho, y los del Alpha AXPson de 64 bits. En general, sin embargo, cualquier procesador tendrá un número de registros de propósito general y un número menor de registros dedicados. La mayoría de los procesadores tiene los siguientes registros de propósito específico o dedicados:

Contador de Programa (Program Counter - PC)
Este registro contiene la dirección de la siguiente instrucción a ejecutar. Los contenidos del PC se incrementan automáticamente cada vez que se obtiene una instrucción.

Puntero de Pila (Stack Pointer - SP)
Los procesadores deben tener acceso a grandes cantidades de memoria de acceso aleatorio (random access memory - RAM) externa para lectura y escritura, que facilite el almacenamiento temporal de datos. La pila es una manera de guardar y recuperar fácilmente valores temporales en la memoria externa. Normalmente, los procesadores tienen instrucciones especiales que permiten introducir (push) valores en la pila y extraerlos (pop) de nuevo más tarde. La pila funciona en un régimen de ``último en entrar, primero en salir'' (last in first out - LIFO). En otras palabras, si uno introduce dos valores, x e y, en una pila, y luego extrae un valor de dicha pila, obtendrá el valor y.

Las pilas de algunos procesadores crecen hacia el final de la memoria mientras que las de otros crecen hacia el principio, o base, de la memoria. Algunos procesadores permiten los dos tipos, como por ejemplo los ARM.

Estado del Procesador (Processor Status - PS)
Las instrucciones pueden dar lugar a resultados; por ejemplo ``es el contenido del registro X mayor que el contenido del registro Y?'' dará como resultado verdadero o falso. El registro PS mantiene esa y otra información sobre el estado del procesador. Por ejemplo, la mayoría de los procesadores tienen al menos dos modos de operación, núcleo (o supervisor) y usuario. El registro PS mantendrá información que identifique el modo en uso.

1.2  Memoria

Todos los sistemas tienen una jerarquía de memoria, con memoria de diferentes velocidades y tamaños en diferentes puntos de la jerarquía. La memoria más rápida se conoce como memoria caché (o tampón) y es una memoria que se usa para almacenar temporalmente contenidos de la memoria principal. Este tipo de memoria es muy rápida pero cara, por tanto la mayoría de los procesadores tienen una pequeña cantidad de memoria caché en el chip y más memoria caché en el sistema (en la placa). Algunos procesadores tienen una caché para contener instrucciones y datos, pero otros tienen dos, una para instrucciones y la otra para datos. El procesador Alpha AXP tiene dos memorias caché internas; una para datos (la Caché-D) y otra para instrucciones (la Caché-I). La caché externa (o Caché-B) mezcla los dos juntos. Finalmente está la memoria principal, que comparada con la memoria caché externa es muy lenta. Comparada con la caché en la CPU, la memoria principal se arrastra.

Las memorias caché y principal deben mantenerse sincronizadas (coherentes). En otras palabras, si una palabra de memoria principal se almacena en una o más posiciones de la caché, el sistema debe asegurarse de que los contenidos de la caché y de la memoria sean los mismos. El trabajo de coherencia de la caché es llevado a cabo parcialmente por el hardware y parcialmente por el sistema operativo. Esto es cierto también para un número de tareas principales del sistema, donde el hardware y el software deben cooperar íntimamente para alcanzar sus objetivos.

1.3  Buses

Los componentes individuales de la placa del sistema están conectados entre sí por sistemas de conexión múltiple conocidos como buses. El bus de sistema está dividido en tres funciones lógicas; el bus de direcciones, el bus de datos y el bus de control. El bus de direcciones especifica las posiciones de memoria (direcciones) para las transferencias de datos. El bus de datos contiene los datos transferidos El bus de datos es bidireccional; permite escribir datos en la CPU y leerlos desde la CPU. El bus de control contiene varias lineas que se usan para dirigir señales de sincronismo y control a través del sistema. Existen muchos tipos de bus, por ejemplo los buses ISA y PCI son formas populares de conectar periféricos al sistema.

1.4  Controladores y periféricos

Los periféricos son dispositivos reales, como tarjetas gráficas o discos controlados por chips controladores que se encuentran en la placa del sistema, o en tarjetas conectadas a ella. Los discos IDE son controlados por el chip controlador IDE, y los discos SCSI por los chips controladores de disco SCSI, y así sucesivamente. Estos controladores están conectados a la CPU y entre ellos por una variedad de buses. La mayoría de los sistemas construidos actualmente usan buses PCI e ISA para conectar entre sí los principales componentes del sistema. Los controladores son procesadores como la propia CPU, se pueden ver como asistentes inteligentes de la CPU. La CPU tiene el control sobre todo el sistema.

Todos los controladores son diferentes, pero usualmente tienen registros que los controlan. El software que se ejecute en la CPU debe ser capaz de leer y escribir en esos registros de control. Un registro puede contener un estado que describa un error. Otro puede ser usado para propósitos de control; cambiando el modo del controlador. Cada controlador en un bus puede ser accedido individualmente por la CPU, esto es así para que el software gestor de dispositivos pueda escribir en sus registros y así controlarlo, La banda IDE es un buen ejemplo, ya que ofrece la posibilidad de acceder a cada unidad en el bus por separado. Otro buen ejemplo es el bus PCI, que permite acceder a cada dispositivo (por ejemplo una tarjeta gráfica) independientemente.

1.5  Espacios de direcciones

El bus del sistema conecta la CPU con la memoria principal y está separado de los buses que conectan la CPU con los periféricos. El espacio de memoria en el que existen los periféricos hardware se conoce colectivamente como espacio de I/O (por Input/Output, Entrada/Salida). El espacio de I/O puede estar subdividido a su vez, pero no nos preocuparemos demasiado sobre eso de momento. La CPU puede acceder a la memoria en el espacio del sistema y a la memoria en el espacio de I/O, mientras que los controladores sólo pueden acceder a la memoria en el espacio del sistema indirectamente, y sólo con la ayuda de la CPU. Desde el punto de vista del dispositivo, digamos un controlador de disquetes, verá sólo el espacio de direcciones en el que se encuentran sus registros de control (ISA) y no la memoria del sistema. Típicamente, una CPU tendrá instrucciones separadas para acceder al espacio de memoria y al espacio de I/O. Por ejemplo, puede haber una instrucción que signifique ``lee un byte de la dirección de I/O 0x3f0 y ponlo en el registro X''. Así es exactamente como controla la CPU a los periféricos hardware del sistema, leyendo y escribiendo en sus registros en el espacio de I/O. En qué lugar del espacio I/O tienen sus registros los periféricos comunes (controlador IDE, puerta serie, controlador de disco flexible, y demás) ha sido definido por convenio a lo largo de los años conforme la arquitectura del PC se ha desarrollado. Sucede que la dirección 0x3f0 del espacio I/O es la dirección de uno de los registros de control de la puerta serie (COM1).

Existen ocasiones en las que los controladores necesitan leer o escribir grandes cantidades de datos directamente desde o a la memoria del sistema. Por ejemplo, cuando se escriben datos del usuario al disco duro. En este caso, se usan controladores de Acceso Directo a Memoria (Direct Memory Access - DMA) para permitir que los periféricos hardware accedan directamente a la memoria del sistema, pero este acceso está bajo el estricto control y supervisión de la CPU.

1.6  Cronómetros

Todos los sistemas operativos necesitan saber la hora, y así, el PC moderno incluye un periférico especial llamado el Reloj de Tiempo Real (Real Time Clock - RTC). Este dispositivo suministra dos cosas: una hora del día fiable y un cronómetro preciso. El RTC tiene su propia batería, de forma que siga funcionado incluso cuando el PC no esté encendido, así es como el PC ``sabe'' siempre la fecha y hora correctas. El cronómetro permite que el sistema operativo planifique de manera precisa el trabajo esencial.


File translated from TEX by TTH, version 1.0.
Inicio del capítulo, Índice general, Mostrar marcos, Sin marcos
© 1996-1998 David A Rusling derechos de autor.