1
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.
1.1. ¿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.
1.1.1. 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 entera del DOS.
1.1.2. 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.
1.2. 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.
1.3. 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ó
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.