预计阅读本页时间:-
13.1.2 设计操作系统为什么困难
摩尔定律表明计算机硬件每十年改进100倍,但却没有一个定律宣称操作系统每十年改进100倍。甚至没有人能够宣称操作系统每十年在某种程度上会有所改善。事实上,可以举出事例,一些操作系统在很多重要的方面(例如可靠性)比20世纪70年代的UNIX版本7还要糟糕。
为什么会这样?大部分责任常常归咎于惯性和渴望向后兼容,不能坚持良好的设计原则也是问题的根源。但是还不止这些。操作系统在特定的方面根本不同于计算机商店以49美元销售的小型应用程序。我们下面就看一看使设计一个操作系统比设计一个应用程序要更加困难的8个问题。
第一,操作系统已经成为极其庞大的程序。没有一个人能够坐在一台PC机前在几个月内匆匆地完成一个严肃的操作系统。UNIX的所有当前版本都超过了300万行代码,Windows Vista有超过500万行的内核代码(全部代码超过7亿行)。没有一个人能够理解300万到500万行代码,更不必说7亿行代码。当你拥有一件产品,如果没有一名设计师能够有望完全理解它时,结果经常远没有达到最优也就不难预料了。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
操作系统不是世界上最复杂的系统,例如,航空母舰就要复杂得多,但是航空母舰能够更好地分成相互隔离的部分。设计航空母舰上的卫生间的人员根本不必关心雷达系统,这两个子系统没有什么相互作用。而在操作系统中,文件系统经常以意外的和无法预料的方式与内存系统相互作用。
第二,操作系统必须处理并发。系统中往往存在多个用户和多个设备同时处于活动状态。管理并发自然要比管理单一的顺序活动复杂得多。竞争条件和死锁只是出现的问题中的两个。
第三,操作系统必须处理可能有敌意的用户——想要干扰系统的用户或者做不允许做的事情(例如偷窃另一个用户的文件)的用户。操作系统需要采取措施阻止这些用户不正当的行为,而字处理程序和照片编辑程序就不存在这样的问题。
第四,尽管事实上并非所有的用户都相信其他用户,但是许多用户确实希望与经过选择的其他用户共享他们的信息和资源。操作系统必须使其成为可能,但是要以确保怀有恶意的用户不能妨害的方式。而应用程序就不会面对类似这样的挑战。
第五,操作系统已经问世很长时间了。UNIX已经历了四分之一个世纪,Windows面世也已经超过二十年并且还没有消退的迹象。因此,设计人员必须思考硬件和应用程序在遥远的未来可能会发生的变化,并且考虑为这样的变化做怎样的准备。紧密地局限于世界的一个特定视野的系统通常不会存世太久。
第六,操作系统设计人员对于他们的系统将怎样被人使用实际上并没有确切的概念,所以他们需要提供相当程度的通用性。UNIX和Windows在设计时都没有把电子邮件或Web浏览器放在心上,然而许多运行这些系统的计算机却很少做其他的事情。人们在告诉一名轮船设计师建造一艘轮船时,却会指明他想要的是渔船、游船还是战舰,并且当产品生产出来之后鲜有人会改变产品的用途。
第七,现代操作系统一般被设计成可移植的,这意味着它们必须运行在多个硬件平台上。它们还必须支持上千个I/O设备,所有这些I/O设备都是独立设计的,彼此之间没有关系。这样的差异可能会导致问题,一个例子是操作系统需要运行在小端机器和大端机器上。第二个例子经常在MS-DOS下看到,用户试图安装一块声卡和一个调制解调器,而它们使用了相同的I/O端口或者中断请求线。除了操作系统以外,很少有程序必须处理由于硬件部件冲突而导致的这类问题。
第八,也是最后一个问题,是经常需要与某个从前的操作系统保持向后兼容。以前的那个系统可能在字长、文件名或者其他方面有所限制,而在设计人员现在看来这些限制都是过时的,但是却必须坚持。这就像让一家工厂转而去生产下一年的汽车而不是这一年的汽车的同时,继续全力地去生产这一年的汽车。