|
Desde que pulsamos el boton de encendido de nuestro PC hasta... (parte 18) |
|
|
|
Por Jose Manuel Tella Llop, extraído de microsoft.public.es.windows98
DESDE QUE PULSAMOS EL BOTON DE NUESTRO PC HASTA..... (Parte 18) ---------------------------------------------------- MODO VIRTUAL 8086 ----------------- Es el tercer modo de funcionmiento del procesador. Simplemente se le dá un espacio de direcciones virtuales de un mega y al poner a trabajar el procesador en este modo es como si estuviese en modo real. Pero es "como" si estuviese. No lo está y todas las llamadas podrían ser interceptadas por el sistema operativo. Pongamos un ejemplo muy claro. Habiamos dicho que la dirección de memoria grafica para modo texto es el segmento B800. Pues bien, si fisicamente "ponemos" en la posicion de memoria B800:0000 (una dirección asoluta de memoria), dos bytes, uno de ellos con los atributos de color y otro con la letra "A", veremos instantanemanete la letra "A" con el color seleccionado en la esquina superior izquierda de la pantalla. Es instantaneo, como si la pantalla fuese una "ventana" a esa dirección de memoria. Esto es en modo real. Pero la pregunta es ¿como lo hace Windows cunado abrimos una ventana msdos?. Es importante esto, ya que el escribir en esa posicion de memoria por un probrama, implicaría que esa "A" saldría instantanemante en pantalla. Y no sucede esto, lo vemos, eso sí en la parte superior izquierda de una "ventana" MsDOS que puede estar además fisicamente en cualquier posicion de nuestro monitor. ** Bien, es facil si hemos entendido un poco el mecanismo de memoria virtual. La solucion es "marcar" esas paginas de memoria como "paginadas" en la tabla de paginas. Al ir a utilizar esa dirección , como está teoricamente paginada, ocurres una excepcion del procesador, entra a funcionar el mecanismo de excepciones, y un manejadro para esta excepcion toma control. Este manejador "se da cuenta" de lo que queria hacer el programa y en vez de hacer lo "normal" que es buscar en el fichero de paginacion y traer a memoria fisica la pagina que falta, lo que hace, es "dibujar" esa "A" que queriamos en la ventana MsDOS en la esquina superior izquierda. Parece un poco retorcido..... pero es la unica solucion, y funciona perfectamente. De cara al programa que se está ejecutando, para el es como si estuviese funcionando en modo real. Es exactamente lo mismo, pero en vez de hacer lo que el quiere, se hace lo que quieres el sistema operativo. Ademas, ese "mega" de memoria, está en cualquier sitio de la memoria fisico, incluso troceado, da igual. Unicamente Windows,construye una tabla de memoria con las paginas que le interese, lo pone en unos registros del procesador y cambia a modo virtual 8086. MULTITAREA REAL --------------- El concepto de multitarea lo unico que nos incorpora es la posibilidad de repartir el tiempo en unas unidades muy pequeñas, llamadas "quantum", y ceder el control, consecutivamente y por orden de esa cantidad de tiempo asignado a cada tarea de la maquina. Esto nos muestra "aparentemente" que hay varios programas en ejecucion. Realmente, en cada instante del tiempo, (en cada "quantum", dure lo que dure), solo hay UN solo programa en ejecucion. Pero en ese quantum, con las velocidades actuales de las CPUs, se pueden hacer muchas cosas. Evidentemente, aquí intervienen otros dos conceptos: 1) Intercambio de tareas. 2) Proridad de las tareas. El intercambio de tareas, es simplemente el guardar el estado de una tarea cuando ha agotado su tiempo (sus quantums asignados), recuperar el estado de otra tarea y cederle el control. Normalmente esto se puede realizar por el hardware de la CPU (existe una instruccion especifica para ello, en "todas" las CPUs del mercado, incluidos los mainframes). Pero Microsoft en vez de utilizar el mecanismo hardware, lo hace por software, "a mano". Esto es muy costos en ciclos de reloj, pero aparentemente, Microsoft no se fiaba, al menos al principio, de la implementacion de este mecanismo en la CPU por parte de Intel. Prioridad de las tareas, es simplemente un numero asignado a cada tarea, que indica el numero de "quantums" que puede ejecutar antes de que el sistema operativo tome control y le ceda el control a otra tarea. * Hay que hacer notar, que una tarea, puede "perder" el control, antes de agotar su numero de quantums. Sí esa tarea hace una peticion de entrada / salida a disco por ejemplo, debido a que esa peticion es muy costosa en tiempo (estamos hablando de algunos milisegundos), mientras se ejecuta, evidentemente la CPU puede hacer muchisimas mas cosas. Por tanto el sistema operativo toma el control y se lo cede a otra tarea. El sistema operativo, debe ser "listo". Debe jugar con las prioridades de tarea y variarlas ligeramente. Es cedir, a un programa que hace mucha entrad/salida, debido a que está poco tiempo en memoria, el sistema operativo le debería subir la prioridad. En cambio al reves, a un programa que chupa mucha CPU y no realiza apenas entrada / salida, el sistema operativo debe bajarle la prioridad al objeto de que no se apodere todo el tiempo de la CPU. * Evidentemente, el propio núcleo del sistema operativo debe ser el proceso de maxima prioridad. Bien, esta es la teoria de Multitarea REAL. Y esto es lo que realiza win95 / 98 con las tareas de 32 bites. Pero las tareas de 16 bites, se "inventaron" (heredado de Windows 3.1), la MULTITAREA CORPORATIVA ("preemptive"). Realmente este no es un concepto informatico. Es un concepto Microsoft. Me explico: en este caso no existe la "cesion" de una tarea a otra por el tiempo consumido en maquina, sino como por definicion, las tareas Windows,"generalmente" emiten muchos mensajes al sistema, (funcionan por intercambio de mensajes), cada vez que se emiten por parte de un programa ciertos tipos de mensaje, el sistema operativo toma control al recibir ese mensaje y cede en algunos de ellos el control a otra tarea. Este es el funcionamiento de las tareas de 16 bites. Y evidentemente, peligrosisimo, ya que si una tarea no emite esos mensajes, y esa tarea está mal programada y se mete en un bucle infinito, entonces Windows se nos quedará "colgado". No responderá ni el teclado. * Windows 95 / 98, por "herencia", debe permitir ambos tipos de "multitarea". La REAL para tareas de 32 bites, y la "cooperativa" para tareas de 16 bites (y recemos, para que realmente "cooperen" esas tareas). La manera de hacerlo, es crearse una maquina virtual para cada tarea de 32 bites, y otra maquina virtual para "todas" las tareas de 16 bites. Por tanto es importante recalcar que TODAS las de 16, comparten la "misma" maquina virtual. Esto ultimo implica, que la caida de una tarea de 16 bites, dejará, probablemente, inutilizado TODA la maquina virtual de 16 bits. Y esto es importante, porque win 95 / 98 tiene mucho codigo de 16 bites en su núcleo . Por tanto nos inutilizará, probablemente, parte del sistema operativo, obligandonos a reiniciar la maquina. En cambio, la caida de un programa de 32 bites, unicamente, provocará la caida de esa maquina virtual, y no afecta al resto del entorno Windows. Rearrancando la tarea, esta seguirá en funcionamiento. Por ejemplo, la caida de Word (por lo que sea) no pasa nada, se rearranca word y sigue funcionando. La caida de una tarea de 16 bites, en el mejor de los casos, lo unico que sucedería es que esa tarea ya no podremos arrancarla hasta que reiniciemos la maquina. EMPIEZA A FUNCIONAR EL WIN.COM PARA CARGAR WINDOWS -------------------------------------------------- Ahora ya podemos empezar a ver como se realiza la carga. 1) Lo primero que hace Windows,es una "fotocopia" de la memoria real en ese momento. Esta "fotocopia" servirá para crear los espacion de direcciones virtuales por cada ventana MsDOS que queramos utilizar bajo Windows (utilizando el modo virtual 8086 del procesador que hemos visto previamente). 2) Busca a ver si existe un archivo llamado WINSTART.BAT en el direcotrio de Windows. Si existiese, ejecuta los comandos que allí esten, y el resultado de esta ejecucion lo heredará "toda" la maquina virtual Windows. Todo Windows es "otra" maquina virtual (pero en este caso, trabajando en modo protegido). El "entorno" de esta maquina virtual, es el entorno "despues" de ejecutar el WINSTART.BAT si este existiese. Entenderemos por entorno, lo mismo que en MsDOS, es decir las variables de entorno el path y otra cosa mucho mas importante: las interrupciones en modo real. Veamos un ejemplo: imaginemos que necesitamos un programa en modo real que es "residente", que además ocupa mucha memoria, y que realmente, al ser residente, lo que hace es establecer alguna interrupcion en modo real que es necesaria para el funcionamiento de lo que sea. Este programa sabemos que no vamos a necesitarlo en las ventana MsDOS, pero que sí lo necesita Windows. Entonces para tener la maxima memoria en ventana MsDOS, lo que hacemos es *no* ejecutarlo en MsDOS y si en el WINSTART.BAT. Por tanto, para MsDOS tendremos, segun el punto 1), la memoria maxima sin ese programa, y ademas, dispondremos de los servicios que nos incorpore dicho programa desde cualquier programa Windows (nunca desde las ventanas MsDOS). Parece que no es practico, pero yo he tenido que utilizarlo. El caso real, ha sido utilizando NET 1 del gestor de bases de datos Oracle. El Net 1 es un residente MsDOS. Colocado en el WINSTART.BAT, ya que solo se utiliza desde los programas de aplicacion Windows,tenía un ahorro de 64 Kbs en las ventanas MsDOS. Curioso ¿no?. Seguro que alguien con imaginacion, podría buscar alguna utilizadad real a este tipo de funcionamiento en nuestro mundo "casero" del PC. Por si acaso, es bueno saber que existe.... 3) WIN.COM, pone a funcionar el procesador en modo protegido. Para ello, se crea una tabl global de direcciones (con los descriptores de segmento vistos anteriormente) y que tiene posibilidad de acceder a un espacio de dirección res virtual de 2 Gb. Crea la tabla de paginas, carga el programa KRNL386.EXE responsable de las funciones y manejos del núcleo de Windows y le cede control. 4) Realmente en este punto de la carga, tres son los ficheros mas importantes a cargar, y cada uno con sus caracteristicas especiales. Estos son: * KRNL386.EXE el cual es el responsable de controlar y asignar todos los recursos de manejo de memoria, carga de aplicaciones y la planificacion y ejecucion de tareas. * USER.EXE crea y mantiene las ventanas en la pantalla. Trata todas las peticiones de mover, crear, tamaño, o cerrar una ventana. Tambien es el responsable del manejo de los iconos y otro componentes graficos. Además es el responsable de la entrada a las aplicaciones desde teclado, raton o cualquier dispositivo de entrada. * GDI.EXE es el "Graphics Device Interface". Es el responsable de ejecutar operaciones graficas para crear imagenes en la pantalla (y otros dispositivos). Estos tres componentes, son todavia componentes de 16 bites. Procesos "heredados" del Windows 3.1. LOS RECURSOS DE WINDOWS ----------------------- **** Bueno, y este será el siguiente capitulo......
Volver a
Artículos y FAQs
|