Dificultades para realizar un Multitasker, Imposibilidad de utilizar Depuradores, DOS y BIOS no ofrecen servicios desde el Modo Protegido (capitulo 3).
|
Realizar
un Multitasker con un 80386+
|
Para poder
realizar un Multitasker se ha de disponer de un procesador que disponga de
mecanismos para la multitarea y protección entre las tareas como, por ejemplo,
el 80386 y sucesores (80386+) . En esta sección se hará un breve resumen sobre
las características que nos ofrece el 80386+, explicando en capítulos
posteriores una descripción más detallada y cómo se han utilizado estas
características para la elaboración de DMT.
Por razones de
compatibilidad con sus antecesores, el 80386+ se ejecuta en el llamado Modo Real donde
no existe la multitarea ni mecanismos de protección, con lo que el 80386+ se
ejecuta como un 8086 mejorado. Los programas que se ejecutan bajo el Modo Real
tienen acceso libre a cualquier dirección de memoria y a cualquier puerto de
E/S, pudiendo tomar el control de la máquina cualquier programa que lo
desee. Hay que advertir que este es el
modo de trabajo que utiliza el MS-DOS, por lo que todos los programas que se
ejecutan bajo él están también bajo el Modo Real.
Si queremos que el 80386+ demuestre toda su
potencia multitarea, deberemos de dejar a un lado el Modo Real y pasar al Modo Protegido del 80386+. En
este modo se activan todas las características multitarea y de protección que
ofrece el 80386+ y pasa a ser un procesador de 32 bits capaz de direccionar
hasta 4
gigabytes de memoria física.
Utilizando ciertas estructuras bajo el Modo
Protegido podemos lograr ejecutar varias tareas de forma concurrente y aislada,
pero existe un pequeño problema para lograr la multitarea bajo MS-DOS. El único
problema en este modo es que no permite ejecutar programas que fueron diseñados
para el Modo Real, con lo que es imposible ejecutar programas para MS-DOS en el
Modo Protegido entonces... ¿cómo es posible ejecutar el MS-DOS en un entorno
multitarea?. La respuesta nos la da un tercer, y último, modo de trabajo del
80386+, en concreto es el Modo Virtual 8086 (abreviado Modo V86) el
cual nos permite ejecutar programas que fueron realizados para el Modo Real con
todas las características que nos ofrece el Modo Protegido.
Tras lo expuesto anteriormente hay que
señalar que para la realización de un Multitasker habrá que recurrir al Modo
Protegido y al Modo V86 para lograr ejecutar al MS-DOS y todos sus programas
bajo un entorno “protegido” y multitarea.
En los capítulos 4, 5 y 6 se explica más
detalladamente las características de estos tres modos de trabajo del 80386+.
3.2. Dificultades para realizar un Multitasker
En esta sección
comentamos algunas de las dificultades con las que se encuentra un programador
para implementar un Multitasker.
3.2.1. Implementación en lenguaje Ensamblador
Para realizar
un Multitasker debemos de recurrir inevitablemente al lenguaje ensamblador para
utilizar las nuevas instrucciones que nos ofrece el 80386+, para lograr la
multitarea y la protección entre tareas. Al menos debemos de tener una parte en
ensamblador que es la que se dedica a entrar en el Modo Protegido, crear las
diversas tareas, “despachar” la CPU a cada tarea, emular servicios del Modo
Real, etc., es decir, casi todo el Multitasker. Podremos utilizar un lenguaje
de alto nivel para implementar un mecanismo de intercambio de páginas de
memoria a disco una vez realizado el núcleo del Multitasker, pero utilizando
siempre los servicios que este último ofrece. Ya que el 90 por ciento del
Multitasker es .ensamblador, en DMT se ha optado por realizarlo plenamente en
este lenguaje
Existen diversos compiladores que permiten
ejecutar programas bajo el Modo Protegido, ofreciendo funciones para utilizar
las nuevas características que ofrece el 80386+. Tras haber intentado
implementar DMT bajo estos compiladores he llegado a la conclusión de que es
imposible realizar un Multitasker (al
menos el núcleo) bajo uno de estos compiladores. La razón de ello es debido a
que el Multitasker necesita gestionar ciertas estructuras de memoria (GDT, por ejemplo) para controlar todas las tareas bajo el Modo
Protegido y el compilador necesita las mismas estructuras, pero definidas por
él, para controlar el programa que se ejecuta bajo el Modo Protegido. Al haber
este choque de estructuras entre el compilador y el Multitasker, se producirá
una caída inevitable del sistema.
3.2.2. Imposibilidad de utilizar
Depuradores (Debuggers)
Debido a que
en la programación en ensamblador se comenten numerosos errores a la hora de
codificar, es necesario la utilización de un depurador que nos muestre paso a
paso la ejecución de nuestro programa y podamos ver el contenido de todos los
registros del procesador y observar que todo marcha correctamente.
Como se comentó anteriormente, para realizar
un Multitasker necesitamos entrar al Modo Protegido para acceder a las nuevas
características del 80386+. Si intentamos depurar a DMT con un depurador todo
irá bien, excepto cuando se entra en el Modo Protegido donde el depurador,
ejecutado en el Modo Real, perderá el control de DMT y se producirá una caída
del sistema. Por esta razón no podemos utilizar ningún depurador existente, al
menos que nosotros mismos programemos uno especialmente para realizar nuestro Multitasker.
Los compiladores que permiten ejecutar
programas en Modo Protegido vienen acompañado de un depurador, pero sólo se
puede utilizar por programas que fueron realizados con dicho compilador.
Para depurar DMT no se ha realizado ningún
depurador, lo único que se ha implementado es una función que permite sacar el
contenido de los registros y de la pila por pantalla y acto seguido finaliza el
programa. Esta pequeña función ha ayudado a encontrar multitud de errores a la
hora de programar, pero no tiene ni punto de comparación con las funciones que
realiza un depurador.
3.2.3. DOS y BIOS no ofrecen servicios desde el Modo Protegido
Una vez
entrado en el Modo Protegido los servicios que ofrece el DOS y la BIOS no están
accesibles por DMT, ya que estos fueron codificados para el Modo Real. Si desde
el Modo Protegido solicitamos un servicio del DOS se producirán multitud de
excepciones que no permitirán la finalización del servicio. Esto se debe a que
el modo de direccionamiento de la memoria cambia del Modo Real al Modo
Protegido.
Para poder solicitar un servicio del DOS o de
la BIOS desde el Modo Protegido tenemos que preparar antes la memoria y el
procesador para que el servicio sea concedido con éxito. Debemos de conmutar al
procesador al Modo V86, que es compatible con el Modo Real, y debemos de
preparar cierta información en la pila para que una vez finalizado el servicio
se conmute nuevamente el procesador al Modo Protegido y el Multitasker pueda
continuar su trabajo.
En el Capítulo 8 se explica detalladamente
este mecanismo y su implementación.