ps-*_*aux 116 windows multitasking
我读到 DOS 是一个单任务操作系统。
但是,如果旧版本的 Windows(也包括 Windows 95?)只是 DOS 的包装,那么 Windows 怎么能作为一个多任务操作系统运行呢?
Bob*_*Bob 162
Windows 95远不只是 MS-DOS 的“包装器”。引用 Raymond Chen:
MS-DOS 在 Windows 95 中有两个用途。
- 它充当引导加载程序。
- 它充当 16 位传统设备驱动程序层。
Windows 95 实际上钩住/覆盖了几乎所有的 MS-DOS,将其保留为兼容层,同时自己完成所有繁重的工作。它还为 32 位程序实现了抢占式多任务处理。
Windows 3.x 和更早的版本大多是 16 位的(Win32s 除外,它是一种连接 16 和 32 的兼容层,但我们在这里将忽略它),更依赖于 DOS,并且仅使用协作多任务处理 - 那就是他们不强迫正在运行的程序切换出来的那个;他们等待正在运行的程序让出控制权(基本上,通过告诉操作系统运行正在等待的下一个程序来说“我完成了”)。
多任务是协作的,就像在旧版本的 MacOS 中一样(尽管与多任务 DOS 4.x 不同,后者采用抢占式多任务)。任务必须让步给操作系统才能安排不同的任务。产量内置于某些 API 调用中,尤其是消息处理。只要任务及时处理消息,一切都很好。如果一个任务停止处理消息并忙于执行某个处理循环,则不再有多任务处理。
至于早期的 Windows 程序如何产生控制权:
Windows 3.1 使用协作式多任务处理——这意味着每个正在运行的应用程序都被指示定期检查消息队列以查明是否有任何其他应用程序要求使用 CPU,如果是,则将控制权交给该应用程序. 但是,许多 Windows 3.1 应用程序只会很少或根本不检查消息队列,并根据需要独占 CPU 控制权。像 Windows 95 这样的抢占式多任务系统将从正在运行的应用程序中夺走 CPU 控制权,并根据系统的需要将其分配给具有更高优先级的应用程序。
DOS 所看到的只是这个单一的应用程序(Windows 或其他)正在运行,它会在不退出的情况下传递控制权。理论上,通过使用实时时钟和硬件中断来强制将控制权交给调度程序,抢占式多任务处理无论如何都可以在 DOS 之上实现。正如托尼评论的那样,这实际上是由运行在 DOS 之上的一些操作系统完成的。
注意:对于Windows 3.x 的386 增强模式是32 位的,并且支持抢占式多任务处理,已经有一些评论。
这是一个有趣的案例。总结链接的博客文章,386 增强模式基本上是一个 32 位虚拟机管理程序,它运行虚拟机。在其中一台虚拟机中运行 Windows 3.x 标准模式,它执行上面列出的所有内容。
MS-DOS 也将在这些虚拟机中运行,而且显然它们是抢占式的多任务处理 - 因此 386 增强模式管理程序似乎将在虚拟机之间共享 CPU 时间片(其中一个运行普通 3.x,其他运行 MS -DOS),并且每个 VM 都会做自己的事情——3.x 将协同多任务,而 MS-DOS 将是单任务。
DOS 本身在纸面上是单任务处理,但它确实支持TSR程序,该程序将保持在后台直到被硬件中断触发。远非真正的多任务处理,但也不是完全单任务处理。
好吧,严格来说,bit-ness 和 multitasking 并不相互依赖。应该可以在任何位元中实现任何多任务模式。然而,从 16 位处理器到 32 位处理器的转变也引入了其他硬件功能,这些功能可以使抢占式多任务处理更容易实现。
此外,由于 32 位程序是新的,当它们被强制关闭时更容易让它们工作——这可能会破坏一些传统的 16 位程序。
当然,这都是猜测。如果您真的想知道为什么 MS 没有在 Windows 3.x 中实现抢占式多任务处理(尽管有 386 增强模式),您必须询问在那里工作的人。
另外,我想纠正您的假设,即 Windows 95 只是 DOS 的包装器;)
Hen*_*nes 27
它连续运行一个程序,称为windows。那个在不同程序之间分配 CPU 时间(和其他资源)。
考虑这个类比:
你有一个办公室,当时只能有一个人(那个人被称为先生或小姐 DOS)。那个人当时只做一件事。例如,它给一个人打电话并开始与他/她 24/7 聊天。
现在你用秘书先生代替那个人。(视窗)。它会打电话给某人并一直与之交谈(仍然是一项任务)。然后过了一段时间,对方会说“我已经说得够多了。你去和别人谈谈,一会儿给我回电话”。
秘书先生会打电话给对方。和那个人聊天,直到那个人说同样的话。然后它会呼叫下一个人,直到它位于要与之交谈的人员列表的末尾。届时,它将再次从顶部开始。
如果添加多个处理器,它会变得更加复杂。:)
Pet*_*ete 13
在现代操作系统中,操作系统控制所有硬件资源,运行的应用程序保存在沙箱中。应用程序不得访问操作系统未分配给该应用程序的内存,也不能直接访问计算机中的硬件设备。如果需要硬件访问,应用程序必须通过设备驱动程序进行通信。
操作系统可以强制执行此控制,因为它会强制 CPU 进入保护模式。
另一方面,DOS 从不进入保护模式,而是停留在实模式*. 在实模式下,正在运行的应用程序可以执行任何它想要的操作,例如直接访问硬件。但是在实模式下运行的应用程序也可以告诉 CPU 进入保护模式。
最后一部分允许像 Windows 95 这样的应用程序启动多线程环境,即使它们基本上是从 DOS 启动的。
DOS(磁盘操作系统)不过是文件管理系统而已。它提供了一个文件系统、导航文件系统的机制、一些工具以及启动应用程序的可能性。它还允许一些应用程序驻留,例如鼠标驱动程序和 EMM 模拟器。但它并没有尝试像现代操作系统那样控制计算机中的硬件。
* 在 70 年代首次创建 DOS 时,CPU 中不存在保护模式。直到 80 年代中期的 80286 处理器,保护模式才成为 CPU 的一部分。
在 Windows 3.x 是多任务 DOS 应用程序的第一个版本之前,有类似 DesqView 的程序。例如,如果一次运行三个 DOS 会话,那么 DesqView 将创建四个虚拟机。三个 DOS 会话会各自认为他们“拥有”整台机器,除了它们中没有一个会实际执行文件 I/O。相反,在每个会话中运行的 DOS 版本将被修补,以便它将对文件 I/O 的任何请求转发到专门用于该目的的特殊会话。由于 PC 的文本模式硬件会不断地将内存区域的内容显示为字符;DesqView 可以通过将每个会话的 0xB8000-0xB9FFF 范围映射到自己的 RAM 区域,让每个会话都有自己的虚拟屏幕,并定期将当前应用程序的区域复制到物理屏幕缓冲区。图形支持要困难得多,因为显示板上 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 版本,它包含诸如窗口系统之类的东西,该系统可以适应在代码尝试绘制时屏幕区域变得不可用(其效果是绘图将被屏蔽) )。
归档时间: |
|
查看次数: |
26382 次 |
最近记录: |