苹果电脑多任务功能的进化简史(一)

计算机多任务化的尝试始于上世纪六十年代,而且初鸣即啼。由于当时是通过纸带输入数据,而且运算过程耗时长久(多以小时计),把所有等待计算的程序写入一卷卡带,并一次性输入的实现,大大降低了人力在机器旁无谓的等待,而一次性输出所有的结果也另当时的人们备感惊喜。在初代麦金塔诞生的八十年代中期,虽然图形用户界面在先驱 Xerox Alto 以及 Apple Lisa 的推进下已经开始崭露头角,但是由于内存太小的缘故,麦金塔在大多数情况下只能够允许单个程序的执行(但苹果允许桌面附件,如计算器,控制面板等同时运行),然而,前辈 Lisa 凭借着八倍于麦金塔的 1MB 海量内存,仅仅依靠 4.8Mhz 的处理器就实现了多任务并行的能力。在当时, MacPaint 和 MacWrite 是麦金塔上极受用户欢迎的两个程序(微软在随后发布的 Windows 1.01 中「借鉴」了这两个程序的创意,甚至连名字也不遑多让),对于身兼图形设计与文字排版的用户来说,在这两个程序之间频繁的切换便是一个十分痛苦的过程。

当时的 IBM PC 已经可以通过一个名为 Memory Shift 的程序来实现多任务常驻内存并在彼此之间快速切换的能力。一九八四年晚秋,已经离开苹果的安迪·赫兹菲尔德在出差的时候正好看到了这个惊人的程序,这令他着迷异常,甚至停下了手头上最要紧的工作,回来之后他马上决定为麦金塔平台开发类似的程序。在这期间还有一段有趣的插曲,比尔·盖茨曾当面会见赫兹菲尔德,并时出重金聘请他为微软攒写切换程序。当时,盖茨对赫兹菲尔德半带恭维并半带傲慢的说道:「我想,像你这么优秀的程序员,花十周的时候写完应该是不成问题的吧」。结果,异常强悍的赫兹菲尔德只用二十个小时就写就了程序的主体部分,这个程序的名字叫做 Switcher ,虽然它不够完善,比如先要暂停前台程序的运行,才能载入位于后台的应用,程序之间切换的效果也略显生硬,但苛刻的乔布斯在观看演示的时候也为它的诞生而颇感兴奋,并立马同意在麦金塔中捆绑这款软件,并兑付了十五万美元。而比尔·盖茨在试用了 Switcher 并得知了赫兹菲尔德的开发过程后,还写了一封热情洋溢的信给他,很难想象,牛人如盖茨者居然如此这般地不吝褒奖之词。

Switcher.gif

赫兹菲尔德并不是孤独的,虽然他是如此的出类拔萃。但是在早期麦金塔平台的多任务化尝试中,有一个身披神秘面纱的强悍程序「Multi-Mac」不可不提,它的发布时间紧随 Switcher ,人们至今不知道它的开发者到底是谁(化名 Jwa van der Vuurst),也查不到出品公司 Aubrac Systems 的任何资料,它在一九八五年底突然跃入世人面前,又默默消逝,从此再没有更新。人们查看它的代码,发现它通过许多不为外界所知的方式访问内核,由此怀疑是内部人员所为。但,倘若不是的话,这绝对是逆向工程领域的杰出作品,由于 Multi-Mac 只支持唯一一款麦金塔,即 512K 内存并携带 64K ROM 的版本,因此极差的兼容性从某种角度证明了逆向工程说法的可能。而 Multi-Mac 的意义不仅在此,它是如此的牛鼻以致于没有任何必要去吹捧它,它领先业界数年的看家绝活有:
 
  • 磁盘缓冲:能够明显提高麦金塔系统的速度。
  • 异步文件管理:允许文件复制在后台执行,不干扰前台进程。
  • 实时多任务:如现今的操作系统那样,允许窗口在桌面上堆叠。(早于 MultiFinder)
  • 自动弹出菜单:鼠标置上,菜单延时弹出,虽小但是很人性化的功能。

MultiMac.gif

Multi-Mac 的设置界面

赫兹菲尔德接着在 Switcher 的基础上开发了 Servant ,这是一款用来替代麦金塔系统中原生 Finder 的壳程序,外观同 Finder 一样,但是集 Finder ,Switcher , ResEdit (可以让用户直接访问文件中的资源)共三款软件的功能与一体,相当牛鼻!但是这个强悍的程序不知为何没有发布正式版本,因此用过的人不是很多。另一方面, Servant 的概念直接促成了继任者 MultiFinder (代号杂耍匠:Juggler)的诞生,虽然最终未得苹果官方的认可(但据说苹果仍然支付了开发费),但在麦金塔实现多任务并行的征程中,Servant 作为先驱的地位是无法否认的。还有一个有趣的情况:Servant 和 MultiFinder 无法同时运行,你可以在下图中看到冲突产生的画面。

servant.gif

不得不再提一下 Lisa ,再多的褒奖之词也无法形容我对它的喜爱,它极富进取精神,可以说是八十年早期技术的集大成者,它拥有当时在中大型机上才有的虚拟内存管理能力(虚拟内存不仅意味着系统能够把内存扩展进实体储存设备,还包括为程序映射出一整块的连续内存),而微软在一九九零年发布的 Windows 3.0 中才开始搭载这项功能,它不需要外挂程序就能支持多任务并行,它硕大的内存、海量的硬盘、巨大的显示器,无一不彰显了当时主流计算机平台的巅峰水平。值得一提的还有模块化的硬件设计,简洁有序且极少飞线,而这样的理念一直延续到了今天的产品之中。福布斯曾将 Lisa 列为苹果十大失败产品之一,虽然它在商业上铩羽而归,但我认为它的意义与苹果历史上其他失败的产品如 Macintosh TV 、Pippin 是完全不同的。

随着麦金塔在硬件与操作系统方面的齐头并进,在桌面上实现多任务共存的呼声也愈加强烈起来。赫兹菲尔德最后把 Switcher 项目移交给了当时苹果公司的新进雇员:菲尔·高曼,他是一位极具天赋的年轻程序员,随后,菲尔与埃里克·林沃德合作推出了能够实现该项功能的 MultiFinder ,它能在多个程序之间分配 CPU 时间(资源),允许应用程序预先提请所需的内存以便系统更好的管理。不过,由于麦金塔内存管理机制与生俱来的缺陷, MutiFinder 在实际运行的过程中仍然会产生许多问题,比如,由单一程序错误而导致的集体崩溃,或者是某个毫无意义的程序长期霸占宝贵的系统资源,不过这也是协同多任务时代的操作系统共通的毛病,并非苹果一家独有,虽然在某种程度上它可以给计算机带来更好的性能,但是对程序员也提出了严苛的要求(必须时常提醒自己是否忘记写入脱钩部分,否则就会导致其他程序持续的等待系统资源)。 MultiFinder 在一九八七年的 System 4.2(在 System 7.5.1 后正式改名为 Mac OS ) 中始被引介,在 System 7 之后成为内核组件,虽然问题不断,并始终没有得到妥善的解决,但它一直伴随着麦金塔走到了一个阶段性的终点: Mac OS 9 。

multifinder.gif

设置是否允许在 MultiFinder 环境下执行任务

MAC OS 9 是一个过渡版的系统,一部分原因是搭载了 Mac OS X 中即将出现的一些功能,苹果希望开发者们能逐渐适应新系统的特性,另一部分原因则是为了使版本号不至于从八直接跳到十。工程师们为它增加了一个 API 来实现抢先式多任务处理的功能,这一步整整晚了 Windows 95 四年半,但严格说起来这个时间应该是六年半,在二零零一年的三月,随着 Mac OS X 10.0.0 (Cheetah)的正式发布,麦金塔终于步入了抢先式多任务处理的时代。

总结一下,在麦金塔的发展过程中,多任务功能历经了三个阶段的变化: Switcher MultiFinder Mac OS X

在下一篇中,我将会谈及导致苹果在八十年代后期逐渐衰弱的部分技术上的原因,以及某些牛人们正在酝酿的「下一件大事」