如果DOS是单任务的,那么在旧版本的Windows中如何进行多任务?


113

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

但是,如果旧版本的Windows(还包括Windows 95?)仅仅是DOS的包装,那么Windows如何作为多任务OS运行?


8
这就是所谓的抢占式多任务- support.microsoft.com/kb/117567
joeqwerty

20
您将必须定义比这更好的“旧”字。在这方面,“ 386增强模式”下的DOS + Windows 9x和DOS + Windows 3.x与“标准模式”和“实模式”下的DOS + Windows 3.x / 2.x完全不同。乔伊维蒂(joeqwerty)暗示,合作的多任务处理和前瞻性的合作。整本书都已经写过,所以一个特定的问题更好。
JdeBP 2014年

5
@joeqwerty最令人敬畏的IMO是Microsoft将有关如此古老的软件的文档保持在线状态。甚至还有关于旧版MS-DOS上的高级主题的文章...真的很不​​错,可以保持这种状态。
Nothings不可能

6
DOS不会给您多任务处理。您仍然可以在没有DOS的帮助下在其之上编写完全多任务的程序,这是早期Windows所做的。Windows 95当然不仅是DOS的“包装器”。
Boann 2014年

3
@NigelNquande我实际上发现MS在维护旧文档方面相当不错。他们大部分已退休的KB文章在线(例如,随机的Windows 3.1 KB或Windows 2.1-3.0 的print实用程序文档,或MS-DOS 5.0的ansi.sys),即使在声明了12个月的终止日期之后生活宽限期。它不像有效的产品文档那样容易浏览,您必须在搜索中进行特定说明。
杰森·C

Answers:


160

Windows 95

Windows 95 远远不只是MS-DOS的“包装”。引用雷蒙·陈:

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

  • 它充当了引导加载程序。
  • 它充当16位旧式设备驱动程序层。

Windows 95实际上几乎钩住/覆盖了所有MS-DOS,在进行所有繁重的工作时将其保留为兼容层。它还为32位程序实现了抢占式多任务处理。


Windows 95之前

Windows 3.x和更早的版本大多是16位的(Win32s除外,后者是将16和32桥接在一起的一种兼容层,但在这里我们将忽略它),它们更多地依赖于DOS,并且仅使用协作式多任务处理-他们不强迫正在运行的程序退出的程序;他们等待正在运行的程序产生控制权(基本上,通过告诉OS运行正在等待的下一个程序来说“我完成了”)。

多任务处理是协作的,就像在旧版本的MacOS中一样(尽管与多任务DOS 4.x不同,后者具有抢先式多任务处理)。一项任务必须让给OS,以便安排其他任务。收益内置于某些API调用中,尤其是消息处理。只要任务能够及时处理消息,一切就很好。如果任务停止处理消息并忙于执行某个处理循环,则不再需要多任务处理。

Windows 3.x架构

至于早期的Windows程序如何产生控制权:

Windows 3.1使用协作式多任务处理-意味着正在运行的每个应用程序都被指示定期检查消息队列,以查找是否有其他应用程序正在请求使用CPU,如果有,则请求对该应用程序进行控制。但是,许多Windows 3.1应用程序只会很少或根本不检查消息队列,并在所需的时间内独占CPU的控制权。像Windows 95这样的抢占式多任务处理系统将使CPU失去对正在运行的应用程序的控制,并根据系统需求将其分配给优先级更高的应用程序。

资源

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

386增强模式?

注意:关于Windows 3.x的386增强模式(32位并支持抢先式多任务处理)已有一些评论。

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

MS-DOS也将在这些虚拟机中运行,并且显然它们是抢先式多任务处理-因此,似乎386增强模式虚拟机监控程序将在虚拟机之间共享CPU时间片(其中一个运行正常的3.x,另一个运行MS。 -DOS),每个VM都会做自己的事情-3.x将协同执行多任务,而MS-DOS将是单任务。


微软DOS

DOS本身是单任务的,但是它确实支持TSR程序,该程序将一直在后台运行,直到被硬件中断触发为止。远非真正的多任务处理,但也不是完全单任务处理。


所有这些关于位的话题?我问了多任务!

好吧,严格来说,位和多任务并不相互依赖。顶部应该以任何位方式实现任何多任务处理模式。但是,从16位处理器升级到32位处理器还引入了其他硬件功能,这些功能可以使抢先式多任务处理更易于实现。

另外,由于32位程序是新的,因此在强制退出时更容易使它们工作-这可能会破坏某些旧的16位程序。

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

此外,我想更正您的假设Windows 95是DOS的包装;)


4
非常好的写作。如果我没记错的话(对我来说OS设计课是很多年前的事情),Windows 9x钩住了计时器中断以强制执行自己的调度程序,就像您在第二至第二段中所建议的那样。在DOS之上还有其他操作系统也做了同样的事情。我清楚地记得ADOS(用于工业应用程序的实时操作系统)和XINU(用于教育目的的小型Unix / Posix之类的操作系统)都是基于DOS的。(AMX也可以直接从EPROM运行裸机。在DOS上运行时,测试/调试要容易得多。避免了每次测试重新刻录EPROMS的麻烦。)
Tonny 2014年

@Tonny感谢您确认该方案是可行的(并已在实践中使用)。猜测一下,Windows 1-3不使用抢占式多任务处理的原因并不是很多,以至于他们无法做到这一点(MS-DOS 4拥有它,尽管尚未发布),但是它与DOS的向后兼容性不兼容。程式。
鲍勃

3
Mmmmhhh考虑Windows 1-3:这是8086 CPU和更高版本的通用代码库,可能与它有更多关系。只有80286及更高版本才能正确处理ring0-3,而这正是Win9x用于实现多任务处理的方式。4DOS和其他操作系统已经在DOS上提供了有限的多任务处理(如果我没记错的话,需要80286)。您甚至可以在4DOS中将Win3本身作为单独的进程运行。
Tonny

1
西努确实没有在DOS上运行。毕竟,它始于LSI-11操作系统。DOS + Windows 3.x中没有预防性多任务处理的说法是错误的。在386增强模式下,由VMM提供。而且关于4DOS的胡说八道为您提供了一个常见的答案:4DOS不是操作系统。声明它提供多任务处理是完全错误的。
JdeBP 2014年

2
PDP-8支持抢先式多任务处理,这只是一台12位计算机。
david25272

26

它连续运行一个程序,称为Windows。那分散了不同程序之间的CPU时间(和其他资源)。

考虑这个比喻:

您有一个办公室,当时只能有一个人(该人称为“先生或小姐DOS”)。那个人当时在做一件事情。例如,它给一个人打电话并开始与他/她24/7聊天。

现在,您将其替换为秘书先生。(视窗)。它会给某人打电话并一直与之交谈(仍然是一项任务)。然后,一段时间后,另一个人会说:“我到目前为止已经聊够了。去和别人聊天,然后再打给我”。

秘书先生将呼叫另一个人。与那个人聊天,直到那个人说同样的话。然后它将呼叫下一个人,直到它在与之交谈的人的列表的末尾。届时它将再次从顶部开始。

  • 用技术术语来说,这称为协作多任务。它要求其他人说他/她有足够的CPU时间。如果一个人不这样做,那么一切都会崩溃。
  • 现代系统更加智能。包括抢先式多任务处理。想想秘书设置一个闹钟,并在5分钟后切断另一个人的电话。“很好,简。但是我现在必须和乔谈谈。我会再打给你。-点击。”

如果添加多个处理器,它将变得更加复杂。:)


1
您的意思不是说合作/非抢占式多任务处理吗?同样,有趣的是,Windows 95引入了针对32位程序的抢占式多任务处理。它并不是DOS的包装器,而是一个使用DOS作为引导加载程序但替换了它的主要部分的操作系统(保留了足够的空间来支持16位/ DOS程序)。
鲍勃

先生或小姐,为什么不选“博士” DOS?
gtrak 2014年

1
“它连续运行一个程序……那个程序在不同程序之间分散了CPU时间(和其他资源)。” 不能说任何操作系统吗?尽管该问题暗示MS-DOS无法。在废弃技术的技术细节时,我强烈反对类比/隐喻。好了,现在我们知道一些假设的办公室如何运作了?这并不能真正解释问题的答案。
Celeritas 2014年

13

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

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

另一方面,DOS永远不会进入保护模式,而是保持在实模式 *。在实模式下,正在运行的应用程序可以执行其想要执行的任何操作,例如,直接访问硬件。但是,以实模式运行的应用程序也可以告诉CPU进入保护模式。

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

DOS(磁盘操作系统)的功能远不止于文件管理系统。它提供了文件系统,导航文件系统的机制,一些工具以及启动应用程序的可能性。它的确也允许某些应用程序驻留,例如鼠标驱动程序和EMM仿真器。但是,它没有像现代OS那样尝试控制计算机中的硬件。

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


2
请注意,当时CPU还没有保护模式。
jwenting 2014年

1
@jwenting-好的,我添加了一条注释
Pete

6

在Windows 3.x(它是多任务DOS应用程序的第一个版本)之前,有DesqView之类的程序也可以这样做。如果其中一个例如一次运行三个DOS会话,则DesqView将创建四个虚拟机。三个DOS会话各自认为它们“拥有”了整个计算机,除了它们中的任何一个都不实际执行文件I / O。相反,将修补在每个会话中运行的DOS版本,以便它将对文件I / O的任何请求转发到专用于此目的的特殊会话。由于PC的文本模式硬件将连续以字符形式显示内存区域的内容;因此,通过将每个会话的0xB8000-0xB9FFF范围映射到自己的RAM区域,DesqView可以让每个会话拥有自己的虚拟屏幕,并定期将当前应用程序的区域复制到物理屏幕缓冲区。图形支持要困难得多,因为显示板上的256K RAM是使用64K的地址空间,一些I / O寄存器和一些“有趣的”硬件控制的,这些硬件需要按特定的特定顺序进行读写。在文本模式下,当应用程序向文本缓冲区中写入内容时,DesqView可以设置一个标志,指示应在下一个计时器刻度时将其复制到显示中;在给定的时间间隔内,只有第一次写入文本缓冲区才需要DesqView的干预;所有其他将合并到下一个计时器刻度。因为显示板上的256K RAM是使用64K的地址空间,一些I / O寄存器和一些“有趣的”硬件控制的,这些硬件需要按特定的特定顺序进行读写。在文本模式下,当应用程序向文本缓冲区中写入内容时,DesqView可以设置一个标志,指示应在下一个计时器刻度时将其复制到显示中;在给定的时间间隔内,只有第一次写入文本缓冲区才需要DesqView的干预;所有其他将合并到下一个计时器刻度。因为显示板上的256K RAM是使用64K的地址空间,一些I / O寄存器和一些“有趣的”硬件控制的,这些硬件需要按特定的特定顺序进行读写。在文本模式下,当应用程序向文本缓冲区中写入内容时,DesqView可以设置一个标志,指示应在下一个计时器刻度时将其复制到显示中;在给定的时间间隔内,只有第一次写入文本缓冲区才需要DesqView的干预;所有其他将合并到下一个计时器刻度。DesqView可以设置一个标志,指示应在下一个计时器刻度时将其复制到显示器上。在给定的时间间隔内,只有第一次写入文本缓冲区才需要DesqView的干预;所有其他将合并到下一个计时器刻度。DesqView可以设置一个标志,指示应在下一个计时器刻度时将其复制到显示器上。在给定的时间间隔内,只有第一次写入文本缓冲区才需要DesqView的干预;所有其他将合并到下一个计时器刻度。

相比之下,虚拟化图形模式将要求DeskView捕获每个单独的写操作以显示内存或I / O寄存器。鉴于这将使内存写入速度降低大约100倍,并且图形程序必须比文本程序写入更多的数据,因此大多数图形软件的实时虚拟化是不切实际的。取而代之的是,通过使任何试图使图形停止运行的非前台应用程序暂停,直到它成为前台应用程序,然后完全控制屏幕来处理图形。当控制切换到其他应用程序时,DesqView将尝试复制所有图形寄存器的状态,然后进行切换。切换回图形应用程序后,DesqView将恢复保存的状态。

从某种意义上说,多任务非图形DOS应用程序比多任务Windows应用程序容易,因为共享资源很少,而且应用程序之间不必交互。相比之下,在Windows中,有必要处理诸如剪贴板之类的东西,或者一个程序的窗口可能以掩盖另一个程序的方式移动的可能性。Windows 95是Windows的第一个版本,可以通过包含诸如窗口系统之类的东西来克服这种限制,该窗口系统可以容纳在代码尝试绘制时无法显示屏幕区域的情况(其结果是图形被掩盖了) )。


感谢您提醒我有关DesqView的信息。我曾经一直使用它,但是完全忘记了它。
Emmet 2014年

3

多任务仅是同时运行应用程序的错觉。它被认为是在您端同时执行,但实际上进程A,B和C按以下顺序共享CPU时间:A,B,C,A,B,C,A,B ...它们只是打开并起飞很快。实际上没有两个进程同时运行。

因此,通过使其暂停一个进程,在短时间内运行下一个进程,暂停该进程,跳回到第一个进程,等等,来使MS-DOS多任务成为可能。

当CPU开始足够快以能够在这些进程中不断旋转并使最终用户看起来同时运行时,多任务只是一项聪明的功能。

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


1
到目前为止,在大多数情况下,这仍然是操作系统中工作的方式。例如,这就是为什么您可以在4核CPU上“同时”运行10件事的原因。
jwenting 2014年

2
并不是说“ CPU开始足够快”。可以在286上运行多用户多任务操作系统(例如Mark Williams Company的Coherent,这是1983年引入PC的高级OS)。直到(甚至包括)“ Millenium”之前的MS-DOS和Windows(非NT)版本确实对任何客观标准(甚至是当时的技术标准)都表现不佳,但是一旦IBM将MS-DOS确立为PC的标准,微软的营销和发展势头(更不用说滥用其垄断权的行为了)在很长的一段时间内有效地排除了更好的竞争。
Emmet 2014年

2
“当CPU开始足够快时,多任务只是一项聪明的功能……”您的意思是像Apollo指导计算机是一种多任务设计一样吗?
CVn 2014年

1
当我说“ CPU”时,是指批量生产的处理器;当我说“多任务”时,是指PC应用程序的多任务。最后,“最终用户”是指PC背后的孩子,而不是宇航员。尽管如此,还是对有趣的评论表示敬意。
Dan Horvat 2014年

0

即使它只能专注于一项任务,它所要做的只是一个快速地从一项转到另一项的简单步骤。这样看来,它是多任务的,但实际上它只关注于1,然后关注于另一个,然后关注于另一个,等等。


您正在将多任务多处理器计算混为一谈。在计算机世界中,在多个任务之间快速切换是多任务处理。通常的定义不要求并行执行。各种“旧版本的Windows”在执行多任务处理时的方式有所不同,具体取决于哪个版本的Windows,运行哪种模式以及首先是否甚至基于DOS。(Windows NT 3.1早于DOS + Windows 95,并且可以执行SMP。)正如我在另一条评论中指出的那样,整本书都已写过。那确实不是最好的两句话总结。
JdeBP 2014年

@JdeBP ...我知道多任务和多处理器之间的区别,因为我主要还是使用单核处理器!计算机串行工作。真正的并行只能在量子计算中看到。
2014年

0

我在这里没有提到的一件事很有趣:

Windows 3.0并非抢先式多任务处理系统,它像MacOS的所有版本一样可以协同工作,直到OS X为止-一个应用程序必须从通话中返回,然后其他任何应用程序才能采取任何措施。

正如评论员提醒我的那样,DOS应用程序的任务多种多样。这是因为没有将它们写入“合作地”多任务(必须始终将其内置到使用它的系统中)。

当时有称为TSR(永久居留)的程序代替了当今的设备驱动程序。这些驱动程序将独立运行-通常通过将自身插入操作系统的事件处理程序之一来在自己的线程上运行。Windows通常不了解它们,它们在较低级别运行。

这些并不是真正的Windows应用程序,而是所有线程活动在Windows 3.1之前发生的方式,例如打印机驱动程序,COM驱动程序等。

尽管Windows 3.1是多任务的,但DOS不是,但Windows 3.1只是将dos推开了,并在启动时接管了(然后,您通常从DOS提示符下启动Windows)。


在386或更高版本的处理器上运行时,Windows 3.0支持DOS应用程序的抢先式多任务处理。只有Windows应用程序可以协同执行多任务。
Jules 2014年

哦,这是正确的-当时我正在编写Windows应用程序的代码,却没有真正考虑过DOS。它确实以不同的方式对待DOS应用程序-感谢指出。
比尔K

-8

好问题。在MS-DOS中,内核是单块的,这意味着它一次只能处理一项任务,而在Windows 9x和当前版本中实现的新的,现代的内核却与之相对。您可以在此处查看更多信息


11
-1表示单线程操作系统不能执行多任务,这是完全错误的。linux是众所周知的单线程内核(linus torvalds和andrew tanenbaum之间曾有过著名的辩论),但是linux显然可以执行多任务。这里是一个链接,显示您Linux是单片stackoverflow.com/questions/1806585/...
barlop

4
整体并不意味着您认为的那样。
托尔比约恩Ravn的安德森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.