
Leí que DOS es un sistema operativo de tarea única.
Pero si las versiones antiguas de Windows (¿incluyendo también Windows 95?) fueran sólo envoltorios de DOS, ¿cómo podría Windows funcionar como un sistema operativo multitarea?
Respuesta1
Windows 95
Windows 95era mucho más que "sólo un contenedor" para MS-DOS. Citando a Raymond Chen:
MS-DOS cumplió dos propósitos en Windows 95.
- Sirvió como cargador de arranque.
- Actuó como la capa de controlador de dispositivo heredado de 16 bits.
Windows 95 en realidad enganchó/anuló casi todo MS-DOS, manteniéndolo como una capa de compatibilidad mientras hacía todo el trabajo pesado. También implementó multitarea preventiva para programas de 32 bits.
Antes de Windows 95
Windows 3.x y anteriores eran en su mayoría de 16 bits (con la excepción de Win32s, una especie de capa de compatibilidad que une 16 y 32, pero lo ignoraremos aquí), dependían más de DOS y solo usaban multitarea cooperativa; aquel en el que no obligan a un programa en ejecución a desconectarse; esperan a que el programa en ejecución ceda el control (básicamente, dicen "ya terminé" diciéndole al sistema operativo que ejecute el siguiente programa que está en espera).
La multitarea era cooperativa, al igual que en las versiones antiguas de MacOS (aunque a diferencia de Multitasking DOS 4.x, que presentaba multitarea preventiva). Una tarea tenía que ceder ante el sistema operativo para poder programar una tarea diferente. Los rendimientos se incorporaron a determinadas llamadas API, en particular el procesamiento de mensajes. Siempre que una tarea procesara los mensajes de manera oportuna, todo iba genial. Si una tarea dejaba de procesar mensajes y estaba ocupada ejecutando algún bucle de procesamiento, la multitarea ya no existía.
En cuanto a qué tan tempranos los programas de Windows darían control:
Windows 3.1 utiliza multitarea cooperativa, lo que significa que cada aplicación que está en proceso de ejecución recibe instrucciones de verificar periódicamente una cola de mensajes para averiguar si alguna otra aplicación solicita el uso de la CPU y, de ser así, ceder el control a esa aplicación. . Sin embargo, muchas aplicaciones de Windows 3.1 comprobarían la cola de mensajes sólo con poca frecuencia, o ninguna, y monopolizarían el control de la CPU durante todo el tiempo que necesitaran. Un sistema multitarea preventivo como Windows 95 quitará el control de la CPU a una aplicación en ejecución y lo distribuirá a aquellas que tengan una mayor prioridad según las necesidades del sistema.
Todo lo que DOS vería es esta única aplicación (Windows u otra) ejecutándose, que pasaría el control sin salir. En teoría, la multitarea preventiva posiblemente se pueda implementar sobre DOS de todos modos con el uso de un reloj en tiempo real e interrupciones de hardware para ceder el control al programador por la fuerza. Comocomentarios de tonny, esto en realidad lo hicieron algunos sistemas operativos que se ejecutan sobre DOS.
386 modo mejorado?
Nota: ha habido algunos comentarios sobre386 modo mejoradode Windows 3.x es de 32 bits y admite multitarea preventiva.
Este es un caso interesante. Para resumir el enlaceentrada en el blog, el modo mejorado 386 era básicamente un hipervisor de 32 bits que ejecutaba máquinas virtuales. Dentro de una de esas máquinas virtuales se ejecutaba el modo estándar de Windows 3.x, que hace todo lo mencionado anteriormente.
MS-DOS también se ejecutaría dentro de esas máquinas virtuales, y aparentemente se realizaban múltiples tareas de manera preventiva, por lo que parece que el hipervisor en modo mejorado 386 compartirá intervalos de tiempo de CPU entre las máquinas virtuales (una de las cuales ejecutaba 3.x normal y otras ejecutaban MS -DOS), y cada VM hará lo suyo: 3.x realizará múltiples tareas de manera cooperativa, mientras que MS-DOS tendrá una sola tarea.
MS-DOS
El propio DOS tenía una sola tarea sobre el papel, pero tenía soporte paraTSRprogramas, que permanecerían en segundo plano hasta que se active una interrupción del hardware. Lejos de ser una verdadera multitarea, pero tampoco una tarea completamente única.
¿Toda esta charla sobre bits? ¡Pregunté sobre la multitarea!
Bueno, estrictamente hablando, el bit-ness y la multitarea no dependen uno del otro. Debería ser posible implementar cualquier modo multitarea en cualquier bit. Sin embargo, el paso de procesadores de 16 bits a procesadores de 32 bits también introdujo otras funciones de hardware que podrían haber facilitado la implementación de la multitarea preventiva.
Además, dado que los programas de 32 bits eran nuevos, era más fácil hacerlos funcionar cuando se los cambiaba a la fuerza, lo que podría haber roto algunos programas heredados de 16 bits.
Por supuesto, todo esto es especulación. Si realmente quiere saber por qué MS no implementó la multitarea preventiva en Windows 3.x (a pesar del modo mejorado 386), tendrá que preguntarle a alguien que trabajó allí.
Además, quería corregir su suposición de que Windows 95 era simplemente un contenedor para DOS;)
Respuesta2
Ejecutaba continuamente un único programa, el llamado Windows. Éste distribuye el tiempo de CPU (y otros recursos) entre diferentes programas.
Considere esta analogía:
Tiene una oficina en la que solo puede haber una persona a la vez (esa persona se llama señor o señora DOS). Esa persona trabaja en una cosa a la vez. Por ejemplo, llama a una sola persona y comienza a chatear con ella las 24 horas del día, los 7 días de la semana.
Ahora reemplaza a esa persona con el Sr. Secretario. (ventanas). Llamará a alguien y hablará todo el tiempo con él (todavía es una única tarea). Luego, después de un tiempo, la otra persona dirá: "Ya he hablado suficiente por ahora. Ve a hablar con otra persona y llámame dentro de un momento".
El señor secretario llamará a la otra persona. Charle con esa persona hasta que esa persona diga lo mismo. Luego llamará a la siguiente persona hasta llegar al final de la lista de personas con las que hablar. En ese momento comenzará de nuevo desde arriba.
- En términos técnicos, esto se llama multitarea cooperativa. Requiere que la otra persona diga que tuvo suficiente tiempo de CPU. Si no se hace eso, todo se desmorona.
- Los sistemas modernos son mucho más inteligentes. Incluyendo multitarea preventiva. Piense en la secretaria poniendo un despertador e interrumpiendo a la otra persona después de 5 minutos. "Qué lindo, Jane. Pero tengo que hablar con Joe ahora. Te llamaré en un momento. - Haz clic".
Si agrega varios procesadores, se vuelve aún más complicado. :)
Respuesta3
En un sistema operativo moderno, el sistema operativo controla todos los recursos de hardware y las aplicaciones en ejecución se mantienen en entornos sandbox. Una aplicación no puede acceder a la memoria que el sistema operativo no haya asignado a esa aplicación y no puede acceder directamente a los dispositivos de hardware de la computadora. Si se requiere acceso al hardware, la aplicación debe comunicarse a través de controladores de dispositivo.
El sistema operativo puede imponer este control, porque obliga a la CPU a ingresarmodo protegido.
DOS, por otro lado, nunca entra en modo protegido, sino que permanece enmodo real*. En modo real, las aplicaciones en ejecución pueden realizar cualquier cosa que quieran, por ejemplo, acceder al hardware directamente. Pero una aplicación que se ejecuta en modo real también puede indicarle a la CPU que entre en modo protegido.
Y esta última parte permite que aplicaciones como Windows 95 inicien un entorno multiproceso aunque básicamente se hayan iniciado desde DOS.
DOS (Sistema Operativo de Disco) no era, afaik, mucho más que un sistema de gestión de archivos. Proporcionó un sistema de archivos, mecanismos para navegar por el sistema de archivos, algunas herramientas y la posibilidad de iniciar aplicaciones. También permitió que algunas aplicaciones permanecieran residentes, por ejemplo, controladores de mouse y emuladores de EMM. Pero no intentó controlar el hardware de la computadora como lo hace un sistema operativo moderno.
* Cuando se creó DOS por primera vez en los años 70, el modo protegido no existía en la CPU. No fue hasta el procesador 80286 a mediados de los 80 que el modo protegido pasó a formar parte de la CPU.
Respuesta4
La multitarea no es más que una ilusión de ejecutar aplicaciones simultáneamente. Se percibe como una ejecución simultánea por su parte, pero en realidad los procesos A, B y C comparten tiempo de CPU en este orden: A, B, C, A, B, C, A, B... simplemente se encienden y apagado muy rápidamente. En realidad, no se ejecutan dos procesos al mismo tiempo.
Por lo tanto, es perfectamente posible hacer que MS-DOS realice múltiples tareas al pausar un proceso, ejecutar el siguiente durante un corto período de tiempo, pausarlo, volver al primero, y así sucesivamente.
La multitarea es simplemente una característica inteligente desarrollada cuando las CPU comenzaron a ser lo suficientemente rápidas como para seguir rotando estos procesos y hacer que parecieran simultáneos para el usuario final.
Para aquellos que recuerdan, los juegos todavía se ejecutaban en DOS4GW porque Windows era demasiado lento.