|
Que ocurre desde que pulsamos el botón hasta el arranque Parte I
Introduccion
El Técnico
Que ocurre desde que pulsamos el botón hasta el arranque
Parte I
Bueno.... esto puede ser un tema inmenso y voy a intentar escribirlo. Con esto
quiero decir que esto promete ser una "saga" que iré escribiendo poco a poco y
que intentaré que no se haga "pesada" y por tanto intentaré no entrar en
detalles técnicos. Por ello, ruego a los "técnicos" que me concedan la licencia
de intentar expresarlo de la manera más sencilla, y con ejemplos que no "son"
del todo verdad técnicamente, pero que se aproximan a lo que queremos explicar.
INTRODUCCION
Antes de ponernos en tarea, meditemos un poco sobre nuestros hijos, por ejemplo
(quien los tenga). Nuestro hijo, no será quizá el mejor, él más guapo, él mas
listo y él más atlético de su clase. Pero s nuestro hijo y lo conocemos
perfectamente. Sabemos de que pié cojea y sabemos como podemos orientarlo...
Bien, nuestro PC debe ser algo similar (salvando las distancias). No tiene
porqué ser el mejor del mercado, pero es "nuestro" PC, y por tanto, debemos
conocerlo, y sabremos como "manejarlo" antes situaciones extrañas. Debemos
perderlo el miedo. Conocer todo sobre él. No hace falta ser un técnico (no hace
falta ser un medico para saber sobre la salud de nuestro hijo), simplemente unos
conocimientos superficiales y perderle el miedo....
PULSAMOS EL BOTON DE ENCENDIDO Y.....
Acabamos de pulsar el botón de encendido. ¿Y que pasa?.. Bien, nada mas encender
el ordenador, se empieza a ejecutar un programa que está grabado internamente en
nuestro PC. La maquina lo que hace es ir a una determinada posición de la
memoria, y lo que está allí se lo da directamente al procesador para que empiece
a ejecutarlo.
Por tanto, nuestra "memoria" del PC, no está tan vacía como parece.... algo debe
contener. Este algo es un programa que reside en un chip de memoria llamado BIOS
ROM y que al encender el PC, ocupa una posición FIJA de memoria en cualquier PC.
Siempre la misma.
BIOS
Antes lo hemos descrito como un programa. Realmente es un programa y además es
el único programa que conoce exactamente (o debe conocer) las tripas de nuestro
PC.
Debemos pensar que realmente en el mundo, hay bastantes fabricantes de placas
madre. Y muy pocos fabricantes de BIOS. Los fabricantes de BIOS (Award, AMI,
Phoenix, etc.) lo que tienen son unos modelos de bios semi-estándar (por ejemplo
la versión 4.51 PG de Award) y lo que hacen, bajo pedido del fabricante de la
placa madre, es adaptar "su" estándar de bios, a "esa" placa madre. Por tanto,
fijémonos que la versión 4.51 PG de Award, se ejecuta en muchas maquinas
totalmente diferentes, y resulta que la bios es totalmente diferente. Es
especifica para "esa" placa madre (y de cara al exterior, lo que pasa es que
cumple la funcionalidad de la 4.51 PG -que será una norma interna fijada por el
fabricante de la bios-).
Por eso, y por ser un programa, cuando hablamos de "actualizar" la bios, podemos
efectivamente "sustituirlo" por una versión superior. Pero, para ello, debemos
buscar la "versión" de la bios 4.51 PG de Award para "nuestra" placa madre. Y
únicamente, podremos buscarlo en el Web del fabricante de "nuestra" placa madre.
Sí el fabricante es una marca "puntera" se preocupará de pedir a Award
revisiones y mejoras de sus bios. Si es una marcar "cutre", pues probablemente
la placa madre "muera" con la misma revisión de la bios que teníamos al
adquirirla.
Y ahora una pregunta ¿por qué se llama ROM? ROM quiere decir "Read Only Memory",
es decir "Memoria de Solo Lectura", y si es de solo lectura ¿como podemos
actualizar la bios?. Bueno,.... en un principio, las ROM eran de solo lectura.
Actualmente el termino ROM es un poco más amplio: Se entiende por ROM aquella
memoria que cuando se apaga de la corriente, no tiene perdida de datos, y por
tanto es susceptible además de ser actualizable (memorias de tipo EPROM). Por
tanto con un programa especifico podremos actualizarlo.
Esto tiene un problema: sí existen programas capaces de actualizarla, ¿no podrán
existir virus que sean capaces de borrarla?.... Pues por desgracia: sí. Y tiene
muy malas soluciones el tema. Pensemos que si nuestra bios está dañada, bien por
un virus, o bien porque hemos intentado actualizarla y se ha ido la corriente en
ese momento, o bien porque nos hemos equivocado y hemos bajado del Web un
archivo de actualización que no es para nuestro "exacto" modelo de placa
madre... en ese caso, nuestro ordenador no volverá a la vida. Es más, ni se
iluminará la pantalla, ni hará intento de arrancar de disco o desde disquete.
Nada: muerto.
Las BIOS son configurables. Es decir podemos entrar en una serie de pantallas al
iniciar el ordenador para poner o quitar algunos parámetros que puede hacer que
nuestra maquina responda mejor ante un determinado hardware, o determinado
sistema operativo. En muchas de las BIOS, podemos entrar justo nada mas encender
el ordenador, pulsando la tecla "DEL" (borrar) o la tecla "ESC". Otras bios
pueden requerir otra combinación de teclas.
CONFIGURACION DE LA BIOS
Siempre es aconsejable, nada mas adquirir un ordenador, el entrar en la BIOS y
apuntarnos TODO lo que tienen las pantallas de definición. En ciertas maquinas
(y además, con ciertas impresoras), la tecla "Imprimir Pantalla" funciona. Pero
no suele ser lo habitual, por lo que nos tendremos que armar de paciencia,
bolígrafo y papel, y a escribir....
Esto puede que nos saque de algún apuro alguna vez.
En principio, no se debe andar toqueteando en la bios, pero es conveniente
intentar dejarla lo mas acorde con las necesidades de nuestro sistema operativo.
Hay que recordar que el MSDOS y todas las versiones de Windows (excepto el NT),
se apoyan "excesivamente" en la bios.
Recordemos los parámetros que podemos tocar (sin apenas riesgo) y además que es
conveniente tocarlos:
* Puerto paralelo: se debe intentar definir (pongo las opciones de "mejor" a
"peor")
ECP+EPP (con DMA 3)
ECP (con DMA 3)
EPP
SPP
Esto no quiere decir que sea lo mejor para nuestro sistema. Dependerá de que
dispositivos tengamos en el puerto paralelo. Existen impresoras (pocas) que
únicamente funcionan e modo EPP puro (no sirve ECP+EPP), y existen algunos
scanners que también les suceden lo mismo. Es solo cuestión de probar cual se
adapta mejor a nuestro sistema. Pero para ser un poco ordenados ¿por qué no
probar por el orden que he dado antes?
* Pantalla PnP.:
Bien, esto puede ser un mundo. En principio, muchas BIOS preguntan como primera
opción:
PnP. OS (Operating System) : YES | NO
Pues aunque parezca mentira, mi consejo es poner NO. (al menos con win98 en
Español). Con Win98 en Inglés da igual lo que pongamos, pero el Español, tiene
un "bug" en este sentido. Bug que no aparece en "todas" las placas madre, pero
sí en un numero alto de ellas, y sobre todo si tenemos dispositivos PnP ISA -mas
adelante hablaremos de ello-)
Y luego, en esta pantalla, casi todas las bios, nos permiten poner IRQ por IRQ,
si en PnP, o PCI, o Legacy ISA o simplemente ISA. Estas opciones dependen de
cada bios. En principio no tocarlo, y posteriormente cuando veamos los "BUSES" y
posibles conflictos de dispositivos, veremos para que pueden servir.
* Pantalla APM (o Power Management).
Importantísimo: aquí tenemos que poner Power Management: "Enabled" y
posteriormente todos los timer (contadores de tiempo) para los distintos modos
(suspender -suspend-, dormir -sleep-, etc...), dejarlos a "cero" o "disabled".
De esta manera, Windows podrá establecer sus propios contadores y no entrará en
posible conflicto con la bios.
Igualmente, hay ciertas bios que en dicha pantalla pregunta por ACPI
(enabled/disabled). ACPI es una característica de control "avanzado" del
sistema. Mi consejo, si vuestra lo bios lo pregunta es que pongáis activo
"siempre" el modo ACPI. Mas adelante hablaremos también de él, en la instalación
del sistema operativo.
** Con esto, ya hemos realizado una tarea "importante". La tarea, fijaros que no
es configurar la bios como he comentado antes. Sino ESCRIBIR como está la bios
por defecto (al adquirir nuestro PC) y que se supone, que mejor o peor, nuestro
sistema operativo, al menos funciona.
QUINCALLERIA (HARDWARE)
Bueno, al menos, ya nos suenan tres cosas: CPU, memoria (por la "pasta" que
tenemos que pagar por ella, aunque no está muy clara su función todavía) y BIOS.
Pero ¿qué mas hay en la placa madre? Vamos a enumerar un poco, como si realmente
existiesen estos componentes por separado. Digo como si existiesen porque
actualmente dichos componentes, la mayoría están "embebidos" en algún chip
multifunción de la placa madre. Pero existir: Existen.
Enumeremos un poco:
1) BUSES: PCI, ISA, AGP
2) Controlador de disco duro
3) Puertos: serie, paralelo
4) BUS USB
Y ahora algunos "chips" importantes:
1) Controlador Programable de interrupciones (IRQ)
2) Chip de DMA.
Y luego otra serie de "cosas" de las que hemos oído hablar: puertos, IRQs,
etc.....
Que ocurre desde que pulsamos el botón hasta el arranque
Parte I I
DISPOSITIVOS
Vamos a definir los "dispositivos" como el resto del hardware independiente de
la CPU y memoria con los que la CPU interactua.
Hagamos un poco de historia. El PC actual que conocemos, aunque parezca mentira,
es básicamente el mismo que surgió en el año 82. Su arquitectura es la misma y
lo único que ha ido evolucionando han sido los "periféricos" o dispositivos.
Algunos de ellos, actualmente, se incorporan ya en la placa base (controladores
de disco, disquete, puertos serie y paralelo, por poner un ejemplo). Y otra
evolución evidente han sido las CPU, pero recordemos, que por suerte o por
desgracia han tenido que mantener su compatibilidad descendente y por tanto, su
juego básico de instrucciones es el del antiguo 8086.
Vemos a empezar por la CPU y memoria y luego veremos con detalle el resto de
"periféricos". Recordemos que no nos queda más remedio que ceñirnos a la
historia. Al año 82.
CPU
La primera CPU con una arquitectura de 16 bits que triunfó en el mercado (que
conste que no era la única arquitectura existente en sus años), fue el 8086 de
Intel.
Su triunfo, al igual que el del Windows actual, fue una decisión de un gigante
del hardware: IBM, y un montón de suerte de una persona que empezaba en aquel
momento: Billy Gates.
Hagamos historia. IBM hasta ese momento estaba dedicado a los grandes
ordenadores (mainframes) y bajo el supuesto de que empezaba a surgir un mercado
potencial (la microinformatica) decidió empezar a dedicarse a este mercado. Para
ello encargó a Intel el diseño (mejor dicho, la mejora de un antiguo 8008 -
equivalente a un Z80) de un procesador de 16 bits. Y abrió publica subasta (por
decirlo de alguna manera), sobre un futuro sistema operativo para dicha
arquitectura.
El propio IBM definió las características básicas de las placas madre: el bus PC
que rápidamente evolucionó al bus AT, y que por desgracia todavía seguimos
sufriendo.
Con respecto al software, en aquellos años existían unos sistemas operativos
serios para los ordenadores de 8 bits que empezaban a surgir. Decimos sistemas
operativos "serios" porque realmente lo eran para su época. Estamos hablando del
CPM cuya propiedad intelectual era de Digital.
En la propia Digital, una vez abierta la "subasta" (y la apuesta) por parte de
IBM para el futuro sistema operativo de 16 bits, empezaron a desarrollarse dos
proyectos: el CPM 86 (o "concurrent" CPM) y un sistema basado en DOS.
En las fases finales del desarrollo, Digital "apostó" por el CCPM (o CMP 86, o
Concurrent CPM, como queramos llamarlo), y abandonó el proyecto basado en el
DOS.
Pero Digital era (y sigue siendo) una Empresa "curiosa" con sus ingenieros de
Software. El ingeniero de Software tiene la "patente" de lo que desarrolle
dentro de la Empresa (esta característica la hace única en el mundo del
software), y una vez implementado un producto de ingeniería, el equipo, o la
persona que lo ha desarrollado percibe "royaltis" por cada venta, al igual que
la propia empresa. Y si esta persona se va de la Empresa, se va con su "patente"
o su "parte de la patente" o sus derechos, y sobre todo si el producto ha sido
desechado por la propia empresa se lleva completamente "su" desarrollo y "su"
propiedad intelectual.
Y este fue el caso. El ingeniero de Digital encargado del proyecto DOS se fue (o
bien "cabreado", o bien por una oferta que le hizo nuestro avispado Gates). Y
nuestro avispado Gates, hizo una carrera contra-reloj para tener finalizado su
primer MsDOS (versión 1.0) seis meses antes de que Digital finalizase su CCPM.
IBM tenia prisa por sacar el producto al mercado. Y formó alianza con la
incipiente Microsoft para empezar a implementar el MsDOS (PCDOS) en sus
ordenadores.
¿Fue una decisión acertada?. Personalmente creo que no. Pensemos que el
incipiente CCPM ya era capaz de soportar multitarea (hasta 4 tareas) en modo
consola (no existía todavía interfaz gráfica) -Por cierto, todavía lo tengo y
funciona!!!-.
Fue una triple decisión de IBM, que nos condiciona hasta el momento actual:
1) Se definió una arquitectura (bus PC que evolucionó inmediatamente hasta el
bus AT. Este bus AT básicamente se sigue conservando en nuestros actuales PCs y
condiciona un montón de cosas que iremos viendo en estos capítulos)
2) Se definió un procesador: arquitectura X86 (el 8086)
3) Se definió un Sistema Operativo (por llamarlo "algo"...), el PC-DOS 1.0
Y de allí surge la todavía frase hecha: "ordenador COMPATIBLE". Pero ¿compatible
con que? pues compatible IBM. Con los años se ha perdido la palabra IBM.
Y surge la frase CPU compatible. ¿con qué? pues con la arquitectura X86 de
Intel.
** Bien, repasemos un poco dicha CPU. Como todas las CPUs tiene un montón de
"patitas", estás se agrupan lógicamente en las siguientes funcionalidades:
a) "patitas" de DATOS
b) de DIRECCIONES
c) de CONTROL
Es decir, los buses que salen directamente de la CPU, son de "datos" de
"direcciones" y de "control". Para escribir un dato en memoria, es necesario
enviar el dato y "además" enviar su dirección. Y el bus de "control", es para
comunicarse con el resto "del mundo", con los periféricos, con la circuiteria
externa, etc....
Esta primera CPU, tenia únicamente 20 "patitas" de direcciones. Y además los
registros generales (todas las CPUs tienen una serie de registros generales
internos con los que saben hacer ciertas operaciones) eran de 16 bits.
Por tanto con 16 bits en principio, solo se podían direccionar 2 elevado a la 16
direcciones. Es decir 64 Kbs de memoria.
Intel, introdujo en esa CPU, el concepto de "segmentación" (concepto por el que
todavía seguimos pagando "muy caro", muchas, demasiadas "malas herencias").
El concepto de "segmentación, consiste en utilizar 2 registros generales para
formar una dirección física. Un registro llamado "segmento" (o base) y un
registro llamado "desplazamiento" (offset).
Bien, recordemos que 16 bits, son realmente 16 unos y ceros puestos a
continuación. Agrupémoslos en grupos de 4 bits. Esto forma 4 grupos de 4 bits.
Cada grupo de 4 bits, puede tener los valores:
0000 0 (posibles "cuartetos")
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
En total 16 valores. Por abreviar, podemos representar cada grupo de 4 bites,
con el numero o la letra que he puesto a continuación. Esta es la representación
hexadecimal (base 16).
Recordemos que hay 4 grupos de 4 bits, es decir, puesto entonces en
representación hexadecimal un registro, puede tener el contenido 01A5 o bien
23EF, etc. Es decir desde el 0000 hasta el FFFF (en total desde el numero cero
al numero 2 elevado a 16 (menos 1 del cero), es decir 65535 o lo que es lo mismo
64 Kbs.
En España, utilizamos la palabra "octeto" en lugar de byte por una mala
traducción del francés que fue quien implementó esta palabra. Al igual, la
palabra "ordenador" proviene de "ordinateur" (francés). Y la palabra "cuarteto"
como la mitad de un "octeto" (byte).
** Continuemos un poco más.......
Pero como estamos limitados a 20 líneas de direcciones, tal y como comentábamos
antes, se definió, que la manera de "sumar" esos dos registros fuese, poniendo
uno a continuación del otro y desplazando el código de segmento un "cuarteto" (o
"nible") añadiéndolo un cero. Por tanto, por ejemplo: (segmento A012, offset
2312)
Segmento: A0120
Offset 2312
------------
Dirección A2432
Cinco "cuartetos" es decir 20 bits, por tanto se podían direccionar 10 elevado a
20 posiciones de memoria: todo un "mega". Imposible pensar en un mega en aquel
entonces !!!!
Curiosamente hay que fijarse que la manera de construir esto 20 bites, no es
única. Es decir, la misma solución, nos podría haber dado por ejemplo:
Segmento A0000
Offset 2432
-----------
Dirección A2432
(esto ya nos puede empezar a dar los problemas de que con dos direcciones de
segmento diferentes, se "alcanzan" posiciones de memoria iguales. Por tanto
puedo "machacar" desde una dirección de segmento, otra dirección que
"teóricamente" pertenece a "otro" segmento.... malo de cara a programación ¿no?)
A este modo de funcionamiento, es lo que ahora llamamos modo "real" del
procesador y a ese mega, es lo que llamamos memoria "real" del procesador.
Y además por definición, cualquier "compatible" (y los actuales lo son), su CPU,
arranca siempre en modo REAL. Es decir, al encender un ordenador actual (PIII
por ejemplo), su funcionamiento es "exactamente" igual al funcionamiento del
8086 primitivo. Pero *EXACTAMENTE* igual.
Las CPUs actuales, no han sido más que una evolución de esta primitiva. Poco
después de nacer el 8086, surgió ya el 80286 capaz de direccionar 16 megas de
memoria. Duró muy poco, ya que fue una transición al 80386. El famoso 386 con el
cual se conserva actualmente compatibilidad absoluta (excepto una y solo una
nueva instrucción en el Pentium). Por tanto la arquitectura actual se la llama
también arquitectura 386. El 386, tenía (tiene) un nuevo modo de funcionamiento.
El modo "protegido", además del modo "real" y otro modo híbrido entre ellos, que
es el modo "Virtual 8086".
Sepamos simplemente que por compatibilidad hacia abajo, el modo real sigue
limitado al famoso "mega" inicial, y el modo protegido ya es capaz de ver toda
la memoria.
Igualmente recordemos que los registros generales de la CPU, pasan a ser de 32
bits. (excepto los de segmento que siguen en 16).
Por tanto con una dirección de 32 bits, podemos direccionar 4 gigas de memoria
(2 elevado a la 32).
Por compatibilidad, la parte inferior de los 32 bits (los 16 bits inferiores) de
cada registro, corresponden a los antiguos registros del 8086.
Los registros generales, podían haberse numerado por ejemplo R0, R1, R2...., tal
y como sucede en otras arquitecturas. Pero Intel decidió ponerles "nombre" y
además, que en ciertas operaciones aritméticas, fuese obligatorio realizarlos
únicamente con ciertos registros y no con todos. Los nombres, fueron también tan
"raritos" como AX, BX, CX, DX, SI, DI, SP, CS, IP, ES, SS, DS. Y estos son los
únicos registros con los que se puede operar.
La evolución posterior al 80486, y Pentium únicamente trajo consigo la
posibilidad de incorporar un chip matemático, el 387, que era capaz de realizar
operaciones en coma flotante y de paso incorporar una pequeña pero
importantisima cantidad de memoria dentro del procesador: la memoria caché de
primer nivel.
Posteriormente en el Pentium, se incorporó el juego de instrucciones MMX. Son
unas "macro" instrucciones especiales que son muy repetitivas en todo el
tratamiento de gráficos y vídeo, y que al implementarlas precisamente como
"instrucción" hardware, facilitaban la programación y la "rapidez" a los
programas que eran capaces de utilizarlas. No nos llevemos a engaño: ningún
sistema operativo las utiliza y además pocos, realmente pocos programas
(fundamentalmente los juegos), las utilizan.
El Pentium, solo se distingue de sus predecesores en que tiene una instrucción
"más". una sola: el "cpmexchg" es decir: compara dos registros y en función de
la comparación, los intercambia entre sí. Por compatibilidad hacia abajo,
"tampoco" la utilizan los sistemas operativos, ya que si no, tampoco funcionaria
dicho sistema en una CPU anterior.
Posteriormente surgió, el Pentium Pro, que básicamente es un Pentium optimizado
para ejecutar código "puro" de 32 bits, pero que se queda ridículo cuando se le
mete código de 16. Para solventar esto, nació el PII, que básicamente es un
Pentium Pro mejorado para código de 16 bits y que además se le incorpora de base
la tecnología MMX.
Y por ultimo estamos en el PIII. La única diferencia es que se amplia el juego
de instrucciones MMX a las llamadas MMX avanzadas.
** Internamente existen muchas diferencias para "acelerar" la CPU. En las
primeras CPUs, una instrucción maquina, por ejemplo ADD AX,3 (suma 3 al registro
general AX), representaba 3 ciclos de reloj. Tengamos presente que un procesador
a 25 MHz (de los 386 primitivos), tenía 25 millones de ciclos de reloj por
segundo).
Según han ido evolucionando, en los Pentium, esta instrucción utiliza un solo
ciclo de reloj (y encima los Pentium, pueden llegar ya a 500 millones de ciclos
de reloj por segundo), y además, en el Pentium, en "ese" ciclo de reloj, se está
utilizando técnica de "pipeline" (como las fotocopiadoras), es decir aunque este
procesando una instrucción, está preparando otra - en total hasta 5
simultáneamente. (en una fotocopiadora, mientras se está haciendo una fotocopia,
el papel de la siguiente fotocopia, ya está entrando en la maquina para acelerar
el proceso. Esto es la técnica de "pipeline").
Además, para acelerar las CPUs, se ha incrementado su memoria caché de primer
nivel, y además se ha creado un "predictor de saltos" optimizado.
Pensemos que cada vez que un programa efectúa un "salto", es decir, realiza una
operación del tipo: "Sí esta fecha es mayor que 80, ejecuta la rutina tal y
tal...". Bien, este condicional, es un "salto" en las direcciones de memoria de
programa. Cada vez que se ejecuta un salto, lo que hay en la caché de primer
nivel, no sirve para nada. Es necesario vaciarla y cargarla con el nuevo código
de programa que empieza en donde apunta dicho "salto". Por tanto, es necesario
"invalidar" la caché y cargar desde la dirección que apunta el "salto" otra vez
en la caché. Esto es una operación "costosa". Solución: ¿y que tal, si tenemos
un circuito inteligente dentro de la CPU que sea capaz de "predecir" un salto, y
por tanto se vaya encargando de invalidar la caché y cargarlo con lo que ha
"predicho"?. Pues genial, la única condición es que acierte lo mas posible. Si
no, la CPU se nos viene abajo.
Bueno, pues ahora, Intel tiene un juicio pendiente con la tecnología ALPHA de
Digital, por "piratear" su predictor de saltos en la arquitectura "Alpha".
(Aparentemente le juicio no va a realizarse ya que Intel "ha comprado" toda la
fabrica de desarrollo de los chips Alpha y su tecnología hace unos meses....
curioso, también ¿no?)
Y otra cosa: fijaros que este predictor de saltos, es importantisimo. Esto es lo
que realmente "acelera" una CPU (aparte de la tecnología "pipeline").
Y la pregunta del millón: ¿la competencia de Intel, tiene suficientemente
desarrollada este tipo de tecnología?. Personalmente opino que no. No existe
ningún índice de velocidad que sea capaz de medirnos esto, y esto, precisamente
es lo que sucede en un programa real.
MEMORIA
Poco podemos contar de ella. Es donde se guardan los datos. La evolución de
ella, ha sido únicamente respecto a la velocidad, y poco más. Variantes: EDO,
DIMM, etc..... pero informativamente, excepto la compatibilidad con nuestra
placa madre, y su velocidad, poco mas puede interesarnos.
Que ocurre desde que pulsamos el botón hasta el arranque Parte III"Ethek &
El Técnico
Que ocurre desde que pulsamos el botón hasta el arranque
Parte I I I
PLACA MADRE (NORMA DE COMPATIBILIDAD IBM)
Bien, llegado a este punto, y debido a las con-notaciones que tiene actualmente,
es necesario introducir un par de chips básicos que se definieron en las placas
madre primigenias.
Son:
* El controlador de Interrupciones
* El controlador de DMA
Recordemos, que siguen "exactamente" igual a como se definieron al principio.
Tan exactamente igual, que hasta la frecuencia de funcionamiento del chip de DMA
sigue siento de unos ridículos 4 MHz, que quizá fuesen rápidos en su momento,
pero que actualmente son ridículos comparados con el resto de funcionamiento de
una placa madre.
(Recordad, entonces que hay que "huir" de los dispositivos que utilicen DMA,
simplemente por su lentitud -y bloqueos de la CPU-. Igualmente recordad que la
DMA y la UDMA no tienen *nada* que ver. Ya lo iremos viendo más adelante).
Veamos primero, como puede comunicarse la CPU con el resto de dispositivos.
Recordad que la CPU, tiene una serie de líneas de "control". Estas son las
importantes para la mayoría de los dispositivos.
Veamos las tres "únicas" maneras que tiene la CPU de "enterarse" o
"recibir/enviar" datos a un dispositivo. Antes de eso, vamos a introducir que
realmente la CPU, solo tiene dos instrucciones llamadas IN y OUT para poner un
byte (o máximo, 2 bytes) en un "puerto". Y que un "puerto" no es nada mas que
una dirección de destino que tiene algún chip o dispositivo de la placa madre.
Un puerto, se direcciona con 2 bytes, es decir existe un máximo de 65535 puertos
en un PC.
Bueno, ya ahora ¿como podemos direccionar un dispositivos, al cual sabemos que
por "hardware" tiene un determinado (o determinados) puertos.
** Podemos mediante la instrucción OUT poner datos en un puerto. La secuencia de
datos que estamos poniendo para un determinado hardware, puede ser por ejemplo,
una "petición" de que ese hardware haga algo, o bien le estamos "escribiendo"
datos, en vez de ordenes, etc.... Esto depende del dispositivo. Del hardware, en
sí,... es decir del "manual" del fabricante de hardware (del manual "técnico").
Igualmente, mediante la instrucción IN, podemos "leer" un dato que un
dispositivo nos haya dejado en un puerto.
Perfecto!. Pero ahora ¿como nos enteramos que el dispositivo ya tiene un dato
preparado para que lo leamos? Bueno, pues dos posibilidades:
1) A lo "bruto". Empezamos enviando una petición a un dispositivo (mediante la
instrucción OUT), y según el manual del fabricante, ahora ese dispositivo, nos
va a responder en un puerto. Pues bien, empezamos a leer (mediante IN), de ese
puerto hasta que exista un dato. Hala!, a lo loco!,
OUT->no hay dato?->OUT->no hay dato?->OUT.......
Es decir nos metemos en un bucle, sin hacer nada más hasta encontrar el dato que
nos dice el manual. Pero.... si por desgracia falla el dispositivo, o hemos
programado mal la petición que realizamos con el IN, pues... nos hemos metido en
un "bucle" infinito. La CPU nunca tendrá ese dato y además la secuencia
programada no se puede interrumpir....... malo, malo.
Una mejora de esta solución, sería mirar únicamente cada cierto tiempo. Se puede
hacer que se mire en cada "tic" de reloj. Y ese "tic" de reloj interno lo
podemos programar (existe también un circuito de "timer" para estas cosas).
Bueno.... hemos mejorado, pero reconozcamos que estamos perdiendo mucho tiempo
en "ver" si el hardware nos responde.
* Este es el modo PIO (Program Input Output)
2) Un poco más sofisticado. Alguien inventó las IRQ (Interrupt Request). Es más
lógico: le pedimos algo al dispositivo, y nos dedicamos a hacer otras cosas.
Cuando el dispositivo tenga el dato, simplemente que nos avise enviando una
"interrupción" (IRQ). Se llama así porque una interrupción, interrumpe
obligatoriamente lo que esté haciendo la CPU y la obliga a tomar alguna acción.
Ya veremos cual. (en este caso por ejemplo, leer una vez del correspondiente
puerto, porque tenemos la seguridad que ahora sí que hay dato).
Estas interrupciones, pueden ser interrupciones hardware, o bien interrupciones
software, las veremos también mas adelante.
* Este es el método IRQ.
** Y existe un tercer método para llevar ciertos tipos de datos desde un
dispositivo hardware.
3) Imaginemos que tenemos un "chip" inteligente, y que somos capaces de decirle
que una vez que tenga LOS datos (digo "LOS", porque este chip admite
programación a nivel de decirle cuantos queremos), nos los pase a una dirección
de memoria prefijada sin necesidad de que la CPU trabaje para nada. Esta es la
técnica DMA. Esta técnica aparentemente genial tiene un inconveniente (mejor
dicho dos). Primero, cuando el chip va a pasar los datos a la memoria, o desde
la memoria, para asegurarse que nadie los toca, lo que hace es "desconectar" a
la CPU del bus. Y mientras está "desconectada" la CPU no hace nada. Sufre un
"paron".
Bueno,... esto no era tan importante en la primera arquitectura del PC, con CPUs
a 4,77 MHz, y una DMA rápida (4 MHz), este tipo de acceso simplificaba la
programación y además era mas rápida que las técnicas IN, OUT (técnicas PIO).
Pero por desgracia y para conservar la compatibilidad la velocidad de la DMA
sigue siendo la velocidad primitiva (4 MHz), y además por el mismo motivo, la
DMA solo sabe hacer transferencias de 8 y 16 bits simultáneamente (cuando la
memoria actual se direcciona en un bus de 32). Y además, por desgracia, mientras
está haciendo la transferencia "interrumpe" a nuestro flamante PIII, que durante
ese tiempo habría podido hacer cientos de miles de operaciones en multitarea.
* Esta es la transferencia DMA.
Bien retomando un poco el inicio de este capitulo, habíamos visto que existía
el:
** Controlador programable de interrupciones. ¿y que hace este "bicho"?, pues
fácil, lo que hace es que cuando recibe una interrupción, lo primero es enviar
una señal a todo el hardware "prohibiendo" que se emitan mas interrupciones, y
posteriormente se la comunica a la CPU mediante una línea de control especial (y
única!!). Se le llama "programable" ya que tiene la posibilidad de que si recibe
"simultáneamente" mas de una interrupción, puede ordenararlas por las
prioridades que le haya programado el sistema operativo, para írselas dando a la
CPU de una en una.
Igualmente recordad, que como este controlador, ha prohibido las interrupciones,
una vez que se ha notificado a la CPU de esta interrupción y la CPU ha llamado a
la rutina de servicio (driver) que controla esta interrupción, lo primero que
tiene que hacer, en cuanto pueda, el "driver" es emitir una instrucción STI, es
decir informar a todo el sistema que ya está permitido de nuevo enviar
interrupciones.
Fijaros, lo "peligroso" que puede ser un driver mal programado, simplemente
porque al programador de turno se le olvida de vez en cuando el emitir una
instrucción STI.
IRQs (INTERRUPT REQUEST)
Bueno, pues también arrastramos aquí una desgraciada herencia. Solo se
definieron 16 IRQs (y además, no vectorizadas, por lo que en principio NO pueden
compartirse. Ojo!!, he dicho en "principio").
Y además de "pocas", pues mal distribuidas. De base, sin tener NADA en el PC,
están utilizadas:
IRQ 0 Reloj del Sistema
IRQ 1 Teclado
IRQ 2 Controlador Programable de Interrupciones
IRQ 3 Puerto de Comunicaciones Serie 2
IRQ 4 Puerto de Comunicaciones Serie 1
IRQ 5 LIBRE
IRQ 6 Controlador de Disquetes
IRQ 7 Puerto paralelo.
IRQ 8 Reloj en tiempo real (CMOS de la BIOS)
IRQ 9 LIBRE
IRQ 10 LIBRE
IRQ 11 LIBRE
IRQ 12 LIBRE
IRQ 13 Coprocesador matemático
IRQ 14 Primer controlador IDE de disco duro
IRQ 15 Segundo controlador IDE de disco duro
Fijémonos que en principio, solo quedan 5 libres. Pero.... si tenemos ratón en
puerto de ratón, este utilizará la IRQ 12. Quedan 4. Si nuestra placa tiene bus
USB, este necesita otra interrupción, si además tenemos bios ACPI, esta necesita
otra interrupción..... y la tarjeta de red, otra, etc.,,etc.,
Mala pinta tiene el asunto como para poder poner nuevas tarjetas ¿no?
Vamos a introducir un poco los "buses" del sistema para dialogar con
dispositivos. Allí veremos como a pesar de las restricciones que aparecen por
las pocas IRQs libres, podemos llegar a un ten con ten con el hardware y el
sistema operativo, para poder compartir al menos, alguna interrupción entre
varios dispositivos.
Con esto de los "buses" debemos remitirnos otra vez a la "historia" de la
evolución de las primeras placas madre y su enlace con las actuales BIOS y el
sistema en general.
Con esto ya podremos empezar a preguntarnos otra vez el tema del titulo de estos
artículos: "Desde que pulsamos el botón de arranque hasta..."
Que ocurre desde que pulsamos el botón hasta el arranque Parte IV"Ethek &
El Técnico
Que ocurre desde que pulsamos el botón hasta el arranque
Parte I V
BUSES
Se conoce por BUS el conjunto de cables por los que circulan los datos de un
dispositivo a otro o de un dispositivo a la memoria y/o CPU.
COMUNICACION DE UNA TARJETA CON LA CPU
Solo a modo de recordatorio, recordemos que cualquier tarjeta, tiene, o puede
tener para comunicarse con la CPU, un rango de puertos, una(s) posible(s)
interrupciones y una(s) posibles DMA(s).
A continuación, veremos como se asignas o no estos, en cada tipo de BUS.
BUS ISA
Empecemos otra vez por las "herencias". El primer bus que se implementó en la
arquitectura PC fue el bus ISA. En un principio era de 8 bits y rápidamente
evolucionó a 16 bits.
Esto indica que cada vez, en cada ciclo de reloj, era capaz de poner un byte o 2
bytes en el bus. Y... ¿cuantos ciclos de reloj tiene el bus ISA?, pues 8,33 MHz
es decir 8 millones de ciclos de reloj. Tenía esta frecuencia y la "sigue"
teniendo (por el consabido motivo de compatibilidad descendente -las herencias
pesan-).
Es decir el bus ISA con tarjetas de 16 bites, es capaz de soportar un máximo de
16 megas de transferencia por segundo PARA todos los dispositivos. Ridículo en
la situación actual.
Y ahora la pregunta del millón: ¿como se comunica con la CPU?.
Bien, existían y siguen existiendo dos posibilidades principales. Esto es
general para todas las tarjetas, sean ISA, PCI, etc., pero vamos a empezar a
hablar de ello en esta parte.
Un tarjeta, además de los consabidos puertos, IRQ y DMs que pueda pillar
(evidentemente de la lista de "libres" que digamos con anterioridad, puede ser
que tengo o no tenga su "propia" BIOS.
** En la arquitectura del primer PC, IBM, definió que la memoria principal del
PC, podía llegar hasta la dirección hexadecimal A000:0000 (es decir, recordando
un poco, hasta el segmento A000, offset 0). Si pasamos esta dirección a Kb´s nos
da la increíble capacidad de 640 Kbs ¿os suena esta cifra, no?.
Digo "increíble capacidad", porque en el año 82, era realmente increíble.
Igualmente IBM definió las áreas con los segmentos desde A000 a C000 como
reservadas para los buferes de vídeo. Definió igualmente el segmento F000 hasta
el final del mega para contener la información de la BIOS de la placa madre, y
dejo libre las direcciones C000 hasta F000 para posibles BIOS de dispositivos y
tarjetas que necesitasen su propia BIOS para funcionar.
Haciendo un mapa de la memora (referida a segmento y sabiendo que cada uno de
estos ocupa 64 Kbs), tenemos:
0000
1000
2000
....
9000
A000 Hasta aquí los 640 Kbs primeros de memoria-
B000 Desde A000 hasta aquí el área para el vídeo "gráfico"
C000 Hasta aquí, dos zonas B000 a B7FF y B800 a BFFF
.... Libre
F000 Desde aquí al final para la BIOS del PC.
(nota la zona B000 a B7FF es para la memoria gráfica en modo monocromo y modo
texto. La B800 a la BFFF es para la memoria gráfica en como color y modo texto.
Lo que normalmente se utiliza en el modo MSDOS puro).
Bine, pues ahora a las BIOS de las tarjetas: la primera tarjeta y totalmente
necesaria en nuestro PC es la tarjeta gráfica o de vídeo. Esta tarjeta "siempre"
tiene BIOS, y normalmente de 32 Kbs, y normalmente ocupa las direcciones desde
C000 a C7FF. No es obligatorio, no está escrito, pero es una norma no escrita
que prácticamente siguen todos los fabricantes de tarjetas de vídeo.
Como tal BIOS, incluso es actualizable. Al menos las de las tarjetas "buenas".
(Matrox, etc...). Recordad que en principio cualquier bios se puede actualizar y
a veces, en las tarjetas gráficas, ha sido obligado para soportar alguna de las
normas del ActiveX de Windows).
En principio, ahora ya sabemos las cuatro posibles cosas que puede "tener" una
tarjeta:
1) BIOS y por tanto "ocupar" un rango de memoria desde C000 a F000).
2) Puertos
3) IRQs
4) DMAs.
** Alguno de las 4 "cosas" anteriores (o cualquier combinación de ellas) se
necesitan para que la tarjeta sirva para algo.
Y ahora ciñéndonos a nuestro caso del BUS ISA. ¿como se asignaban las IRQs, los
ports, etc., en aquel entonces?. Recordad que no existía la norma PnP. (Plug and
Play, Plug and Pray para otros). Pues mediante switches. Así de fácil. Era
responsabilidad nuestra saber que IRQs o ports teníamos libres y mediante
switches se configuraba la tarjeta.
Bueno, se configuraba lo que se podía. Cada fabricante escogía al azar un
conjunto de puerto y/o IRQs de funcionamiento de su tarjeta y tú lo instalabas.
Pero claro, si querías añadir otra tarjeta, era responsabilidad tuya que no
"chocasen" entre ellas. Y a lo mejor, el nuevo fabricante, no te daba opciones.
Resulta que los posibles puertos de tu nueva tarjeta, ya estaban siendo
utilizados por otra. Y a lo mejor teníamos que utilizar una u otra. No podíamos
instalar ambas a la vez.
Curioso y duro el tema, ¿no?. Antes de comprar había que leerse con lupa que
IRQs podía utilizar y que puertos y que DMAs y que direcciones podía pillar la
posible BIOS. Llevar en el bolsillo, los que ya tenias utilizados con las otras
placas, y ver, antes, si era posible instalar esa nueva.....
Bien una vez instalada y asignadas (a mano) las IRQs y ports, etc., pues ya
teníamos nuestra flamante tarjeta. Pero ya nos teníamos que olvidar de la IRQ o
de la DMA "sacrificada".
Ahora su entrada en funcionamiento era como siempre. Un driver se encargaba de
su funcionamiento y dialogaba con ella con las técnicas que hemos comentado
anteriormente PIO, DMA e IRQ.
(como nota curiosa, todas las bios empiezan por los caracteres hexadecimales
AA55. Las rutinas llamadas de POST de la bios de nuestro PC, lo que hacen es
recorrese al encender el PC, la memoria comprendida entre C000 y F000, en
bloques de 2 Kbs en 2 Kbs y ver si allí se encuentra esos caracteres
hexadecimales. Si se encuentra, ya sabe que es una BIOS)
(y como otra nota curiosa, recordad que antes hemos hablado de tarjetas ISA de 8
bits y 16 bits. Esto implica que hay tarjetas "mas cortas" que lo que es el bus
en donde se pinchan. No pasa nada. Pueden pincharse ya que el bus ISA actual
soporta ambos formatos de tarjeta).
BUS PCI
Surgió mucho mas tarde. Es relativamente joven (vamos a saltarnos aquí una serie
de buses intermedios -EISA y VESA- que ya carecen de sentido).
La norma PCI, indica que un bus PCI es únicamente de 4 slots (pero permite
saltarse la norma e instalar mas slots en grupos de hasta 4 más, mediante un
"bridge" -puente- "PCI to PCI").
Igualmente la norma define al bus PCI como un bus de 32 bites a 33 Mhz. Esto
implica una velocidad de transferencia de 4 * 33 = 133 Megas por segundo. Aquí
la velocidad ya empieza a ser apreciable frente al bus ISA.
Igualmente, define las IRQs que pueden utilizarse como IRQs de dos tipos:
"level" (por nivel) y "edge" (esquinado). Precisamente este ultimo tipo: "edge",
es el que permitirá cuando surgió la norma PnP, el poder compartir una IRQ con
mas de un dispositivo!... ya era hora ¿no?. Lo veremos en cuanto tengamos
definidos todos los buses.
Esto ultimo, ya empieza a parecer un poco mas serio. Ya nos empieza a abrir las
posibilidades del PC un poco más del "corset" que teníamos hasta ese momento.
Pero de paso, empieza a complicarle la vida a la BIOS de la placa madre. En ese
momento, fue cuando las BIOS, pasaron de ser una cosa "tonta" y prácticamente
"la misma" para todas las placas madre, a tener su "propia vida" y ser capaz de
identificar los dispositivos. Complicaron la existencia a los fabricantes de
BIOS....
BUS AGP
Es completamente nuevo. Unicamente consta de 1 slot, y está pensado para
gráficos a alta velocidad. No es importante llevar un chequeo de la integridad
de los bites en este bus (ya que si se pierde un bit de un gráfico en un
instante dado, ni se nota). Lo único importante aquí es la velocidad. Existen
varios estándares 1X, 2X, 4X Y en general se va a llegar a utilizar la misma
frecuencia que el BUS de la placa madre.
Con esto, actualmente se consiguen tasas de transferencia de 500 Megas por
segundo.
Solo es importante aquí un matiz:
*) El BUS AGP se inicializa "después" del BUS PCI. Esto para respetar al pie de
la letra la norma PCI. Por tanto, si tenemos dos tarjetas gráficas, una PCI y
otra AGP, siempre será la tarjeta primaria la PCI (teóricamente más lenta que la
AGP).
Pero como las normas están hechas precisamente para saltárselas, pues ciertos
fabricantes de bios, empezaron a poner la pregunta "Primary AGP/PCI o PCI/AGP"
en la configuración de la bios para saltarse esta secuencia. Pero repito: no es
un estándar, por tanto nuestra BIOS, pudiera no tener esa opción.
Que ocurre desde que pulsamos el botón hasta el arranque Parte V"Ethek &
El Técnico
Que ocurre desde que pulsamos el botón hasta el arranque
Parte V
PLUG AND PLAY
Bien, hasta aquí hemos visto los posibles "buses" incorporados en nuestra placa
madre. Queda todavía por ver el bus SCSI. Debido a que este último, no es nada
más que una tarjeta SCSI de la cual sale un nuevo bus, podemos abordar el tema
de Plug and Play en este momento y dejar para mas adelante el SCSI.
Hasta ahora, las tarjetas que hemos visto, había que configurarlas "a mano".
Teníamos que asignarlas una IRQ de la lista que teníamos "libre" (recordad que
en principio solo tenemos la IRQ 5, 9, 10, y 11 -y puede que la 12 dependiendo
si en la bios se la hemos asignado o no a un posible ratón en puerto de ratón-)
Evidentemente este conjunto de IRQs libres empieza a quedarse escaso, máxime
cuando en la actualidad todo el mundo tiene tarjeta de sonido la cual nos va a
pillar otra IRQ, y probablemente la tarjeta de vídeo nos va a solicitar otra.
Evidentemente entonces ¿para que queremos slots libres y para que otros
dispositivos, si aparentemente no vamos a poder instalarlos?.
** Bueno, algo "nos salva". Recordad que habíamos comentado que el bus PCI fue
diseñado para poder "pillar" las IRQs de dos modos "level" y "edge". En
principio entonces, el bus PCI (y AGP), ha sido diseñado para poder compartir
interrupciones. Ahora solo queda el definir el como compartirlas.
Igualmente debemos recordar que "por diseño" el bus ISA *no* puede compartir las
IRQs y además, debemos recordar que las IRQs asignadas a los puertos serie,
paralelo y controladores de disco y disquete (es decir IRQ 3, 4, 6, 7, 14, y 15)
y las del sistema (IRQ 0, 1, 2, 8, 13) tampoco pueden compartirse. Y si además
tenemos ratón en puerto de ratón, o nuestra bios se lo asigna SIEMPRE a un
posible puerto de ratón, la IRQ 12 *tampoco* podrá compartirse.
* Igualmente quiero resaltar que en las IRQs "fijas" hay alguna matización:
a) Los puertos COM1 y COM2 /serie), necesitan una IRQ. Lo "normal" es que la
bios le dé la 4 y la 3 respectivamente. Pero en ciertas bios PnP, la propia bios
puede decidir (o puede ser configurada) para que le dé otra. Si el puerto no
tiene IRQ no funcionará. Igualmente si el puerto tiene conflicto con la IRQ
porque la "pilla" otro dispositivo, tampoco funcionará.
b) La IRQ del puerto paralelo (normalmente la 7, pero estamos en un caso similar
al anterior, con respecto a que la bios puede darle otra), puede ser que no sea
necesaria. En win95 / win98, "siempre" la bios le asigna una IRQ y por tanto
Windows la utiliza (y los drivers de impresión la necesitan). En Windows NT (y
Windows 2000), esto no es necesario. NT y 2000 "pasan" de la bios, y los drivers
de impresión no lo necesitan. Lo gestionan mediante técnica de "pool" y liberan
al sistema una IRQ que puede ser preciosa.
c) La IRQ 12 es ISA si está asignada a puerto de ratón. Si en nuestro PC tenemos
el ratón en un puerto serie, lo normal es que entremos en la BIOS y le digamos
que no asigne la IRQ al puerto de ratón. Hay ciertas bios que son capaces de
detectar esta situación y "liberan" automáticamente dicha IRQ. Pero esto no es
lo normal y por tanto somos nosotros responsables de informarle a la propia
bios.
** He repetido los conceptos anteriores que ya habíamos visto para tenerlos
frescos en este momento. Vamos a para entonces a hablar realmente del PnP.
En Windows 95, Microsoft preparó una especificación del PnP. No vamos a entrar
en detalles técnicos, únicamente conceptuales. En resumen, la especificación PnP
es la siguiente:
1) Cada fabricante de periféricos PnP tiene asignado un numero identificativo
único en el mundo.
2) Los fabricantes son responsables de "numerar" sus dispositivos. Es decir una
tarjeta suya tendrá en numero 1, otra el 2, etc. Números UNICOS.
3) Los dispositivos se agrupan por "funcionalidades" (dispositivos de "Mass
Storage" para los de acceso a disco, "Vídeo" para los de vídeo, "Multimedia
Device" para los multimedia, etc.... es decir hay una clasificación.
4) El conjunto de estas dos características definidas en el punto 1) y 2) forma
un "string" (cadena de caracteres) identificativo "único" para un dispositivo.
Por ejemplo de la forma: VEN_8086&DEV_7110. Este ejemplo corresponde al
fabricante INTEL (VEN es abreviatura de "vendor") e Intel tiene curiosamente el
"numero" identificativo de fabricante el 8086 (igual que su primera CPU
"compatible"). DEV indica "device" (dispositivo) y el 7110 es un numero interno
de Intel con el cual identifica de manera única su dispositivo (el que sea, que
en este caso en particular es el: Intel 82371EB PCI to ISA bridge (ISA mode)).
5) Existe una "norma" estándar para preguntar al dispositivo que IRQs le
"gustaría" y "puede" utilizar (tanto en plan exclusivo como "compartidas", si
fuesen dispositivos PCI). Y cuantas "Necesita". Lo mismo para los puertos y lo
mismo para la DMA. Es decir, preguntándole al dispositivo, este es capaz de
informarnos que quiere y que posibilidades tiene.
6) La BIOS en inicialización, es la responsable de preguntarle a los
dispositivos esto.
7) La propia BIOS, es "lista". En principio "ve" que dispositivos tiene la placa
madre y le da las IRQs del sistema FIJAS que hemos comentado antes. Realmente la
secuencia que sigue es:
7.1) Asigna las IRQs fijas a los elementos incorporados en la placa madre.
(puertos serie, paralelo, ratón, etc.)
7.2) Mira en la tabla (que es modificable por nosotros entrando en la bios), a
ver si alguna IRQ, nosotros la hemos bloqueado (es decir, en la bios le hemos
marcado, por el motivo que sea, que la IRQ 10, por ejemplo, es una IRQ ISA o
"Legacy ISA"). Si la tenemos marcada así, la ignora en su lista de asignación a
dispositivos PnP.
7.3) En este momento tiene la bios una lista de IRQs que le quedan libres.
7.4) Se recorre el bus ISA y "pregunta" a cada tarjeta sí es o no, PnP. Y si es
PnP.: que necesita y que posibilidades alternativas le da. Posteriormente
selecciona una IRQ de "su" lista de "libres" y le informa al dispositivo de que
esa IRQ es para él. Y SOLO PARA él. (Recordad que la IRQ ISA no se pueden
compartir. Por tanto se la da a un dispositivo y la borra de su lista de IRQs
libre).
7.5) Cuando termina con el bus ISA, empieza con el bus PCI y AGP. Se recorre
igualmente estos buses preguntando a los dispositivos lo mismo con respecto a
las IRQs. Y ahora les va asignando las libres. Como las IRQs de las PCI,
normalmente son "edge", es decir, se pueden compartir, cuando la bios termina
con su "lista" de libres, vuelve a asignar otra vez el comienzo de su lista al
dispositivo siguiente. Es decir "comparte la IRQ).
8) Lo anterior, no implica que el dispositivo funcione. Implica únicamente que
ahora el dispositivo "sabe" y la bios "sabe", que "debe" utilizar. Pero ahora
queda que el sistema operativo lo soporte. Este es el caso de w95 / w98. El
MsDOS y el w3.1 *no* soportan IRQs compartidas. Y en cambio en NT y el Windows
2000, debido a que no hacen ni caso de la bios, vuelven a reprogramar a su gusto
todas las tarjetas para asignarlas lo que mas le interese a cada driver de
dispositivo.
RESUMEN Y POSIBLE USO POR NUESTRA PARTE
Y ahora ¿que posible uso, o que posibles conclusiones debemos sacar de lo
anterior?....
** Bien, en principio, y lo primero es saber si las tarjetas que tenemos o vamos
a añadir a nuestro PC (las ISA), son o no son PnP. Si *no* fuesen PnP. y además
no tenemos ningún "jumper" para que lo sean, debemos ver que IRQ va a necesitar
(mirando el manual nos dirá cuales "puede", y además si tenemos o no que poner
algún jumper para esto).
Una vez identificada la IRQ libre que queremos para esa tarjeta, debemos entrar
en la pantalla de la BIOS, en la parte de PnP. y a dicha IRQ, ponerle "ISA" o
"Legacy ISA". Con esto únicamente conseguimos que la bios NO se la asigne a
ninguna tarjeta.
Curiosamente tampoco se la asigna a la nuestra. Es responsabilidad luego del
driver (o del propio Windows), el asignársela, por lo cual "puede" que tengamos
que informarle al sistema operativo (Windows) en las "propiedades del sistema"
que dicho dispositivo utiliza esa IRQ para que a su vez Windows se lo informa a
"su" driver.
** Gracias a Dios, de estas tarjetas, prácticamente no quedan.... (a excepción
de algún módem interno ISA).
IMPORTANTE: Igualmente, si entre los dispositivos PCI, vemos que la bios (y
Windows) asignan una determinada IRQ a un dispositivo, y por el motivo que sea,
no nos gusta, o nos causa problemas y queremos que le asigne "otra" de las
posibles asignadas al bus PCI, es fácil. Abrimos la maquina y cambiamos a la
tarjeta de "slot". Recordad que la bios asigna su lista de libres recorriéndose
el bus PCI. Por tanto cambiándola de slot se la encontrará en otra posición y
"seguramente" le asignará otra IRQ. (Realmente aquí intervienen más factores de
tipo técnico, ya que existen las denominadas IRQ#A, IRQ#B, IRQ#C e IRQ#D. Estas
son las que realmente solicita un dispositivo y el propio bus PCI las tiene
"entrelazadas" y juega con estas IRQs "lógicas" y la lista de IRQs libres. Pero
este es un tema "técnico" que se sale del alcance que quiero dar a estos
documentos)
** Bien hasta aquí hemos visto una "nueva" tarea que realiza la bios "Desde que
pulsamos el botón de encendido"...... y antes de empezar a cargar todavía el
sistema operativo.
Que ocurre desde que pulsamos el botón hasta el arranque Parte VI"Ethek &
El Técnico
Que ocurre desde que pulsamos el botón hasta el arranque
Parte VI
BUS SCSI Y SUS DISPOSITIVOS
Como introducción, debo comentar que la tecnología SCSI siempre es la puntera (y
la mas cara). Los discos SCSI siempre son mejores que los IDE. Y mucho mas
rápidos, pero evidentemente a igualdad de "tecnología". Me explico, todo lo
"puntero" siempre nace en los dispositivos SCSI. Posteriormente los IDE (uno o
dos años mas tarde) los alcanzan. Hagámonos una idea: los discos a 7200
revoluciones, eran normales hace 2 años en SCSI. Ahora se están introduciendo en
los discos IDE de ultima generación. Actualmente el SCSI tiene ya discos de
10.000 revoluciones y con caché interna de 4 megas. Los IDE todavía ni sueñan
con esto.
SCSI=Small Computer System Interface
Bueno, pues una de las tarjetas que podemos pinchar a la placa madre, son las
tarjetas SCSI (se pronuncia "escasi"). Estás tarjetas lo que hacen es definir un
nuevo "bus". Estas tarjetas pueden ser PCI o ISA (casi no quedan de estas), e
incluso hay placas madre que ya las llevan incorporadas. Pero en este ultimo
caso, a todos los efectos, es como si fuese una tarjeta independiente. Por
firmar un BUS, desde la tarjeta SCSI, podemos colocar uno o dos cables que van a
ir a uno o varios dispositivos. Veamos: un bus SCSI no es nada mas que un cable.
Y de este cuelgan los dispositivos. Y uno de los posibles dispositivos es
precisamente la tarjeta SCSI. Si salen dos cables, (por ejemplo uno interno y
uno externo), la tarjeta SCSI está en el "medio" del BUS. Si únicamente tenemos
un cable, la tarjeta está en uno de los "extremos" del bus. Es decir,
teóricamente podemos tener:
1) D---D---D--T---D
2) T---D---D--D---D
(he representado por "D" cualquier dispositivo SCSI (disco, CD-ROM, scanner,
etc.) y por "T" la propia tarjeta).
En el caso 1) se supone que tenemos dos cables que salen de la tarjeta (uno
interno y otro externo) con dispositivos. En el caso 2) Solo tenemos
dispositivos en uno de los cables (da igual).
IMPORTANTE: El BUS SCSI debe estar "terminado" por *ambos* extremos. Esto es
*OBLIGATORIO*, son propiedades eléctricas del dispositivo y si no prestamos
atención a esto, en cualquier momento puede suceder un mal funcionamiento de
bus, o que uno de los dispositivos no sea reconocido, etc. Mas adelante veremos
que quiere decir "terminado". Vamos ahora a ver que es lo que tiene cualquier
dispositivos SCSI. Previamente, debemos saber que cada dispositivos SCSI
(incluso la misma tarjeta, ya que como hemos dicho anteriormente es un
dispositivo más), tiene que tener un numero UNICO en el BUS. Este numero debe
ser un numero de 0 a 7 (luego veremos las ampliaciones del bus SCSI). Este
numero se asigna en los dispositivos. Todos los dispositivos SCSI, tienen
mediante "jumpers" la posibilidad de asignarle un numero. Este numero se asigna
en binario. Veamos como:
* Normalmente hay tres jumper numerado 0, 1 y 2
* Posibilidades (S=jumper colocado, N=no colocado):
2 1 0
- - -
N N N Identificación cero (ID 0)
N N S ID=1
N S N ID=2
N S S ID=3
S N N ID=4
S N S ID=5
S S N ID=6
S S S ID=7
** Cada dispositivo un numero UNICO en el bus.
Y además hemos dicho que la tarjeta es un dispositivo más. Recordar además que
las tarjetas SCSI, realmente son realmente una CPU especial y que además tiene
su propia BIOS. Por tener su propia BIOS es configurable, por ejemplo en las
tarjetas Adaptec, se puede entrar en dicha bios pulsando CTRL-A cuando se está
inicializando la tarjeta.
Entonces ¿como se asigna el numero "ID" a la tarjeta?. Fácil: en las "antiguas"
tarjetas, normalmente por jumpers como los anteriores, y en las tarjetas
actuales, entrando en su BIOS y asignándoselo. Por defecto la tarjeta SCSI
siempre viene con el ID=7.
Estos numeritos, no solo son para diferenciar cada dispositivo, sino que además
nos determinan la "prioridad" del dispositivo. La norma SCSI define que el
dispositivo de máxima prioridad es el ID 7, y luego va disminuyendo la prioridad
desde el ID 6 hasta por fin el ID 0. Este es el motivo por el cual la tarjeta
SCSI, viene siempre de fabrica con el ID 7. Evidentemente la tarjeta SCSI debe
ser, por lógica, la que tiene mayor prioridad en el BUS.
** Otra característica de la que hemos hablado anteriormente es la
"terminación". Y habíamos comentado que el bus SCSI debe estar "terminado" en
ambos sentidos (AMBOS).
¿que es la terminación?: pues no es nada mas que una "resistencia" eléctrica que
cierra el extremo del bus. Normalmente cada dispositivo "tiene" esta
resistencia internamente. La manera de "activarla", es decir la manera de
decirle a un dispositivo que él es el último del bus y por tanto "debe" tener la
resistencia colocada, es mediante un jumper (este jumper, suele denominarse "TE"
-termination enabled-). Es decir cada disco o dispositivo que vayamos a
conectar, al menos tiene 4 jumpers. Los 3 anteriores para asignarle el ID y uno
mas marcado como "TE". Unicamente el *ultimo* dispositivo en cada parte del bus,
debe llevar el "TE" activo. CUIDADO con esto. De fabrica TODOS los dispositivos
que compremos suelen tener el "TE" activo. ¿Y la propia tarjeta?. En el caso 1)
que hemos visto anteriormente NO debe estar "terminada" y en caso 2), bien sea
externo o interno el cable con dispositivos, la tarjeta debe estar "terminada"
siempre. Entonces la terminación, depende del tipo de tarjeta: en algunas
(viejas, o incorporadas en la propia placa madre del PC), puede ser un jumper.
En las actuales, se define también en la propia BIOS de la tarjeta además de
asignarle allí el numero de ID. * Algunos de los dispositivos "viejos", en vez
de tener el "jumper" TE, lo que físicamente tienen es una fila (o dos) de
resistencias ("resistor"). La manera de quitar la "terminación" es eliminar
físicamente las resistencias. * Igualmente, existen "tapones", que no son mas
que un pequeño conector que se pone al final del cable, en uno o en ambos
extremos y que realmente son resistencias. Hacen de tapón. Esto es muy útil, mi
costumbre, según compro un dispositivo SCSI, es quitarle siempre el jumper TE, y
finalizar *siempre* los buses con estos "tapones". Así tengo la seguridad que no
se me olvidará. La velocidad "base" de transferencia del bus SCSI es 10
megabytes en total en todo el bus. El cable es un cable de 50 hilos. El bus que
hemos definido hasta aquí es el llamado NARROW SCSI. Y ya realmente es de los
"viejos".
ULTRA SCSI
Es el mismo bus (aparentemente), con un chip especial que permite una
comunicación al doble de velocidad. Por tanto soporta 20 megabytes en el bus.
Los dispositivos deben soportar negociación "ultra". Prácticamente todos los
actuales lo soportan.
WIDE SCSI
Cambia el bus. En vez de 50 hilos es de 68 y soporta 16 dispositivos, y por
tanto los dispositivos en vez de 3 jumpers para asignar el numero, tienen 4,
para poder asignar un numero del 0 al 15. Por compatibilidad el orden de
prioridad sigue siendo del 7 al cero y luego con "menor" prioridad todavía el
15, 14, 13,.....,8. Debido a que el cable es de 68 hilos, físicamente los
dispositivos son diferentes. Su conector es diferente. Estas tarjetas, lo normal
es que uno de los conectores (bien el externo o bien el interno, o incluso hay
veces en que ambos son internos), sea de 50 hilos y el otro de 68. Así los
dispositivos "normales" los conectamos al de 50, y los "wide" al de 68.
ULTRA-WIDE SCSI
Pues una combinación de ambos anteriores. Evidentemente duplica la velocidad,
por lo que la velocidad del bus llega a 40 megabytes por segundo.
ULTRA 2 SCSI o ULTRA 2 WIDE SCSI
Es la ultima tecnología, llamada también LVD (Low Voltage Diferential).
Normalmente estas tarjetas son 2 buses en 3 conectores. Dos de los conectores
forman un bus normalito ULTRA-WIDE de los comentados anteriormente y con los
terminadores conectados tal y como hemos comentado. Y ahora el canal LVD. Este
canal es el "otro" bus. Uno de los extremos sigue siendo la tarjeta. Por tanto,
una tarjeta ULTRA 2 con tres conectores, tiene dos posibles terminadores. Uno
para la parte normal ULTRA-WIDE y otro para la parte LVD (por tanto este ultimo
debe estar siempre "terminado"). Los dispositivos LVD (discos), son especiales.
En un bus LVD todos los dispositivos que enchufemos "deben" ser obligatoriamente
LVD. Sino lo hacemos así, TODO el bus se comportará como un bus NORMAL. En este
caso, los discos LVD, también tienen un jumper que se debe activar, para
decirle que debe comportarse como un disco normal y no como un disco ULTRA 2.
Por tanto en este caso, existen dos posibilidades:
1) Todos los dispositivos son LVD en ese bus. Entonces NINGUNO de los
dispositivos debe tener activo el jumper de "normal". Y el bus debe terminarse
"externamente" (al final, no puede ser que uno de los dispositivos haga de
terminador), mediante una resistencia especial llamada resistenca "activa" o
"terminador activo".
2) Alguno de los dispositivos en ese bus NO es LVD. Entonces el resto de
dispositivos LVD, deben tener al jumper de "no LVD" o bien "SE" conectado. En
este caso, en dichos discos ya puede activarse el jumper "TE" y por tanto, el
ultimo debe tenerlo activo. Sí el ultimo no lo tuviese activo, el bus debe
terminarse también con una resistencia externa. Pero debe ser una resistencia
"pasiva" o "terminación pasiva" en este caso. Es decir una resistencia normalita
como si fuese un bus ULTRA-WIDE de los citados anteriormente.
La velocidad de este bus soportada es de 80 megabytes por segundo.
*** Y por ultimo comentar que actualmente hay tarjetas y dispositivos que
soportan la tecnología SCAM. Esta tecnología es simplemente que los dispositivos
negocian (o pueden negociar) su ID con la tarjeta y la propia tarjeta puede
cambiárselo automáticamente. Con esto nos evitamos el "engorro" de tener que
asignar un numero a cada dispositivo, pero perdemos la flexibilidad de poder
asignar nosotros mismos las prioridades, ya que existe la posibilidad de que la
tarjeta nos lo cambie de prioridad.
Particularmente yo desactivo dicha opción en la bios de la tarjeta y lo gestiono
"a mano".
*** Y ya por ultimo, recordar que sino tenemos discos IDE y queremos que uno de
los discos de nuestra tarjeta SCSI sea el disco de "boot", la norma SCSI dice
que este disco debe tener el ID 0 o el ID 1. Esta es la norma, pero en las
tarjetas actuales, esto también es configurable mediante su bios.
Que ocurre desde que pulsamos el botón hasta el arranque Parte VII"Ethek &
El Técnico
Que ocurre desde que pulsamos el botón hasta el arranque
Parte VII
CONTROLADOR IDE
Este dispositivo, históricamente era una tarjeta "aparte" que se pinchaba en un
slot ISA. Después de aparecer el bus PCI dichas tarjetas empezaron a ser PCI y
en la actualidad, prácticamente en todas las placas madre vienen incorporadas.
** Se le llama controlador IDE, pero realmente es "la mitad" del controlador. Me
explico: la electrónica de los actuales discos duros lleva incorporada la otra
mitad. Recordemos que un controlador IDE soporta dos "buses" o "canales" IDE.
Cada canal IDE únicamente puede soportar a su vez dos dispositivos: discos
duros, disco y CD, o dos CDs. Por tanto estamos limitados a un máximo de 4
dispositivos IDE. Cada dispositivo debe estar identificado dentro del mismo
"canal" IDE como "master" o como "slave". Esto se configura mediante un switch o
jumper en el propio disco del le dice si es "MA" (master) o "SL" (esclavo). Sí
solo tenemos un dispositivo en un canal IDE, este debe ser "master". Por tanto
existen dos canales IDE (primario y secundario), y cada uno de ellos con dos
dispositivos (uno master y otro slave).
** Cada canal IDE, "pilla" una IRQ del sistema. El canal primario, la IRQ 14 y
el secundario la IRQ 15. Es importante la matización anterior, ya que si
únicamente tenemos utilizado un canal ¿no podríamos utilizar la IRQ 15 para otra
cosa? Pues efectivamente: sí. La manera de decirle a la bios que deje libre la
IRQ 15 porque no vamos a utilizarla en la controladora IDE, es precisamente
entrar en las pantallas de la bios y decirle que *no* tenemos canal IDE
secundario. Esto ultimo, puede que a Windows no le guste y nos marque una
admiración amarilla en el canal IDE secundario. No es problemático y no pasa
nada. Todo funcionará correctamente. De todas maneras, si esto nos pasase y
queremos que wndows no nos informe de esta "incidencia", en la mayoría de los
controladores actuales (drivers de Windows), se puede entrar en al Administrador
de dispositivos y en la controladora existe una opción (en casi todas) para
decirle lo mismo que le hemos dicho a la bios: que se utiliza solo el canal
primario. Con esto dejaremos ya de ver la admiración amarilla. Pero repito, esto
no influye en el rendimiento ni en el comportamiento de Windows.
VELOCIDAD DE LOS DISPOSITIVOS IDE
Siempre hemos oído hablar de las velocidades del disco duro, de la DMA, del modo
PIO 4, de las UDMA, y siempre nos han querido vender las cosas con frases
majestuosas: soporta UDMA 33 y nosotros nos quedamos con la boca abierta y luego
incluso vamos "fardando" de rapidez. Pero ¿realmente sabemos lo que nos han
vendido? ¿realmente es tan rápido? Tenemos varios componentes que influyen
desde que un sector de datos está en el disco hasta que ese sector de datos,
está en la memoria principal de nuestro PC. Por una parte tenemos la verdadera
velocidad del disco duro. Esta velocidad es única. Es un componente mecánico y
por tanto únicamente depende de la velocidad de rotación del disco (actualmente
en los IDE, hay velocidades de 4200, 5400 y 7200 revoluciones por segundo).
Cuando queremos leer un sector de datos, lo peor que nos puede pasar es que el
sector, acabe de pasar por debajo de la cabeza de lectura. Si es así, tendremos
que esperar una revolución completa del disco hasta que vuelva a pasar por
debajo de la cabeza de lectura. Lo mejor que puede pasar es que esté justo antes
de la cabeza lectora. En este caso se leerá inmediatamente. Y estadísticamente
la media de los sectores que queremos leer, estarán a la "mitad" de distancia de
una revolución completa del disco. Esto es lo que se define como "average", y
realmente solo depende de la velocidad de rotación. A mas velocidad, mas rápido
será el disco (y mas caro). No tenemos en cuenta aquí también otro factor. Si
la cabeza lectora no está en el cilindro correspondiente al sector que queremos
leer, el brazo que soporta a la cabeza lectora, tendrá que hacer un movimiento
transversal de posicionamiento a ese cilindro. Esto es lo que se denomina
"seek". Por otra parte, pensemos, que la "mitad" de las controladoras actuales,
están integradas dentro de la electrónica del disco duro. Y allí es donde
podemos tener el verdadero cuello de botella (otro más), ya que a circuiteria y
la lógica del propio disco, lo mas normal, cuando le solicitamos un sector, es
que "lea" más sectores y se lo pase a la controladora (a un mini-caché) por si
acaso inmediatamente después solicitamos otro sector contiguo (suele ser
bastante normal que nos interese leer mas de un sector: 512 bytes, incluso el
propio sistema operativo, se organiza en cluster que siempre son mayores de ese
tamaño, por tanto siempre se le solicitará al disco más de un sector en diversas
peticiones sucesivas). Pasemos a ver ahora como van los datos de la controladora
a la memoria.
DE LA CONTROLADORA A LA MEMORIA
Se pueden utilizar 4 métodos diferentes.
* Programmed I/O (PIO)
* Memory Mapped I/O
* DMA
* Busmaster DMA
PROGRAMMED I/O
En el "programmed I/O" la transferencia de datos entre controladora y memoria
principal se desarrolla a través de los diferentes ports de I/O (Entrada /
Salida) de la controladora que también sirven para la transmisión de comandos.
En el lado del software, se encuentra un programa correspondiente con los
comandos de lenguaje maquina IN y OUT. Pero esto significa que cada BYTE del
disco, debe pasar por la CPU después de ejecutar dicho comando. Uno a uno (o dos
a dos, como máximo)- En este caso, la tasa de transferencia de datos no solo
está limitado por los valores máximos de velocidad del bus, sino también por el
rendimiento de la CPU, y evidentemente en un sistema multitarea, la CPU puede
que llegue a estar demasiado ocupada preocupándose del acceso a los datos.
MEMORY MAPPED I/O
La CPU podría recoger los datos de la controladora de una manera mas rápida, si
esta los dejase en una zona de memoria fija. En este caso, la CPU puede trabajar
mucho mas rápidamente con estos datos ya que puede moverlos mediante las
instrucciones MOV que trabajan mas rápidamente que los accesos mediante IN y
OUT. De esta manera, en las actuales CPUs se puede obtener un mayor rendimiento.
Pero por desgracia, las controladoras no "saben" de memoria virtual, no saben
del modo protegido (protected mode) de la CPU. Unicamente conocen la memoria
real. Esto causa un problema muy serio de rendimiento en los actuales sistemas
operativos basados en las técnicas de memoria virtual (frente al antiguo MSDOS
que operaba con memoria real).
DMA
Más conocido que los dos procedimientos anteriores, es la transferencia DMA, que
en los PCs se soporta en un chip DMA propio. Este chip, debe posibilitar la
transferencia de datos desde un dispositivo (disco duro, disquete, CD-ROM,
etc..) a la memoria y evitar con ello, el largo camino a través de la CPU.
DMA = Direct Memory Access.
La idea es buena, ya que el software solo debe indicarle al controlador DMA,
cuantos bytes se han de transportar de donde adonde. Pero esto en el PC se
realizó de una manera bastante chapucera, ya que el controlador de DMA que
emplean los PCs, no solo es bastante inflexible (lo que aún se le podría
perdonar), sino sobre todo lento. Tan lento, que aún el acceso según el
procedimiento PIO en el peor de los casos es mas rápido a partir de los antiguos
486. Ya que como anacronismo en la historia de los PCs, el controlador DMA en
los AT y sus sucesores, siguió haciéndose funcionar a 4 MHz, en donde los
primeros PCs ya alcanzaban los 4,77 MHz. En ellos, en los antiguos, la
transferencia DMA es mas rápida que el PIO. De esta forma no se puede alcanzar
mas de 2 Mb /segundo. Por ello, la mayoría de los discos modernos ya no
controlan según el método DMA
BUSMASTER DMA
Otra forma del Direct Memory Access es el Busmaster DMA, pero este no tiene nada
que ver con el chip de DMA integrado en la placa madre, y del cual hemos hablado
anteriormente. En este tipo de acceso, la controladora del disco duro,
desconecta a la CPU del BUS y transfiere los datos con ayuda de un controlador
Busmaster DMA con control propio. De esta manera se pueden conseguir tasas de
transferencia de has 8 mb/seg. Busmaster DMA solo se empleaba en el caso de
controladoras SCSI.
UDMA
No lo he mencionado al principio del articulo, debido a que no es nada mas que
una variante del Busmaster DMA, implementada en controladoras IDE y aumentada su
velocidad de transferencia a 16 MB/s. Posteriormente surgió la UDMA 2 (o UDMA
33) hasta 33 megas/s. Y actualmente ya se están vendiendo placas madre con
controladoras incorporadas a 66 MB/seg.
NO LLEVARSE A ENGAÑO
No hay que llevarse a engaño con todo lo anterior. En las controladoras / discos
actuales, ambas cosas forman un TODO. Es decir, no solo el chip de la placa
madre debe soportar esa velocidad, sino que también el propio dispositivo (la
electrónica del propio disco duro), debe soportarla. Es decir un disco UDMA
actual (UDMA 2) por mucho que lo pongamos en una placa madre con controladora
UDMA 66, no dará mas rendimiento que el que daba en una UDMA 33.
GOODBYE AL MODO PROTEGIDO
Como colofón de esto, voy a hacer unos pequeños comentarios de diseño del propio
núcleo del sistema operativo, en relación con los métodos de acceso anterior.
Recordad que existen dos modos de funcionamiento del procesador. El modo "real"
que es el modo en MSDOS puro y duro, con el limite de 640 Ks en memoria contigua
y el limite de 1 mega + 64 Kb para todas las direcciones reales. Y el modo
"protegido", en donde se tiene acceso a toda la memoria de la maquina, y es el
modo en que funciona Windows, Linux, OS2, etc..... Las formas vistas antes de
transferencia DMA, solo se pueden utilizar en el mundo del modo Real
(Real-Mode), y llevan al procesador a un "cuelgue" si no se toman las medidas
adecuadas. El problema es la gestión de memoria virtual, manejada por la
Memory-Management-Unit (MMU) de la CPU. Es el encargado de formal las
direcciones virtuales para los programas que trabajan en modo protegido y
proyectarlas sobre las direcciones verdaderas (físicas) en la memoria. Pero de
esto, los programas no se enteran, ya que nunca entran en contacto con las
direcciones físicas, y el controlador de DMA no es una excepción: tampoco se
entera, ya que no tiene acceso a la MMU de la CPU. Esta problemática, no solo
surge en Windows y otros sistemas en modo protegido. También afecta al MSDOS
cuando este está trabajando o conmuta a modo Virtual-86 (el tercer modo de
funcionamiento del procesador). Por ejemplo en cuanto instalamos el EMM386.EXE
en el config.sys que sirve para la emulación de la memoria expandida y que
depende de la gestión de la memoria virtual del procesador. Solo hay un modo de
evitarlo, y es la vigilancia de la controladora DMA. Esto es posible en modo
protegido mediante el control de los ports I/O (virtualizacion del hardware).
Así por ejemplo, Windows instalar un Control-Monitor virtual en el fondo (en la
capa mas baja), que vigila la programación del controlador DMA, mediante la BIOS
o un programa, y que convierte las direcciones virtuales indicadas en
direcciones físicas verdaderas antes de que se escriban los registros del
controlador DMA (antes que se programe una lectura/escritura)
Que ocurre desde que pulsamos el botón hasta el arranque Parte VIII"Ethek
&
El Técnico
Que ocurre desde que pulsamos el botón hasta el arranque
Parte VIII
RESTO DE DISPOSITIVOS INCORPORADOS EN PLACA MADRE
En las placas madres actuales, tendremos incorporados:
1) Puertos serie (COM1 y COM2)
2) Puerto paralelo
3) Puerto de ratón
4) Puertos USB (prácticamente en todas las placas actuales).
PUERTOS SERIE
Simplemente son unos puertos de baja velocidad (115200 bits/segundo) Esta
velocidad es adecuada para los módem o el ratón serie, pero para comunicación PC
a PC mediante la conexión serie que nos suministra Windows, se queda bastante
escaso.
Esta comunicación equivale a unos 14 Ks por segundo. Evidentemente se queda muy
corta para conexión por cable. Debemos recordar que la velocidad se configura en
el Administrador de dispositivos. La velocidad configurada allí únicamente tiene
efecto en la conexión por cable y no tiene ningún efecto en el módem. Esto es
importante, ya que por defecto en Windows, viene a 9600. Mi consejo es
configurarlo al máximo de velocidad (normalmente 115200).
Las placas madre de ultima generación llevan incorporado un chip multipuerto que
nos puede dar hasta 1.000.000 (un millón) de bps. (en este caso, la comunicación
vía puerto serie, empieza a ser "decente").
PUERTO PARALELO
Este dispositivo, aunque muy "viejo", vamos a "mirarlo" con un poco mas de
cariño, y esto es debido a que ya no solamente se utiliza para la impresora,
sino que ya pueden conectarse a ella un montón de dispositivos. Los mas
"genéricos", por ejemplo, son: el ZIP, el LS-120 (SuperDisk), algunos modelos de
Scanners y algunos modelos de grabadoras de CD-ROM.
Debido precisamente a la conexión de estos dispositivos, debemos prestar
especial atención a su configuración en la bios.
Recordemos que las bios soportan normalmente:
ECP+EPP
ECP
EPP 1.9
EPP 1.7
Bidireccional
SPP
(nota: no todas las bios soportan el método ECP+EPP, y no todas tienen dos
normas para EPP -1.9 y 1.7-)
En general he escrito lo "optimo" de abajo arriba, pero lo optimo en función de
la velocidad y prestaciones, no quiere decir que sea lo optimo para nuestros
dispositivos.
Yo aconsejo realizar las pruebas del puerto paralelo seleccionando en la bios el
puerto paralelo con lo métodos anteriores, y probando cada opción de arriba a
abajo. Cuando encontremos la primera en la cual funcionen todos los dispositivos
que tenemos en el puerto paralelo, esa es la que debemos dejar.
No todos los drivers de impresora, ni drivers de scanner, etc., soportan todos
los métodos del puerto paralelo. Por ello es necesario "probar".
Es importante este tema, fijaros que por ejemplo un ZIP en puerto paralelo, pasa
de unos ridículos 5 Megabytes por minuto, hasta unos "buenos" 30 megas / minuto,
únicamente configurando correctamente el puerto (y ejecutando luego el
"optimizador de puerto paralelo" de iomega, que lo único que hace es "mirar"
como tenemos el puerto para "decírselo" al driver del ZIP. De esta manera,
pasamos de 5 a 30, simplemente tocando la bios y ejecutando en ambos casos el
"optimizador").
** La velocidad típica de puerto paralelo en una comunicación directa por cable
entre dos PCs, llega a 1 Megabyte por segundo, pudiendo alcanzar los 2,5 megas
en las placas madre de ultima generación que utilicen un "buen" chip de
multipuerto.
PUERTO DE RATON
Es un puerto (una conexión) especifica incorporada en la placa madre, y que por
desgracia nos "roba" una preciosa IRQ (suele ser la 12). Lo normal es que pueda
deshabilitarse el puerto de ratón en la bios. En ese caso no se utilizará esa
IRQ, pero... no todas las bios la van a dejar disponible para otros dispositivos
en la placa madre al deshabilitarlo.
He visto situaciones en (placas madre SuperMicro) que aunque deshabilitemos el
puerto de ratón en la placa madre, no deja que ningún otro dispositivo "pille"
la IRQ 12 (al menos dispositivos PnP.). En otras placas, al deshabilitar el
puerto de ratón, vemos que inmediatamente es seleccionada por algún dispositivo
PnP.
Otra desventaja de este puerto, es que la IRQ que "pilla", es del tipo ISA. Es
decir la pilla "en exclusiva" y no puede ser compartida por otros dispositivos.
Como comentario personal, no entiendo el porqué apareció este dispositivo,
máxime teniendo 2 puertos serie en un PC, y siendo el ratón un dispositivo que
*no* necesita "velocidad" en el puerto. Entiendo que es una herencia arrastrada
y que surgió en sus épocas únicamente por motivos de marketing (de IBM).
PUERTOS USB
Bien, en un principio se apostaba por ellos como la conexión universal y el
futuro de todos los periféricos a conectar a un PC. Desde luego, este tipo de
apuesta no va tan rápido como se esperaba.
* La mayoría de las placas madre actuales, suelen llevar incorporados dos
puertos USB. Si no fuese así, podemos adquirir por un precio no excesivo, una
placa PCI especifica que nos suministre los dos puertos.
* Por tener USB, la bios le asigna una IRQ, pero en este caso, esta IRQ es del
tipo PCI y se puede compartir con el resto de dispositivos PCI que tengamos en
el PC. Al igual que en el caso de puerto de ratón normalmente en la bios podemos
"desactivar" el USB si no vamos a tener dispositivos de este tipo. Si lo
desactivásemos, se quedará libre para el sistema, pero en este caso no tiene
mucho sentido, ya que "no molesta" al ser una IRQ que es capaz de ser
compartida.
* La velocidad de un bus USB son 12 megas (bastante aceptable comparado con los
anteriores "buses").
* Recordemos que un bus USB puede tener hasta 127 dispositivos. La pregunta del
millón es ¿si solo tengo 2 puertos en el PC, como es posible conectar hasta 127
dispositivos?. Pues fácil, desde un puerto puedo conectar un HUB (como en las
"redes", es decir una especie de distribuidor) que tiene una entrada y "n"
salidas. Y así se pueden conectar en "cascada" tantos HUB como queramos hasta
tener las 127 posibles salidas (incluidos en ellas los propios HUB).
** AVISO: Existió un problema de hardware con los primeros chip de bus USB
fabricados por Intel que no funcionan correctamente. Para ver si nuestro "chip"
es bueno, debemos ir al Administrador de Dispositivos, y abrir el dispositivo
"Controlador serie universal USB" y debajo de él veremos colgando un dispositivo
del tipo "Intel XXXXX PCI to USB Universal Host Controller" Pinchándolo,
podremos ver en esa pantalla la "Revisión de Hardware". Debe ser la 001 o
superior. La versión 000 no funciona e Intel aconseja que nos pongamos en
contacto con el fabricante de la placa madre y se la devolvamos (como si fuese
tan fácil!).
** IMPORTANTE: Normalmente los puertos USB, pueden dar un pequeña cantidad de
corriente a los dispositivos. Existen dos "estandard": de 100 mA (mili Amperios)
y de 500 mA. Windows controla en función del dispositivo "colgado" su consumo, y
si el consumo es superior al tipo de puerto, desconecta el dispositivo.
Debe prestarse atención, entonces, a ciertas cámaras de vídeo, las cuales toman
"corriente" del puerto. Las cámaras de vídeo son "devoradoras" de corriente, por
lo que corremos peligro que Windows las desconecte.
Igualmente, conozco placas madre, que a pesar de montar el chip correcto de
Intel capaz de dar hasta 500 mA, fallan estrepitosamente al informar
incorrectamente a Windows del consumo de sus periféricos. (problemas de la bios
de la placa madre y que normalmente se corrige en alguna revisión de la bios)
*** Y con esto cerramos el capitulo (por ahora) dedicado al hardware y las
inicializaciones que efectúa la bios sobre él en el momento en que "pulsamos el
botón de encendido de nuestro PC". Igualmente hemos visto las posibles
parametrizaciones que podemos hacer del hardware a través de la bios.
A partir de ahora, vamos a entrar con el "software", es decir una vez que la
bios a inicializando los componentes hardware y empieza a construir ciertas
tablas de interrupciones y parámetros en la memoria del PC, para a continuación
"buscar" un disquete o un disco duro con el sistema operativo y cargarlo en
memoria.
Que ocurre desde que pulsamos el botón hasta el arranque Parte IX"Ethek &
El Técnico
Que ocurre desde que pulsamos el botón hasta el arranque
Parte IX
PREPARACION DE LA CARGA DE UN SISTEMA OPERATIVO
Bien llegados a este punto, suponemos que la bios ya ha inicializado todos los
dispositivos de la maquina. Asignado las correspondientes IRQs y recursos a los
dispositivos y ahora va a proceder a cargar el sistema operativo.
Lo mas normal es que intente su carga desde un disquete primero. Si esta carga
falla, lo intenta desde el primer disco duro.
Hay que matizar, antes de continuar, que esto es configurable en la bios de la
maquina. Lo comentado en el párrafo anterior es la opción por defecto de casi
todas las bios, y matizando precisamente en esta opción, mi consejo es
precisamente desactivar el intento de carga desde disquete en la bios. Casi
todas las bios, permiten cambiar la secuencia de arrancada de A,C (es el
defecto) a C,A o bien C only. Las ventajas que tenemos con esto son:
1) Se iniciará la carga mas rápidamente ya que no irá a buscar a disquete.
2) No tenemos el riesgo de habernos dejado un disquete en la maquina con un
virus del boot. Si lo tuviésemos e intentase arrancar desde el disquete aunque
no lo consiguiese, ya nos habría infectado el disco duro.
Vamos a ver primero, precisamente la carga (el inicio de la carga) desde disco
duro. Luego veremos una variante de este método de carga, que coincide
precisamente con el arranque estandard desde un disquete. Para ver la carga
desde disco duro, debemos conocer primero como está lógicamente particionado el
disco.
PARTICIONES EN UN DISCO DURO
Bien, por definición un disco duro permite hasta 4 particiones. No puede tener
más y la explicación, proviene del diseño del sector de boot del disco duro.
Este sector de boot, se le llama también MBR (Master Boot Record). Dicho sector
que ocupa siempre la misma posición física en todos los discos duros (cabeza
cero, cilindro cero, sector 1), tiene un diseño fijo.
Todos los sistemas operativos tienen un FDISK o similar, que "sabe" crear en
vacío este sector y además lo hace automáticamente si el disco está nuevo
(recién comprado). Todos los sistemas operativos, lo crean exactamente igual.
Recordad que el tamaño de un sector es únicamente 512 bytes.
La estructura de dicho sector, es un mini-programa y una pequeña tabla de 4
elementos. Cada elemento de la tabla, tiene los datos de cabeza, cilindro,
sector de donde empieza una partición, de donde termina, el tipo de partición
(hay unos códigos para FAT 16, FAT 32, Linux, NTFS, primaria, secundaria
etc...), y una marca de cual es la partición "arrancable".
El mini-programa de este sector, lo único que sabe hacer es leer dicha tabla,
buscar si existe una partición "arrancable" y si existiese, va a la posición del
cilindro, cabeza, sector de comienzo y allí carga en memoria el primer sector
que encuentra y lo ejecuta. Este nuevo sector es precisamente el "boot" de la
partición (no confundirlo con el MBR, o sector 2 "boot" del disco que hemos
citado anteriormente). Este ultimo "boot", el responsable de crearlo es el
"format". Y el responsable de la creación de las particiones es el FDISK (en
sistemas Microsoft)
Entonces, retomando un poco el titulo de estos artículos, la bios lo que hace es
cargar en memoria el MBR del disco duro (en la dirección 7C00 hexadecimal) y
cede el control a dicho programa. Este se realoja en otra posición de memoria,
busca la partición "activa" o "arrancable" y carga en memoria su sector de
"boot", también en la dirección 7C00 y le cede control.
Pero antes de continuar con esto, merece la pena que echemos una mirada
al sector de particiones o MBR.
EL SECTOR DE PARTICIONES
El llamado sector de particiones es creado por FDISK en su primera llamada (con
un disco recién adquirido y sin preparar) o cuando ejecutamos el comando FDISK
/MBR.
Es el primer sector del disco duro (cabeza 0, cilindro 0, sector 1). Este es el
sector que siempre arranca la BIOS primeramente antes de cargar ningún sistema
operativo. La bios lo carga en la posición de memoria 0000:7C00 siempre que no
encuentre un disquete en la unidad A:.
Si los dos últimos bytes de los 512 de este sector contienen el código 55h,AAh
(hexadecimal) considera este sector como ejecutable y comienza la ejecución de
programa en el primer byte de este sector una vez se ha cargado en la posición
de memoria anterior.
El código de programa que hay en este sector de arranque, tiene como tarea el
reconocer la partición "activa" y con ello, el sistema operativo a ejecutar,
cargar su sector de arranque y comenzar la ejecución del código de programa que
allí está contenido. Ya que este código de programa, por definición, se ha de
encontrar en la posición de memoria 0000:7C00, el código de partición,
primeramente, se desplaza a la posición de memoria 0000:0600 y con ello deja
espacio para el sector de arranque.
Dirección Contenido Tipo
+000h Código de la partición Código
+1BEh 1ª entrada en la tabla de particiones 16 Bytes
+1CEh 2ª entrada......... 16 Bytes
+1DEh 3ª entrada......... 16 Bytes
+1EEh 4ª entrada......... 16 Bytes
+1FEh Identificación AA55h 2 Bytes
Longitud= 200h = 512 Bytes.
Veamos cada entrad de 16 Bytes que define una partición, que es lo que contiene:
Dirección Contenido Tipo
+00h Estado de la partición 1 BYTE
00h = Inactiva
80h = Partición de arranque
+01h Cabeza de lectura/escritura 1 BYTE
donde comienza la partición.
+02h Sector y Cilindro donde comienza 2 BYTES
la partición (formato WORD - palabra)
+04h Tipo de partición 1 BYTE
00h = Libre
01h = DOS con la vieja 12-bit FAT
02h = XENIX
03h = XENIX
04h = DOS FAT 16
05h = Partición extendida
06h = Partición DOS 4.0 > 32 Megas
DBh = Concurrent DOS
.... etc
+05h Cabeza de lectura/escritura 1 BYTE
donde termina la partición.
+06h Sector y cilindro donde 2 BYTES
termina la partición.
+08h Distancia del primer sector de la 4 BYTES
partición (Sector de arranque)
+0Ch Numero de sectores de esta partición 4 BYTES
Longitud = 10h = 16 Bytes
----------------------------------------------
Luego las funciones del programa de boot (MBR) del disco duro son:
1) Localizar el sector de arranque de la partición activa, para esto se recorre
las 4 entradas de las 4 posibles particiones para ver cual es la activa.
2) Posicionar la cabeza de lectura escritura en dicha partición.
3) Volver a cargar los 512 primeros bytes de esa partición en memoria y ceder el
control (este es el verdadero sector de arranque del sistema operativo. En el
caso de MSDOS o WINDOWS, es creado al dar un FORMAT a la partición)
Que ocurre desde que pulsamos el botón hasta el arranque Parte X"Ethek &
El Técnico
Que ocurre desde que pulsamos el botón hasta el arranque
Parte X
PARTICIONES. SU SIGNIFICADO Y SU CREACION
Una partición, no es ni mas ni menos que reservar un "trozo" (o todo) del disco
para contener un sistema operativo o datos.
La manera de crear / borrar particiones bajo MsDOS (o en los sistemas operativos
de Microsoft), es mediante el comando FDISK.
* La primera pregunta que nos realiza FDISK es si queremos soporte para grandes
particiones (por defecto viene activada la letra "S" en Windows 98). Esta
pregunta a lo que realmente se refiere, es que si decimos "S", la partición que
vamos a crear en ese momento, será FAT 32. Si decimos que "N", la partición a
crear será FAT 16.
Al contrario de lo que cree mucha gente, no es en el FORMAT en donde se le dice
en tipo de FAT, sino justo en el momento de crear la partición.
Antes de continuar con las particiones, vemos que hemos introducido un concepto:
FAT 16 y FAT 32. Vamos a hablar un poco de ellas.
FAT 16 y FAT 32
Bien, imaginemos que ya tenemos un "pedazo" de disco. Imaginemos ahora que
queremos guardar allí archivos. ¿de que manera "físicamente" puede hacerse, para
ser capaces de almacenarlos y recuperarlos rápidamente?.
Se admiten ideas......
Bueno, los primeros programadores del MsDOS, de los cuales heredamos el actual
Windows, tuvieron que "diseñar" un sistema de archivos... El diseño, quizá no
sea el mejor (seguro que no), pero funciona y por suerte o por desgracia lo
hemos heredado. Pensemos un poco.... ¿como lo diseñaron? Pues mas o menos
razonando de la siguiente manera:
1) Evidentemente la manera mas rápida de acceder a un archivo, siempre es si
tenemos un "índice" a donde está ese archivo.
2) Sí tenemos un "índice", debemos guardarlo siempre en el mismo sitio para que
el sistema lo busque rápidamente.
3) Además, de alguna manera, deberemos ser capaces de buscar rápidamente sitios
no utilizados en el disco para poder grabar un archivo nuevo.
4) Lo mejor sería tener numerados todos los "pedacitos" del disco. Sabemos "por
diseño" que la mínima cantidad que entiende un controlador de disco son 512
bytes. Es decir se grabará de 512 en 512.
5) Pero 512 es poco. ¿por qué no agrupamos pequeños grupos de 512 bytes?.
Correcto. Pues tenemos que dar un nombre a esta "agrupación". Y se decidió darle
en nombre de "cluster". Ya veremos cual es el tamaño mejor.
6) Ahora bien, si tenemos "cluster". ¿no sería mejor tener en un índice también
al inicio del disco para saber si está libre o ocupado?. Vale, pues parece
correcto. Pero como esto es delicado por si acaso, vamos a tener 2. El original
y otra copia de él.
7) Bueno ya tenemos un índice para tener los archivos. Vamos a llamarle
"Directorio principal". También tenemos unos pequeños índices o tablas que nos
indican si un "cluster" está libre o ocupado. Vamos a llamarle FAT (File
Allocation Table, o "tabla de asignación de archivos").
8) Y como podemos ahora guardar un archivo. A ver ¿que nos hace falta saber de
un archivo?. Pues, "Su nombre", "la fecha de creación", "la fecha de
modificación", en que "cluster" comienza, su tamaño en "bytes", y de paso, vamos
a ponerle también "atributos". Del tipo "archivo", "Oculto", "Sistema", "Solo
lectura".... Bueno, pues todas estas características comunes las guardamos en el
"directorio".
9) Y ahora su contenido. Hemos dicho que en el directorio está el numero del
"cluster" en donde comienza el archivo. ¿Como lo hemos buscado?... Bien hemos
hablado de la FAT. La FAT en principio podría ser simplemente un bite por cada
cluster del disco, al inicio del propio disco, que nos dijese 1 o 0 para saber
si está libre o ocupado. Pero ¿que tal si utilizamos esto para algo más?. Vamos
a utilizarlo.
10) ¿y si cada "entrada" en la FAT, en vez de ser de 1 bite, con contenido uno o
cero, lo definimos de "n" bites de tal manera que tengan un cero si está libre.
Pero si está ocupada, que su contenido sea distinto de cero pero puede ser
perfectamente el numero del siguiente cluster que utiliza el fichero, en el caso
de utilizar mas de un cluster. Y además, si es el "ultimo" cluster del fichero,
pues podemos ponerle una marca. Por ejemplo todo a "unos" binarios.
11) Parece que encaja. Entonces para grabar un archivo nuevo, primero buscamos
un hueco en el directorio. Allí grabamos su nombre y sus datos de fecha,
atributos, tamaño, etc. Ahora vamos a la FAT. La recorremos buscando una
posición que tenga "ceros". Esto nos indica que ese cluster del disco estará
vacío o se puede utilizar. Pues nos guardamos dicho numero en el directorio, y
asignamos todos a unos binarios en esa posición de la FAT. Igualmente guardamos
en el cluster físico del disco el primer pedacito de nuestro archivo. Ahora
miramos si el archivo ocupa mas tamaño de un cluster. Si es así, continuamos
recorriéndonos la FAT para buscar el siguiente "hueco" a ceros. Cuando lo
encontremos, en la posición ANTERIOR que habíamos grabado unos binarios, le
ponemos la dirección de este nuevo "hueco" y a este hueco le llenamos con unos
binarios (y grabamos en ese cluster, el segundo pedacito de nuestro archivo). Y
así continuamos hasta el final del archivo.
12) ¿que estamos haciendo con lo anterior?. Fácil: crearnos una "lista" de
apuntadores al disco. Supongamos, que el tamaño del cluster es 4 Kbs. Supongamos
que cada entrada en la FAT es de 16 bites y recordad que el numero máximo en
binario que puede tener con 16 bites es 2 elevado a 16, es decir, desde cero a
65535. Con la suposición anterior, vamos a ver como guardaríamos un archivo de
7150 bytes.
12.1) Primero se busca un hueco en el directorio. Una vez encontrado recorremos
la FAT de 2 bytes en 2 bytes (16 bites = 2 bytes). Imaginemos que encontramos
"cero" en la posición 124 desde el inicio de la FAT. Como vamos de 2 en 2 bytes,
indica que el "cluster" numero 64 del disco está libre.
12.2) Entonces guardamos el numero 64 en el directorio. Grabamos unos binarios
en esa posición de la FAT, y en el cluster 64 real del disco grabamos los 4
primeros Kbs del archivo.
12.3) Como el archivo tenia 7150 bytes y hemos guardado 4 Kbs, quiere decir que
para guardar el resto, debemos guardar otro pedacito de 4 Kbs. Entonces,
realizamos la secuencia definida en 12.1) es decir buscamos el siguiente hueco,
Por ejemplo el 250 (esto indica el cluster 125). Guardamos el numero 125 en la
p
Aún no hay comentarios para este recurso.
Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.
Contacto »