• Introducción Desde hace años los usuarios de MS−DOS piden muchas más posibilidades de las que este sistema operativo ofrece, ya que a medida que los procesadores van evolucionando el sistema operativo MS−DOS no aprovecha las nuevas prestaciones que ofrecen estos nuevos procesadores, debido a que desea mantener la compatibilidad con los programas realizados para versiones anteriores de este sistema operativo (S.O.). Por tanto los usuarios tienen dos opciones, o bien cambian de S.O., lo cual significaría desechar todos los programas DOS que poseen o por lo contrario siguen utilizando el MS−DOS sin aprovechar los mecanismos de protección y multitarea que seguramente ofrecen sus procesadores. La verdad es que ninguna de las dos opciones anteriores es aconsejable y es por ello por lo que se han creado multitud de especificaciones software como DPMI, VCPI, EMS, XMS y diversos tipos de programas como los Gestores de Memoria, DOS−Extenders, Multitaskers..., y todo para aprovechar las características de los nuevos procesadores bajo MS−DOS, como puede ser la multitarea, la protección entre tareas y la ruptura del límite de los 640K que impone el MS−DOS. Y es gracias a estos programas por los que el sistema operativo MS−DOS sigue aún artificialmente vivo. En este proyecto se describe como realizar uno de los programas mencionados anteriormente, en concreto un Shell Multitarea ó Multitasker. • ¿Qué es un Shell Multitarea o Multitasker? Un Shell Multitarea, más bien conocido como Multitasker, es un programa que permite la ejecución paralela de varios programas (tareas) sin que haya interacción entre ellos. Más concretamente, es un sobre−sistema operativo que se coloca sobre el sistema operativo monotarea, y que podría controlar varios sistemas operativos, proporcionando la posibilidad de ejecutar varios programas de forma aislada y concurrente, vigilando en todo momento los pasos que realizan los programas del S.O. monotarea con el fin de evitar el control total del procesador por una de las tareas ejecutadas o evitar una posible caída del sistema por el mal funcionamiento de una tarea. • La división en máquinas virtuales Para lograr todos los objetivos que desea realizar un Multitasker se ha de dividir el ordenador en distintas máquinas virtuales, con el fin de ejecutar cada tarea en una de estas máquinas controladas por el Multitasker. El concepto de máquinas virtuales no son más que distintos segmentos de memoria que no interaccionan entre ellos y que permiten ejecutar distintos sistemas operativos en cada uno de estos segmentos. Cada segmento de memoria contendrá una copia del sistema operativo monotarea y en él se ejecutará un programa para ese S.O. Al haber distintas máquinas virtuales, se podrá conceder la CPU por un intervalo de tiempo a cada una de estas máquinas dando la ilusión de que todas las tareas, en cada máquina virtual, se están ejecutando de forma concurrente. Además de ofrecer esta posibilidad de multitarea, nos ofrece la capacidad de protección entre las distintas tareas que se están ejecutando de forma concurrente, ya que si una tarea, en una máquina virtual, realiza todo tipo de modificaciones sobre el S.O. que la ejecuta o incluso lleva a ese S.O. a una caída, no afectará en absoluto a las diversas tareas que se están ejecutando, tomando el Multitasker el derecho de eliminar esa tarea maligna de la memoria y continuar controlando las otras tareas como si nada hubiese ocurrido. El Multitasker, del que trata este proyecto, permitirá ejecutar solo programas que han sido realizado para el sistema operativo MS−DOS por lo que cada máquina virtual, como mencionamos antes, contendrá una copia 1 entera del DOS. • Multitaskers comerciales Los Multitaskers reales se pueden encontrar en el ámbito del DOS en forma de DESQView y Windows 3.x. Ambos programas permiten la ejecución paralela de varios programas DOS y su representación en ventanas de pantalla separadas. El Multitasker que se ha realizado en este proyecto no posee tantas prestaciones como los mencionados anteriormente, ya que por ejemplo no permite la división de la pantalla en ventanas y, por tanto, una posible visualización de varias tareas simultáneas por pantalla. Tampoco ofrece un mecanismo de Memoria Virtual para intercambiar páginas de memoria a disco y viceversa para conseguir memoria RAM ilimitada y el poder ejecutar cualquier número de tareas simultáneas en memoria. • Características del Multitasker presentado ( DMT ) El Multitasker que se ha realizado tiene como nombre 32−bit DOS MultiTarea, abreviado DMT, y sus características más importantes se ofrecen a continuación: • Multitarea sobre el sistema operativo MS−DOS: El objetivo principal de DMT es la de convertir al S.O. monotarea MS−DOS en un nuevo S.O. multitarea. • Número de tareas en ejecución simultánea: El número de tareas que puede ejecutar simultáneamente DMT depende del tamaño de memoria RAM que haya instalada en el ordenador. Cada tarea tendrá un tamaño de 1 Mbyte, que contendrá una copia del MS−DOS y el programa que se esté ejecutando, por tanto, tendremos tantas tareas como Mbytes de RAM contenga el ordenador. • Ejecución de tareas en pantalla completa: Como se comentó anteriormente DMT solo puede conceder el control total de la pantalla a una tarea en un momento dado. Por tanto no se podrán visualizar varias tareas a la vez, pero de todas formas seguirán ejecutándose de forma concurrente aunque no tengan el control de la pantalla. • Aislamiento entre las diversas tareas: Aunque se ejecuten varias tareas de forma simultánea no se podrán machacar unas a otras debido a que cada tarea tiene un espacio de direcciones de memoria que ninguna otra puede ver. Con esto se consigue que ninguna tarea maligna interfiera en el resto y produzca una caída del sistema. • Mismo nivel de privilegio para todas las tareas: La CPU va a atender a todas las tareas de forma indiferente, ofreciéndole la misma porción de tiempo a cada una ellas. De este modo las tareas que no tengan el control de la pantalla (segundo plano) tendrán el mismo tiempo de atención de la CPU que la que tiene el control total de pantalla (primer plano). Los Multitaskers comerciales ofrecen mayor atención de la CPU a la tarea que está en primer plano, pero en DMT he preferido que tanto las tareas en segundo plano como la que está en primer plano tengan la misma prioridad respecto a la CPU, ya que seguramente la tarea que tenemos en primer plano suele ser la más interactiva y por ello no se necesita tanta atención de la CPU ya que hay muchos tiempos ociosos mientras se esperan las diversas pulsaciones del teclado por parte del usuario. • Detención y Eliminación de tareas malignas: DMT es capaz de detectar cuando una tarea intenta apropiarse por completo del sistema o intenta llevarlo a una caída a través del uso de instrucciones inválidas o privilegiadas, tomando el control sobre dicha tarea y eliminándola de la memoria. • Limitaciones de DMT DMT posee ciertas limitaciones que por razones de tiempo no se han podido implementar y es por ello por lo que DMT no puede competir con los grandes Multitaskers comerciales como Windows y DESQView. A continuación se muestra todo lo que DMT no ha podido conseguir: ♦ No permite la visualización simultánea de varias tareas en pantalla: Como se comentó 2 anteriormente DMT no dispone de un mecanismo de ventanas en pantalla que permita observar la ejecución simultánea de varias tareas en pantalla. En el capítulo 2 se ofrecerá qué es lo que habría que hacer para lograr tal división de la pantalla en ventanas y ejecutar cada tarea en una de estas ventanas. ♦ Número limitado de tareas en memoria: En DMT no se ha implementado un sistema de memoria virtual que permita intercambiar páginas de memoria principal a disco, con lo que podríamos disponer de mucha más memoria de la que realmente posee el ordenador y ejecutar así un número mayor de tareas en memoria. ♦ No es compatible con ningún Gestor de Memoria: Para ejecutar DMT se necesita que no se cargue anteriormente ningún gestor de memoria, como por ejemplo EMM386, HIMEM, QEMM, 386ToTheMax, etc. En el capítulo 7 se explicará por qué no se puede cargar DMT con un gestor de memoria y qué habría qué hacer para que la anterior condición no se diera. ♦ No ofrece servicios de memoria Extendida/Expandida: Las tareas que utilicen servicios para acceder a la memoria extendida o expandida no podrán ser ejecutadas por DMT, ya que no se ha implementado ningún gestor de memoria en DMT. Por tanto sólo las tareas que utilicen memoria convencional podrán ser ejecutadas bajo DMT. ♦ No permite la ejecución de tareas gráficas: Debido a que hay muchos tipos de modos gráficos y cada uno de ello se programa de una forma diferente, sería un arduo trabajo para DMT el controlar todas las tareas que están en segundo plano y que están utilizando distintos modos gráficos, ya que dependiendo del modo habría que reprogramar los registros de la tarjeta de vídeo de manera diferente. Con lo que DMT sólo ejecutará tareas que utilicen el modo texto, pero eso sí, cualquier modo texto, con distintas resoluciones y colores. MS−DOS es una marca registrada de Microsoft Corporation DOS Protected Mode Interface, Virtual Control Program Interface, Expanded Memory Specification, eXtended Memory Specification DESQView es una marca registrada de Quaterdeck Office Systems ♦ 3