Multiprogramming和Multitasking有什么区别


10

我发现很难清楚地区分多程序和多任务。

我的主要来源是Wikipedia,但WP文章似乎与一些较不知名的来源(例如我的大学教授)有点矛盾。

在我读WP时,通过在进程等待I / O时进行上下文切换,多编程是提高CPU吞吐量的基本方法。

多重编程不能保证程序会及时运行。实际上,第一个程序可以很好地运行数小时,而无需访问外围设备。

合作分时,与协作多任务同义,是对多程序的改进(不是同义的)。CPU定期进行上下文切换以给人以同时执行的印象,但是仍然需要进程来产生-设计不当的程序可能会使系统的其余部分枯竭。

抢占式多任务处理可以更主动地控制调度,将某些进程优先于其他进程,等等。

  1. 此概述正确吗?如果不是,那是因为WP不正确还是因为我读WP错误?
  2. 为什么有些资料似乎将多程序和多任务混为一谈?

1
“有一些不太知名的消息来源(例如我的大学教授)”-亲爱的。我确实希望他比维基百科更有信誉,而维基百科在CS上有很多不成熟的内容。
拉斐尔

“多程序”似乎更是一种历史方法。现代多任务处理确实与IO阻止有关,但它只是处理流程的因素之一。此外,几乎所有现代多任务处理都是在CPU的支持下抢占先机的(CPU在几年前就一直没有这种支持,行为良好的进程应该调用支持合作的基于OS的等待方法)。
vzn

2
@Raphael,可以通过将它们烘焙到完美来为全世界帮个忙。
vonbrand

1
@vonbrand我尝试过,但不幸的是,有足够半熟的专家来阻止这种尝试。
拉斐尔

@Raphael,那群人也没有出现在这里吗?
vonbrand

Answers:


9

它们或多或少是同义词。当涉及到一个CPU(正在从一个进程切换到另一个同时在内存中重新启动的进程)时,多编程将更有用。随着线程的来临,它不再在程序之间切换...

至少从80286开始,处理器(尤其是英特尔产品线)就具有真正的多任务处理机制(定时器中断,特权指令)。最早的Mac机中使用的M68000是具有成熟的多处理能力的处理器。这不是体系结构的最新发展。请注意,共享系统是第一次将用户的程序切入和切出,因此从内存中同时包含多个程序的意义上来说,并不是真正的多程序。

这个想法是让多个程序同时驻留在内存中,这样,当一个程序释放CPU(通过结束或等待)时,就有其他程序可以使用CPU,从而提高了CPU利用率(并且您可以认为每个CPU突发都是准备使用I / O,增加整体使用率)。这样可以提供更好的吞吐量(在批处理系统中很重要)。

随着时间共享,几个交互式用户连接到了计算机。同样的想法,保留它们的程序,但要在它们之间进行足够快的切换,以使它们具有“拥有一台计算机”的错觉。需要一个中断CPU的计时器以避免独占。

在个人计算机上,一次运行多个程序的动机没有多大的积极性,至少在最初没有(一个用户在严格受限的机器之前并不期望太多)。随着计算机的发展,一种解决此问题的方法可以一次允许多个程序,而无需太多更改操作系统之所以称为“协作式多任务处理”,是因为每个程序都必须定期向操作系统屈服,以选择另一个程序来运行。由于该程序完全受控,因此可以选择在其他人无法解决的情况下执行此操作。不用说,一个“遗忘”的程序可以完全履行其产生收益的职责,其性能会得到有趣的提升……早期的Mac系统以这种方式工作,并且由于上述原因,这种程序并没有持续太长时间。在没有或只有基本操作系统且运行严格控制的程序集的嵌入式系统上,这当然是一个吸引人的选择。


WP文章似乎暗示,与多任务处理(系统)相反,多编程缺乏虚拟内存。从历史上看可能是正确的,但定义是否正交?
didierc

1
在70年代,我们这里有一个多程序的IBM S / 370,它绝对没有虚拟内存(我似乎记得它只有一个用于假脱机的磁盘)。虚拟内存使您可以在有限的RAM中拥有更多的程序(因为您只保留“最常用”的部分),从而可以实现更好的利用率。所以,是的,我认为那些人是完全独立的。但今天在实践中,您将一无所有。除了可能在您的WiFi路由器或手机中……
vonbrand

好。实际上,我也这么认为。我知道,嵌入式系统确实经常缺乏适当的内存保护。但是,对于性能良好的程序来说,这不是问题。当然,这取决于程序供应商。
didierc

@didierc正交吗?你的意思是互斥的吧?
jsj

2

多任务和多程序之间的区别?多任务处理是多程序设计的逻辑扩展。传统上,在多编程环境中,多个用户共享cpu,并且cpu快速从一个用户切换到另一个用户,从而彼此之间完全透明。在多任务处理中,用户被程序替代,即,一个以上的程序共享cpu,并且cpu从一个程序迅速切换到另一个程序。实际上,驻留在磁盘上的软件是一个程序。当它进入RAM进行执行时称为进程或任务,而当它位于CPU内部并执行时称为线程。因此,多编程基本上是针对多用户的,而多任务处理则是针对具有多个程序的单用户的。由于大多数现代OS都支持两者,因此它们通常可以互换使用。


0

多任务和多编程之间有很多差异。

多任务处理一次只能执行一个任务。例如,您正在听一首歌,打印纸并同时在MS-Word上键入。

在进行多种编程时,在这种类型的OS中,我们使用缓冲和后台处理来提高CPU利用率。在顺序执行中,CPU在执行程序后处于空闲状态,并从主存储器加载下一个程序。在I / O操作期间,CPU也会处于闲置状态,CPU也处于空闲状态,但是在使用多程序环境的情况下,CPU会切换到下一个程序并对其进行处理。这是在缓冲和后台处理的帮助下使用的技术。

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.