Volvamos a los años 70 y 80. Con un modelo de memoria plana en modo real, un programa tiene control total de 64 KB de memoria. Esto significa que, después de que DOS lo inicie, el programa puede sobrescribir la memoria en la que se encontraba DOS, así como cualquier otro programa.
Dado eso, ¿cómo pudo DOS "regresar" después de que se cerró el programa?
Respuesta1
Primero, el IBM DOS original fue lanzado en 1981 con la PC IBM 5150 original, aunque el sistema operativo CP/M en el que se basaba existía en los años 70.
Creo que la mejor manera de describirlo es que DOS trata su memoria principal (el "Área de Programa Transitorio" o TPA) como una pila.
Normalmente el primer programa cargado es COMMAND.COM y está en la parte inferior. COMMAND.COM puede pedirle a DOS que cargue y le dé control a otro programa; el binario se coloca en la memoria donde termina COMMAND.COM. Supongo que DOS mantiene un puntero de "inicio de memoria libre" para este propósito. Cuando el binario ejecuta la llamada de DOS para terminar, DOS reduce el puntero de memoria libre y la memoria se "recupera".
Como sólo había un programa ejecutándose a la vez, no había que preocuparse por agujeros o fragmentos en este esquema.
DOS admitía TSR, o programas que terminarían y permanecerían residentes. Entonces, en este caso, DOS no disminuiría ese puntero antes de regresar y el programa permanecería en la memoria. No hay ninguna disposición para eliminarlo sin utilidades especiales de terceros. Los TSR podrían conectarse a funciones de DOS o interrupciones del sistema y, como tales, lograr una multitarea limitada. ElArtículo de Wikipedia sobre TSRproporciona información más detallada.
Pero sí, no hay protección de la memoria, por lo que cualquier programa puede destruir toda la RAM, incluido el lugar donde reside DOS, en cualquier momento. En ese caso, ejecutar la llamada de retorno de DOS fallaría o se comportaría de manera impredecible. Este esquema depende de la cooperación de los programas y no se aplica. Incluso podrías sobrescribir DOS por completo, eso es lo que LOADLIN
hace el programa: es un cargador de Linux para DOS. Creo que Netware era de la misma manera, usaba DOS para arrancar pero básicamente el sistema operativo Netware reemplazó a DOS en la RAM al cargar.