Si DOS es una tarea única, ¿cómo fue posible la multitarea en la versión anterior de Windows?

113

Leí que DOS es un sistema operativo de una sola tarea.

Pero si las versiones antiguas de Windows (¿también incluye Windows 95?) Eran solo envoltorios de DOS, ¿cómo podría Windows ejecutarse como un sistema operativo multitarea?

Arkonix
fuente
8
Se llama multitarea preventiva - support.microsoft.com/kb/117567
joeqwerty
20
Tendrás que definir "viejo" mucho mejor que eso. DOS + Windows 9x y DOS + Windows 3.x en el "Modo mejorado 386" fueron bastante diferentes en este aspecto a DOS + Windows 3.x / 2.x en "Modo estándar" y "Modo real". Y como alude joeqwerty, hubo multitarea cooperativa además de preventiva. Se han escrito libros completos sobre esto, por lo que una pregunta específica es mejor.
JdeBP
55
@joeqwerty La IMO más asombrosa es que Microsoft mantiene documentación en línea sobre un software tan antiguo. Incluso hay artículos sobre temas avanzados en versiones anteriores de MS-DOS ... Muy amable de su parte para mantenerlo vivo.
Nada imposible
66
DOS no te da multitarea. Todavía puede escribir programas completamente multitarea encima sin la ayuda de DOS, que es lo que hace Windows temprano. Windows 95 ciertamente no es solo un "contenedor" para DOS.
Boann
3
@NigelNquande En realidad, he encontrado que MS es bastante buena para mantener la documentación antigua. La mayoría de sus artículos de KB retirados están en línea (por ejemplo; un aleatorio de Windows 3.1 KB , o documentos en la printutilidad para Windows 2.1-3.0, o ansi.sys de MS-DOS 5.0), incluso después de su final de 12 meses. -período de gracia de la vida. Simplemente no es tan fácil de navegar como la documentación activa del producto, tienes que ser específico en tus búsquedas.
Jason C

Respuestas:

160

Windows 95

Windows 95 fue mucho más que "solo un contenedor" para MS-DOS . Citando a Raymond Chen:

MS-DOS sirvió para dos propósitos en Windows 95.

  • Sirvió como el gestor 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 realizaba todo el trabajo pesado. También implementó la multitarea preventiva para programas de 32 bits.


Previo a Windows 95

Windows 3.xy anteriores eran en su mayoría de 16 bits (con la excepción de Win32s, una capa de compatibilidad que une 16 y 32, pero ignoraremos eso aquí), eran más dependientes de DOS y usaban solo multitarea cooperativa, eso es 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 próximo programa que está esperando).

La multitarea fue cooperativa, al igual que en las versiones anteriores de MacOS (aunque a diferencia de Multitarea DOS 4.x, que lucía multitarea preventiva). Una tarea tenía que ceder al sistema operativo para programar una tarea diferente. Los rendimientos se incorporaron a ciertas llamadas API, en particular el procesamiento de mensajes. Mientras una tarea procesara los mensajes de manera oportuna, todo fue genial. Si una tarea dejaba de procesar mensajes y estaba ocupado ejecutando algún ciclo de procesamiento, la multitarea ya no existía.

Arquitectura de Windows 3.x

En cuanto a cómo los primeros programas de Windows cederían el control:

Windows 3.1 utiliza la 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 verificarían la cola de mensajes con poca frecuencia, o ninguna, y monopolizarían el control de la CPU durante el tiempo que requirieran. Un sistema multitarea preventivo como Windows 95 quitará el control de la CPU de una aplicación en ejecución y la distribuirá a aquellos que tengan una mayor prioridad en función de las necesidades del sistema.

fuente

Todo lo que vería DOS es esta aplicación única (Windows u otra) ejecutándose, que pasaría el control sin salir. En teoría, la multitarea preventiva posiblemente se puede implementar sobre DOS de todos modos con el uso de un reloj en tiempo real y las interrupciones de hardware para dar el control al planificador por la fuerza. Como comenta Tonny , esto fue hecho por algunos sistemas operativos que se ejecutan sobre DOS.

386 modo mejorado?

Nota: ha habido algunos comentarios sobre el modo mejorado 386 de Windows 3.x que es de 32 bits y que admite la multitarea preventiva.

Este es un caso interesante. Para resumir la publicación de blog vinculada , 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 eran multitarea preventivas, por lo que parece que el hipervisor de modo mejorado 386 compartirá segmentos de tiempo de CPU entre las máquinas virtuales (una de las cuales ejecutó 3.xy normal y otras que ejecutaron MS -DOS), y cada VM hará lo suyo: 3.x cooperaría multitarea, mientras que MS-DOS tendría una única tarea.


MS-DOS

DOS en sí era una tarea única en papel, pero tenía soporte para programas TSR , que permanecería en segundo plano hasta que se activara por una interrupción de hardware. Lejos de ser una verdadera multitarea, pero tampoco de una sola tarea.


¿Toda esta charla de lo mordido? ¡Pregunté sobre la multitarea!

Bueno, estrictamente hablando, el bit-ness y la multitarea no dependen el uno del otro. Debería ser posible implementar cualquier modo multitarea en cualquier bit-ness. Sin embargo, el cambio de procesadores de 16 bits a procesadores de 32 bits también introdujo otra funcionalidad de hardware que podría haber hecho que la multitarea preventiva fuera más fácil de implementar.

Además, dado que los programas de 32 bits eran nuevos, era más fácil hacerlos funcionar cuando se los cambiaba por la fuerza, lo que podría haber roto algunos programas heredados de 16 bits.

Por supuesto, todo esto es especulación. Si realmente desea 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 solo un contenedor para DOS;)

Mover
fuente
44
Muy buen relato. Si no recuerdo mal (la clase de diseño del sistema operativo fue hace muchos años para mí) Windows 9x conectó las interrupciones del temporizador para aplicar su propio programador, tal como lo sugirió en su segundo párrafo. Hubo otros sistemas operativos además de DOS que hicieron lo mismo. Recuerdo claramente esto de AMX (sistema operativo en tiempo real para aplicaciones industriales) y XINU (sistema operativo pequeño Unix / Posix como sistema operativo) que ambos se ejecutaron sobre DOS. (AMX también podía ejecutar metal desnudo directamente desde EPROM. Era mucho más fácil probar / depurar cuando se ejecutaba en DOS. Le salvó de volver a grabar EPROMS para cada prueba.)
Tonny
@Tonny Gracias por confirmar que ese esquema es posible (y se usa en la práctica). Supongo que la razón por la que Windows 1-3 no usó la multitarea preventiva no es tanto que no pudieron hacerlo (MS-DOS 4 lo tenía, aunque no se lanzó), sino que habría roto la compatibilidad con DOS programas
Bob
3
Mmmmhhh Considerando Windows 1-3: El hecho de que fuera una base de código común para las CPU 8086 y superiores podría haber tenido más que ver con eso. El manejo adecuado de ring0-3 solo fue posible con 80286 y superiores y eso fue lo que Win9x usó para implementar la multitarea. 4DOS y otros ya proporcionaron una multitarea limitada en DOS (se necesitaba 80286 si recuerdo correctamente). Incluso podría ejecutar Win3 como un proceso separado en 4DOS.
Tonny
1
Xinu realmente no se ejecutó sobre DOS. Comenzó como un sistema operativo LSI-11, después de todo. La afirmación de que no hubo multitarea preventiva en DOS + Windows 3.x es falsa. En el modo mejorado 386 hubo, cortesía de VMM. Y la tontería sobre 4DOS le da una respuesta frecuente: 4DOS no es un sistema operativo . Las declaraciones de que proporcionó la multitarea son completamente incorrectas.
JdeBP
2
El PDP-8 era compatible con la multitarea preventiva, y eso era solo una computadora de 12 bits.
david25272
26

Continuamente ejecutó un solo programa, el llamado windows. Ese reparte el tiempo de CPU (y otros recursos) entre diferentes programas.

Considere esta analogía:

Tiene una oficina que solo puede tener 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 las 24 horas del día, los 7 días de la semana con él.

Ahora reemplazas a esa persona con el Sr. secretario. (ventanas) Llamará a alguien y hablará todo el tiempo con él (sigue siendo una sola tarea). Luego, después de algún tiempo, la otra persona dirá "Ya he hablado lo suficiente por ahora. Ve a hablar con alguien más y llámame en un momento".

El señor secretario llamará a la otra persona. Chatea con ese hasta que esa persona diga lo mismo. Luego llamará a la siguiente persona hasta que esté al final de la lista de personas para hablar. En ese momento comenzará nuevamente en la parte superior.

  • En términos técnicos, esto se llama multitarea cooperativa. Requiere que la otra persona diga que tuvo suficiente tiempo de CPU. Si uno no hace eso, todo se desmorona.
  • Los sistemas modernos son mucho más inteligentes. Incluyendo la multitarea preventiva. Piense en la secretaria que pone una alarma y corta a la otra persona después de 5 minutos. "Eso es agradable Jane. Pero tengo que hablar con Joe ahora. Te llamaré en un momento. - Haz clic".

Si agrega múltiples procesadores se vuelve aún más complicado. :)

Hennes
fuente
1
¿No te refieres a la multitarea cooperativa / no preventiva en tu primer punto? Además, curiosamente, Windows 95 introdujo la multitarea preventiva para programas de 32 bits. No era tanto una envoltura para DOS, ya que era un sistema operativo que usaba DOS como gestor de arranque pero reemplazaba las partes principales (lo suficiente para el soporte de programas de 16 bits / DOS).
Bob
señor o echa de menos, ¿por qué no 'Dr.' DOS?
gtrak
1
"Continuamente ejecutó un solo programa ... Ese distribuyó el tiempo de CPU (y otros recursos) entre diferentes programas". ¿No se puede decir eso de ningún sistema operativo? Aunque la pregunta implica que MS-DOS no pudo. Me opongo firmemente a las analogías / metáforas cuando uso los detalles técnicos de la tecnología. Ok, ahora sabemos cómo funciona una oficina hipotética. Eso realmente no explica la respuesta a la pregunta.
Celeritas
13

En un sistema operativo moderno, el sistema operativo controla todos los recursos de hardware y las aplicaciones en ejecución se guardan en cajas de arena. No se permite que una aplicación acceda a la memoria que el sistema operativo no ha asignado a esa aplicación, y no puede acceder directamente a los dispositivos de hardware en la computadora. Si se requiere acceso al hardware, la aplicación debe comunicarse a través de los controladores del dispositivo.

El sistema operativo puede aplicar este control, ya que obliga a la CPU a entrar en modo protegido .

DOS, por otro lado, nunca ingresa al modo protegido, sino que permanece en modo real *. En modo real, las aplicaciones en ejecución pueden realizar cualquier cosa que quieran, por ejemplo, acceder directamente al hardware. 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 de subprocesos múltiples aunque básicamente se iniciaron desde DOS.

DOS (Sistema operativo de disco) era, afaik, no 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 EMM. Pero no intentó controlar el hardware de la computadora como lo hace un SO 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 se convirtió en parte de la CPU.

Pete
fuente
2
Tenga en cuenta que en ese momento las CPU no tenían el modo protegido.
Jwent
1
@jwenting - buen punto, agregué una nota al respecto
Pete
6

Antes de Windows 3.x, que era la primera versión para aplicaciones DOS multitareas, había programas como DesqView que podían hacer lo mismo. Si uno, por ejemplo, ejecuta tres sesiones de DOS a la vez, DesqView crearía cuatro máquinas virtuales. Las tres sesiones de DOS pensarían que "poseían" la máquina completa, excepto que ninguna de ellas realmente realizaría E / S de archivo. En cambio, la versión de DOS que se ejecuta en cada sesión se corregirá para que reenvíe cualquier solicitud de E / S de archivo a una sesión especial, que se dedicó a ese propósito. Dado que el hardware de modo de texto de la PC mostraría continuamente los contenidos de un área de memoria como caracteres; DesqView podría permitir que cada sesión tenga su propia pantalla virtual al asignar el rango 0xB8000-0xB9FFF de cada sesión a su propia área de RAM, y copiando periódicamente el área de la aplicación actual al búfer de pantalla física. El soporte gráfico fue mucho más difícil, porque 256 K de RAM en la placa de visualización se controlaron usando 64 K de espacio de direcciones, algunos registros de E / S y algún hardware "interesante" que requería que las cosas se leyeran y escribieran en ciertas secuencias específicas. En el modo de texto, cuando una aplicación escribió algo en el búfer de texto que se escribió, DesqView podría establecer un indicador que indique que debe copiarse en la pantalla en el siguiente tic del temporizador; solo la primera escritura en el búfer de texto en un momento determinado requeriría la intervención de DesqView; todos los demás se consolidarían al siguiente tic del temporizador. porque 256 K de RAM en el panel de visualización se controlaron usando 64 K de espacio de direcciones, algunos registros de E / S y un hardware "interesante" que requería que las cosas se leyeran y escribieran en ciertas secuencias específicas. En el modo de texto, cuando una aplicación escribió algo en el búfer de texto que se escribió, DesqView podría establecer un indicador que indicara que debe copiarse en la pantalla en el siguiente tic del temporizador; solo la primera escritura en el búfer de texto en un momento determinado requeriría la intervención de DesqView; todos los demás se consolidarían al siguiente tic del temporizador. porque 256 K de RAM en el panel de visualización se controlaron usando 64 K de espacio de direcciones, algunos registros de E / S y un hardware "interesante" que requería que las cosas se leyeran y escribieran en ciertas secuencias específicas. En el modo de texto, cuando una aplicación escribió algo en el búfer de texto que se escribió, DesqView podría establecer un indicador que indique que debe copiarse en la pantalla en el siguiente tic del temporizador; solo la primera escritura en el búfer de texto en un momento determinado requeriría la intervención de DesqView; todos los demás se consolidarían al siguiente tic del temporizador. DesqView podría establecer un indicador que indique que debe copiarse en la pantalla en el siguiente tic del temporizador; solo la primera escritura en el búfer de texto en un momento determinado requeriría la intervención de DesqView; todos los demás se consolidarían al siguiente tic del temporizador. DesqView podría establecer un indicador que indique que debe copiarse en la pantalla en el siguiente tic del temporizador; solo la primera escritura en el búfer de texto en un momento determinado requeriría la intervención de DesqView; todos los demás se consolidarían al siguiente tic del temporizador.

Por el contrario, el modo de virtualización de gráficos requeriría DeskView para atrapar cada escritura individual para mostrar la memoria o los registros de E / S. Dado que esto ralentizaría las escrituras de memoria en un factor de aproximadamente 100, y los programas gráficos tenían que escribir muchos más datos que los programas de texto, la virtualización en tiempo real de la mayoría del software gráfico no era práctica. En cambio, los gráficos se manejaron al tener cualquier aplicación que no fuera de primer plano que intentara hacer una pausa de gráficos hasta que se convirtiera en la aplicación de primer plano, y luego darle un control total sobre la pantalla. Cuando el control cambia a una aplicación diferente, DesqView intenta hacer una copia del estado de todos los registros gráficos y luego cambia. Al volver a la aplicación gráfica, DesqView restauraría el estado guardado.

En cierto modo, las aplicaciones de DOS no gráficas multitarea eran más fáciles que las aplicaciones de Windows multitarea porque había muy pocos recursos compartidos y las aplicaciones no tenían que interactuar entre sí. En Windows, por el contrario, es necesario lidiar con cosas como el portapapeles o la posibilidad de que las ventanas de un programa se muevan de tal manera que oscurezcan las de otro. Windows 95 fue la primera versión de Windows que pudo superar tales limitaciones al incluir cosas como un sistema de ventanas que podía acomodar que un área de la pantalla no estuviera disponible mientras el código intentaba atraerlo (con el efecto de que el dibujo quedaría oculto )

Super gato
fuente
Gracias por recordarme sobre DesqView. Solía ​​usarlo todo el tiempo, pero me había olvidado por completo.
Emmet
3

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 de hecho los procesos A, B y C comparten el tiempo de CPU en este orden: A, B, C, A, B, C, A, B ... simplemente se encienden y fuera muy rápido. No hay dos procesos en ejecución al mismo tiempo.

Por lo tanto, es perfectamente posible realizar tareas múltiples de MS-DOS haciendo que pause un proceso, ejecute el siguiente por un período corto de tiempo, pause ese, salte al primero, y así sucesivamente.

La multitarea es solo una característica inteligente desarrollada cuando las CPU comenzaron a ser lo suficientemente rápidas para seguir girando a través de estos procesos y hacer que parezca simultáneo para el usuario final.

Para aquellos que recuerdan, los juegos todavía se ejecutaban en DOS4GW porque Windows era demasiado lento.

Dan Horvat
fuente
1
y en su mayor parte, así es como funcionan las cosas en los sistemas operativos hasta el día de hoy. Es por eso que puede ejecutar 10 cosas "al mismo tiempo" en una CPU de 4 núcleos, por ejemplo.
Jwent
2
No es realmente que "las CPU comenzaron a ser lo suficientemente rápidas". Era posible ejecutar sistemas operativos multitarea multiusuario en un '286 (como The Mark Williams Company's Coherent , un excelente sistema operativo introducido en PC en 1983). Las versiones de MS-DOS y Windows (no NT) hasta (e incluyendo) "Millenium" realmente eran atroces por cualquier estándar objetivo, incluso los estándares técnicos de la época, pero una vez que IBM estableció MS-DOS como el estándar para PC, El marketing y el impulso de Microsoft (sin mencionar el abuso criminal de su poder de monopolio) efectivamente excluyeron a la mejor competencia durante mucho tiempo.
Emmet
2
"La multitarea es solo una característica inteligente desarrollada cuando las CPU comenzaron a ser lo suficientemente rápidas ..." ¿ Quiere decir que la computadora de orientación Apollo era un diseño multitarea ?
un CVn
1
Cuando dije "CPU" me refería a las producidas en masa, y cuando dije "multitarea" me refería a la multitarea de las aplicaciones de PC. Y, finalmente, por "usuario final" me refería al niño detrás de la PC, no al astronauta. Aún así, felicitaciones por el interesante comentario.
Dan Horvat
0

Aunque solo puede enfocarse en una tarea, lo que haría es un simple paso de pasar rápidamente de una a otra. De esta manera, parecía que era multitarea, pero en realidad solo se enfoca en 1, luego en otro, luego en otro, etc.

Thoth
fuente
Estás combinando la multitarea con la informática multiprocesador allí. Cambiar entre múltiples tareas muy rápidamente es multitarea, en el mundo de la informática. La definición habitual no exige ejecución paralela. Varias "versiones antiguas de Windows" realizaban la multitarea de manera diferente, dependiendo de qué versión de Windows, en qué modo se ejecutaba y si en primer lugar estaba basado en DOS. (Windows NT 3.1 es anterior a DOS + Windows 95 y podría hacer SMP). Como señalé en otro comentario, se han escrito libros completos sobre esto. Ese realmente no es el mejor resumen de 2 oraciones.
JdeBP
@JdeBP ... ¡Sé la diferencia entre la multitarea y el multiprocesador, ya que todavía uso principalmente procesadores de un solo núcleo! Las computadoras funcionan en serie. El verdadero paralelo solo se verá en la computación cuántica.
Thoth
0

Una cosa que no vi mencionada aquí es algo interesante:

Windows 3.0 no era un sistema multitarea preventivo, era cooperativo como todas las versiones de MacOS hasta OS X: una aplicación tenía que regresar de una llamada antes de que cualquier otra aplicación pudiera realizar alguna acción.

Sin embargo, como me recordó un comentarista, las aplicaciones de DOS fueron multitarea. Esto se debe a que no se escribieron para tareas múltiples "cooperativas" (esto siempre debe integrarse en los sistemas que lo usan).

En ese momento había programas llamados TSR (Residente de terminación-permanencia) que tomaron el lugar de los controladores de dispositivos actuales. Estos controladores se ejecutarían de forma independiente, generalmente en su propio hilo al insertarse en uno de los controladores de eventos del sistema operativo. Windows generalmente no los conocía, corrían a un nivel inferior.

En realidad, no se trataba de aplicaciones de Windows, sino de cómo se realizaban todas las actividades de subprocesamiento antes de Windows 3.1, como controladores de impresora, controladores com, etc.

Aunque Windows 3.1 era multitarea, DOS no lo era, pero Windows 3.1 simplemente eliminó los dos y se hizo cargo cuando comenzó (en aquel entonces a menudo iniciaba Windows desde un indicador de DOS).

Bill K
fuente
Windows 3.0 admite la multitarea preventiva de aplicaciones DOS cuando se ejecuta en un procesador 386 o superior. Solo las aplicaciones de Windows fueron multitarea de forma cooperativa.
Jules
Oh, eso es correcto: estaba codificando aplicaciones de Windows en ese momento y realmente no estaba pensando en DOS. Trataba las aplicaciones de DOS de manera diferente, gracias por señalarlo.
Bill K
-8

Buena pregunta. En MS-DOS, el núcleo era monolítico, lo que significa que solo manejaba una tarea a la vez, en comparación con el nuevo núcleo moderno que se implementó en Windows 9x y la versión actual. Puedes ver más aquí .

javathunderman
fuente
11
-1 sugiere que un sistema operativo monotítico no puede realizar varias tareas a la vez, eso está muy mal. Linux es FAMOSAMENTE núcleo monotítico (hubo un famoso debate entre Linux Torvalds y Andrew Tanenbaum), pero Linux obviamente puede realizar múltiples tareas. aquí hay un enlace para mostrarle que Linux es monolítico stackoverflow.com/questions/1806585/…
barlop
44
Monolítico no significa lo que crees que hace.
Thorbjørn Ravn Andersen