如果 DOS 是单任务的,那么旧版本的 Windows 如何实现多任务?

如果 DOS 是单任务的,那么旧版本的 Windows 如何实现多任务?

我读到 DOS 是一个单任务操作系统。

但是如果旧版本的 Windows(也包括 Windows 95?)只是 DOS 的包装器,那么 Windows 如何作为多任务操作系统运行?

答案1

Windows 95

Windows 95远不止是 MS-DOS 的“包装器”. 引用 Raymond Chen 的话:

MS-DOS 在 Windows 95 中有两个用途。

  • 它充当引导加载程序。
  • 它充当 16 位传统设备驱动层。

Windows 95 实际上挂接/覆盖了几乎所有的 MS-DOS,将其作为兼容层,同时自己完成所有繁重的工作。它还为 32 位程序实现了抢占式多任务处理。


Windows 95 之前版本

Windows 3.x 及更早版本大多是 16 位的(Win32s 除外,它是一种连接 16 位和 32 位的兼容层,但在这里我们将其忽略),更多地依赖于 DOS,并且只使用协作式多任务处理 - 即它们不会强制正在运行的程序切换;它们等待正在运行的程序放弃控制权(基本上,通过告诉操作系统运行下一个正在等待的程序来表示“我完成了”)。

多任务处理是协作式的,就像在旧版本的 MacOS 中一样(尽管与支持抢占式多任务处理的 DOS 4.x 多任务处理不同)。任务必须让步给操作系统才能安排其他任务。让步内置于某些 API 调用中,尤其是消息处理。只要任务及时处理消息,一切都很好。如果任务停止处理消息并忙于执行某个处理循环,多任务处理就不再存在。

Windows 3.x 体系结构

至于早期的 Windows 程序将如何放弃控制权:

Windows 3.1 使用协作式多任务处理 - 这意味着正在运行的每个应用程序都被指示定期检查消息队列,以查明是否有其他应用程序请求使用 CPU,如果有,则将控制权交给该应用程序。但是,许多 Windows 3.1 应用程序只会偶尔检查消息队列,或者根本不检查,并独占 CPU 控制权,直到它们需要为止。像 Windows 95 这样的抢占式多任务处理系统会从正在运行的应用程序手中夺走 CPU 控制权,并根据系统需求将其分配给具有更高优先级的应用程序。

来源

DOS 只会看到这个正在运行的单个应用程序(Windows 或其他),它会在不退出的情况下传递控制权。理论上,抢占式多任务处理可以在 DOS 之上实现,方法是使用实​​时时钟和硬件中断强制将控制权交给调度程序。Tonny 评论,这实际上是由一些在 DOS 上运行的操作系统完成的。

386增强模式?

注:有一些评论386 增强模式Windows 3.x 是 32 位的,并且支持抢占式多任务处理。

这是一个有趣的案例。总结一下相关博客文章386 增强模式基本上是一个 32 位虚拟机管理程序,用于运行虚拟机。其中一个虚拟机内部运行 Windows 3.x 标准模式,可执行上述所有操作。

MS-DOS 也将在这些虚拟机内运行,并且显然它们是抢占式多任务的 - 因此看起来 386 增强模式虚拟机管理程序将在虚拟机之间共享 CPU 时间片(其中一个运行普通 3.x,另一些运行 MS-DOS),并且每个 VM 都会做自己的事情 - 3.x 将协作进行多任务处理,而 MS-DOS 将单任务处理。


操作系统

DOS 本身在理论上是单任务的,但它确实支持股东总回报程序会一直停留在后台,直到被硬件中断触发。这离真正的多任务处理还很远,但也不是完全的单任务处理。


这么多关于比特性的讨论?我问的是多任务处理!

好吧,严格来说,位数和多任务并不相互依赖。应该可以以任意位数实现任何多任务模式。但是,从 16 位处理器转向 32 位处理器还引入了其他硬件功能,这些功能可能使抢占式多任务更容易实现。

此外,由于 32 位程序是较新的,因此在强制切换时更容易让它们运行 - 这可能会破坏一些传统的 16 位程序。

当然,这都是猜测。如果你真的想知道为什么微软没有在 Windows 3.x 中实现抢占式多任务处理(尽管 386 增强模式如此),你必须问在那里工作过的人。

另外,我想纠正您的假设,即 Windows 95 仅仅是 DOS 的一个包装器;)

答案2

它持续运行一个程序,即 Windows。该程序将 CPU 时间(和其他资源)分配给不同的程序。

考虑一下这个类比:

您的办公室一次只能容纳一个人(该人称为 DOS 先生或夫人)。该人一次只处理一件事。例如,它给一个人打电话并开始全天候与他/她聊天。

现在,你用秘书先生 (windows) 替换那个人。它会给某人打电话并一直与其交谈(仍然是一项单一任务)。然后过了一段时间,另一个人会说“我现在说得够多了。去和别人谈谈,过一会儿再给我打电话”。

秘书先生会呼叫另一个人。与那个人聊天,直到那个人说了同样的话。然后它会呼叫下一个人,直到它到达要交谈的人名单的末尾。那时它会从顶部重新开始。

  • 从技术角度来说,这称为协作式多任务处理。它要求其他人表示自己有足够的 CPU 时间。如果一个人不这样做,那么一切都会崩溃。
  • 现代系统更加智能。包括先发制人的多任务处理。想象一下秘书设置闹钟并在 5 分钟后切断对方的通话。“太好了,简。但我现在必须和乔谈谈。我过一会儿再给你回电话。- 点击。”

如果添加多个处理器,情况会变得更加复杂。:)

答案3

在现代操作系统中,操作系统控制所有硬件资源,正在运行的应用程序被保存在沙盒中。应用程序不得访问操作系统未分配给该应用程序的内存,也不能直接访问计算机中的硬件设备。如果需要访问硬件,应用程序必须通过设备驱动程序进行通信。

操作系统可以强制执行此控制,因为它强制 CPU 进入保护模式

另一方面,DOS 从不进入保护模式,而是保持实模式*. 在实模式下,正在运行的应用程序可以执行任何它想做的事情,例如直接访问硬件。但在实模式下运行的应用程序也可以告诉 CPU 进入保护模式。

最后一部分允许 Windows 95 之类的应用程序启动多线程环境,即使它们基本上是从 DOS 启动的。

据我所知,DOS(磁盘操作系统)只不过是文件管理系统。它提供了文件系统、文件系统导航机制、一些工具以及启动应用程序的可能性。它还允许一些应用程序驻留,例如鼠标驱动程序和 EMM 仿真器。但它并没有试图像现代操作系统那样控制计算机中的硬件。

* 当 DOS 在 70 年代首次创建时,CPU 中还不存在保护模式。直到 80 年代中期出现了 80286 处理器,保护模式才成为 CPU 的一部分。

答案4

多任务处理只不过是同时运行应用程序的假象。它看起来就像您这边同时执行,但实际上进程 A、B 和 C 共享 CPU 时间的顺序是:A、B、C、A、B、C、A、B……它们只是快速地开启和关闭。实际上没有两个进程同时运行。

因此,完全可以让 MS-DOS 进行多任务处理,方法是让它暂停一个进程,短时间运行下一个进程,暂停该进程,跳回到第一个进程,依此类推。

多任务处理是一个巧妙的功能,当 CPU 的速度足够快,可以不断轮换这些进程并让最终用户觉得这些进程是同时进行的,就会开发出这个功能。

对于那些记得的人来说,游戏仍然在 DOS4GW 上运行,因为 Windows 太慢了。

相关内容