Volver a la portada de Duiops
Volver al Web de Duiops
 
   
Menú
Secciones destacadas
Artículos y FAQs
Trucos de Windows
Versiones de Windows
y suites de software
Windows Vista
Windows Media Center
Windows XP
Windows 2000
Windows Millenium
Windows 98/98 SE
Windows 95 OSR-2
Internet Explorer
Office
Otros
Tutorial muy básico
   
Portada
Portada - Artículos y FAQs - Desde que pulsamos el boton de encendido de nuestro PC hasta... (parte 17)
 
Desde que pulsamos el boton de encendido de nuestro PC hasta... (parte 17)

 

Por Jose Manuel Tella Llop, extraído de microsoft.public.es.windows98

(esto me parece que va a ser un poco "duro". Creo que hoy me he "pasao tres pueblos"....... A ver quien me aguanta hasta el final...)

DESDE QUE PULSAMOS EL BOTON DE NUESTRO PC HASTA..... (Parte 17)
----------------------------------------------------

SE INICIA YA LA CARGA DE WINDOWS
--------------------------------

Llegado a este punto, ya hemos visto un poco de la maquina, del procesador del MsDOS, y nos empiezan a "sonar" los terminos de memoria real, modo protegido, dispositivo PnP..... etc.

INTRODUCCION A SISTEMAS OPERATIVOS
----------------------------------

Windows 98, a pesar de arrancar "sobre" MsDOS es un sistema operativo con todas las de la ley. No se apoya en MsDOS. Unicamente lo hace por motivos de compatibilidad en ciertas situaciones y para ciertos dispositivos que ya veremos mas adelante.

Por poner un simil con otros sistemas operativos, NT y Linux por ejemplo. Estos no se apoyan en MsDOS, pero para arrancar se apoyan en  la Bios de la maquina. Siempre arranca la Bios. En Windows 95 / 98, hay un paso mas: primero arranca la Bios, posteriormente el MsDOS y por fin el Windows. El paso más es el MsDOS, pero debemos verlo de esta manera: como un "paso" más.

Es verdad que con posterioridad a la "patada" inicial, el NT y el Linux, montan su capa de abstraccion del hardware (HAL), y se olvidan totalmente, de la Bios. Y no utilizan sus recursaso para nada, y es más, ni se fian de como han inicializado los posibles dispositivos. Ellos los vuelven a verificar e inicializar.

Esto por desgracia, parece que se va a perder en la informatica. Existen ya distribuciones de núcleo de Linux, que "sí" se apoyan en las bios (evidentemente con nuestro consentimiento). Igualmente, parece que el futuro Windows 2000, tambien se va a apoyar en la bios (y en este caso, excesivamente por ahora -en la beta 3-).

** Veamos ahora los dos modos de funcionamiento del procesador "REAL" y "PROTEGIDO", y al final de esta parte, vermeos tambien el "MODO VIRUTAL 8086" que es el tercer modo de funcionamiento del procesador y que es el que nos dará soporte a las ventanas MsDOS desde Windows.

MODO REAL Y MODO PROTEGIDO
--------------------------

Vamos a repasar un poco más en detalle estos dos terminos, antes de empezar con la carga real de Windows. Vamos a hacerlo así, debido a que Windows,lo primero que hace es poner a trabajar a la CPU en modo protegido.

Hasta ahora, hemos visto el modo REAL. Recordemos que el procesador arranca siempre en este modo fundamentalmente por cuestiones de compatibilidad. Recordemos un poco sus caracteristicas:

1) La memoria está restringida a lo que podamos dirección ar con 20 lineas de direcciones (por tanto 2 elevado a 20 posiciones de memoria dirección ables = 1 Mega).

2) Hay zonas que obligatoriamente estan en uso por el hardware (la zona de video: segmento A000 a C000)

3) Existe una zona de vectores de intrrupcion (interrupciones software) en las direcciones de memoria desde la posicion 0 a la 1024 fisicas reales. (256 interrupciones, y cada interrupcion, 4 bytes. 2 para definir el segmento y 2 el desplazamiento). Esta table contiene las direcciones de las rutinas a las que saltará automaticamente el hardware: la CPU, cuando se le interrupa mediante una INT xx (interrupcion xx). Muchas de estas interrupciones software, realmente son "preparadas" por la bios de la maquina, y algunas de ellas, se disparan como consecuencia de una interrupcion hardware (IRQ). Lo IMPORTANTE es destacar, que el manejo de interrupciones lo hace la CPU ya que lo tiene implementado por hardware. Es decir "ella solita" salta a la correspondiente dirección de la tabla una vez que se produce la interrupcion. Además la CPU en el modo real "sabe" que esta tabla empieza fisicamente en el desplazamiento cero de la memoria fisica.

** ¿que hay que hacer para poner a trabajar la CPU en modo protegido?: pues muy poco. Se coloca en unos registros especificos la nueva dirección de la tabla de interrupciones (llamadas aquí "excepciones"), se crea una tabla con los descriptores de segmento en modo protegido y se le pasa su dirección tambien a otros registros especiales del procesador, se cambia ahora un bite de un registro de control de la CPU, y se realizá un salto "largo" (JMP FAR). A la vielta de ese salto, ya estamos en modo protegido.

** ¿pero realmente que és el modo protegido? Bueno, esto es un poco mas costoso de explicar en unas pocas lineas. Voy a intentar resumirlo.

La CPU en este modo nos dá tres cosas:

1) Control de procesos, Proteccion.
2) Proteccion mediante la memoria virtual y su mecanismo.
3) Virtualizacion del hardware.

CONTROL DE PROCESOS. PROTECCION.
--------------------------------

Este es un nuevo concepto. Recordar que una dirección de memoria era un segmento y un desplazamiento.

Ahora suponer que lo que antes llamabamos segmento (16 bites), ahora es un indice (es decir vale, 1, 2, 3, 4,.....) y que la dirección real de memoria es lo que se indicque en una tabla (llamada tabla global o local de direcciones).

Es decir si nuestro segmento, contiene un 1, indica que realmente nos estamos refiriendo al contenido de la primera posicion de la tabla de direcciones. Este contenido se toma tal y como tomabamos el antiguo segmento, que sumado al desplazamiento, nos dá la dirección real.

Entonces lo que antes llamabamos segmento y que ahora contiene un indice, le cambiamos de nombre: pasa a llamarse: "Descriptor".

Y ademas, lo modificamos un poco: por tener 2 bites, puede tener un numero desde 0 a 65535. ¿y nos hacen falta 65535 elementos de direcciones?. Probablemente no. Entonces vamos a limitarlo. Supongamso que utilizamos unicamente 13 de los 16 bites. Con esto tendriamos unicamente 8192 posibles elemento de la tabla de direcciones. Nos dá de sobra, ya que además en cualquier momento podemos apuntar los registros que definen la tabla de direcciones a una nueva, y así tendriamos otros 8192 posibles elementos. Lo importante, es el para qué vamos a utilizar los otros bites. Facil, en particular, con 2 de ellos podemos tener el valor 0, 1, 2 y 3.

Estos bites en el descriptor de segmento, nos van a indicar el "modo" de funcionamiento del procesador en el segmento de codigo que esté a su vez apuntado por el indice del descriptor a la tabla de direcciones.

El modo "0" es el modo más potente. Puede realizar todo. A este modo se le llama modo KERNEL del procesador. Es decir el codigo del programa que se este ejecutando en modo 0, tiene acceso a todo. Esto puede servirnos para el "núcleo " del sistema operativo.

El modo "1" en principio puede hacer todo, excepto saltar a modo cero. Igualmente el "2" no tiene acceso a los anteriores, y el "3" no tiene acceso nada mas que a segmentos de us propio modo. Este es el modo menos potente. No puede hacer casi nada. Este es modo en que deben ejecutase los programas de aplicacion. Es el llamado modo USER.

Evidentemente, tiene que existir alguna manera de poder ejecutar "trozos" de codigo del sistema operativo. Pero en principio el modo "3" no puede saltar a modo "0", y de hecho no salta. No puede. Lo hace mediante la tecnica de "excepciones" o puertas de tarea. Estas están totalmente protegidas, por lo que un programa de usuario, nunca podría "tirar" al sistema operativo.

Graficamente lo anterior, puede pintarse con un circulo. Este es el modo 0. Luegop un circulo concentrico mayor. Es el modo 1, y así pintar otros dos circulos contentricos mayores hasta el modo 3. Y ahora graficamente, podemos decir que podemos saltar del interior al exterior en cualquier punto, pero nunca al reves. Para pasar al reves. solo puede hacerse en ciertos "puntos" de cada circulo. Estos puntos, son la "puertas de tarea".

Curiosamente..... de esta manera ya se puede implementar proteccion a nivel de tareas. El tema es mucho mas complejo con respecto a los descriptores, pero a nivel de introducción nos puede servir.

MEMORIA VIRTUAL. SU MECANISMO.
------------------------------

Antes hemos comentado que una dirección , es un descriptor de segmento y un desplazamiento. Este descriptor de segmento, es un indice que apunta a una tabla y contiene el "segmento" real que sumado al desplazamiento inicial, nos da, la dirección correcta. La dirección es ya la dirección real fisica de memoria que queremos localizar. (memoria lineal).

Todo este "cisco" que he contado, no hay que preocuparse. No necesitamos "programarlo" nosotros. El hardware lo hace por nosotros. Todo esto lo tiene implementado directamente la CPU. En general esto que estoy describiendo, no es una cosa de la arquitectura 386 (es decir los actuaes Pentium). Es algo de "todas" las CPUs. Intel no descubrió nada nuevo con esto (tiene algunas matizaciones...). Todas las CPUs trabajan basicamente con los conceptos descritos en estos capitulos.

Pero... que pasa si además de esta tabla, o este mecanismo mejor dicho, de "segmentacion", el cual nos dá una dirección lineal, esta en vez de ser la dirección fisica, lo que hacemos es que a su vez apunte a otra tabla especial. Vamos a llamarla tabla de "paginacion". Esta nueva tabla, tendrá en cada elemento, bien su dirección ya en memoria real, o bien su dirección en el archivo de paginacion (ya veremos que es esto).

Y sí ademas, este mecanismo lo implementamos por hardware, y que sea la CPU la encargada de realizar todo este trasiego de direcciones, pues mucho mejor ¿no?.

Pues ahora, empezemos al reves: cogemos toda la memoria y la dividimos en paginas de 4 Kbs. La dirección o numero de pagina, lo ponemos en una tabla que nos vamos a crear con las direcciones de dichas paginas. Además esa tabla, va a contener un indicador de si está en memoria real o bien en disco en el archivo de paginacion.

Cada elemento de la tabla, son las direcciones sucesivas de memoria que "cree" ver nuestro programa. Pero la CPU, accediendo a dicha tabla, salta a la dirección real que está allí indicada que será cualquier otra, o bien, si está en disco, carga esa pagina del disco, en cualquier localizacion de memoria libre, y le cede control.

Es decir, estamos "virtualizando" las direcciones. Nuestro programa no entiende de direcciones reales. Unicamnete direcciones virtuales que son las que le muestra la tabla de paginacion. Y es la CPU la que se encarga del trasiego de paginas de memoria real al archivo de paginacion (cunado no le "caben") y al contrario.

Evidentemente, el propio hardware, sigue unos criterios para descargar las paginas "menos" utilizadas al archivo de paginacion. Una vez que ha hecho esto, con marcar en la tabla de paginas, que esa dirección no está en memoria real y está guardada en tal posicion de disco.... pues ya está. Los programas ni se enteran. Realmente estan en modo "virtual".

VIRTUALIZACION DEL HARDWARE
---------------------------

Bien, al igual que se puede poner poner un mecanismo por el cual las tareas están protegidas, tambien puede ponerse un bit de marca que nos indique si un descriptor de segmento (es decir el codigo, real o virutal) al que apunta ese descriptor, está autorizado o no para ejecutar una entrada / salida directa al hardware. Es decir una instruccion IN / OUT en ensamblador de las que veiamos al principio de estos capitulos.

Si el bit está activo, se lo permite. Si no, lo que hace el procesador cuando encuentra una instruccion de estas, es provocar una "excepcion". Esta excepcion, tendrá su puerta de tarea y un manejador de esta excepcion. Un "manejador" de excepciones, no es nada mas que un "trozo" de codigo de programa (normalmente perteneciente al sistema operativo, o implementado por algun driver), el cual es el encargado real de ejecutar ducah instruccion o de prohibir su ejecucion.

Por eso, por ejemplo, en Windows NT, que tiene virtualizacion completa del hardware, no podemos realizar ninguna instruccion no permitida, y la mayoria de juegos basadso en DOS, que intentan acceder al hardware directamente, la propia CPU no les deja. Se dispara una "excepcion" y el manejador de dicha "excepcion" se lo prohibe. Recordad que una secuencia mal programada de IN / OUT directos a un puerto, o bien intentando acceder a un puerto inexistente, es lo que provoca las caidas de maquina. Un sistema operativo "serio" no puede dear que se realicen estas cosas (NT, Linux). Un sistema que quiera guardar compatibilidad ocn el "viejo" MsDOS, por desgracia, no virtualiza totalmente el hardware, y deja hacer la mayoria de las cosas a casi todos los programas. Esto es lo que provoca "cuengues" en Windows 98 por programas mal codificados (o mal "educados").

** La pregunta que surge es: ¿si unicamente es un bit, el que "indica" estas protecciones, facil, por que no lo cambiamos?

Y la respuesta mas facil todavia: porque no se puede. No deja la CPU ejecutar una instrucccion de este tipo, cuando nuestro programa está en modo USER. Unicamente el sistema operativo que está en modo KERNEL es el que puede ejecutar estas instrucciones privilegiadas. Y además si lo intentamos, se provocará otra excepcion. Y en esa excepcion, el sistema operativo hará lo que considere oportuno: normalmente "matar" a esa tarea.

MODO VIRTUAL 8086
-----------------

**** Bueno, y este será el siguiente capitulo......


Volver a Artículos y FAQs

 

     
 

Volver arriba Volver arriba

© 1997-2009 Duiops (http://www.duiops.net)
Prohibida la reproducción parcial o total de los textos o las imágenes

Para comentarios, usa las direcciones e-mail de contacto.