我们已经知道,操作系统是一个极其复杂和庞大的软件系统,操作系统本身以及它所管理的对象都是并发的系统,因而操作系统设计有着不同于一般应用系统设计的特征。那么一个操作系统的设计开发会有什么问题呢?本文就操作系统的设计开发所面临的问题、操作系统的设计阶段、设计目标以及操作系统的结构设计做一些探讨,对操作系统的设计开发问题的探讨,有助于读者全面地理解掌握操作系统的本质。
首先讨论在操作系统设计过程中,面临的主要困难。在操作系统设计的过程中主要困难有:设计复杂程度高、正确性难以保证和研制周期长等问题。下面分别进行简要的分析。
设计复杂程度高
操作系统的复杂程度主要表现在:程序长,有的功能模块包含数百万条指令;接口信息多,各个组成部分之间的信息交换很多,而且错综复杂;动态性强,程序本身包含较多的动态部分;并行性强,不同部分之间可以同时操作。下面我们简要地叙述操作系统可能面临的各种复杂问题。
操作系统是一个很大的程序,现代的UNIX操作系统有超过100万行的代码,Windows 2000有超过2900万行的代码。在操作系统中,各种子系统,如文件系统与内存系统之间的相互作用是不可预测的。操作系统必须处理同步机制,管理同步比管理顺序执行要难得多,而且会产生死锁等一系列问题。操作系统要提供用户之间共享信息和资源的机制,同时还要保证共享的安全。而在应用程序的设计中就不会有这类问题。
一个操作系统存在的时期非常长,UNIX操作系统和Windows操作系统已经存在了数十年。因此,操作系统的设计者必须考虑到将来硬件等情况的变化,并为这些变化做好准备,以支持不断推陈出新的各种I/0设备,同时还要解决可能出现的硬件冲突问题。这些问题在应用程序中是不必考虑的。
另外,操作系统必须有一定的通用性和对以前版本的兼容性,即新版本要支持老版本原有的一些功能。不能因为操作系统的版本上的一点更新,就要求用户把计算机硬件和应用软件也都升级。这样,考虑到操作系统的通用性,对以前的版本兼容性,系统就可能对字长、文件名或其他各方面都有严格的限制。
操作系统的设计者并不详细知道他们的系统在用户中将被如何使用,所以操作系统要具有一定的适应性,来保证每个用户的需要。
操作系统还是防止外部用户入侵的屏障,必须采取措施防止来自外部的入侵,而一些应用软件通常就不必考虑这些问题。
正确性难以保证
操作系统包含的功能成份很多,各种外部设备的接口复杂,导致操作系统源代码的正确性较难以保证。尽管有不少单位在进行软件正确性证明的研究,而且也取得了不少进展,但是从实践上看,操作系统的正确性主要还是依靠软件工程的规范来保证。
由于操作系统是一个大型软件,参与开发的人员的基数也较大。这样也加大了保证整个软件的正确性的难度。
解决这一问题的途径就是发展良好的操作系统结构,采用先进的开发技术、工程化的管理方法,并使用高效的开发工具。
研制周期长
一般的软件研制开发周期包括:需求分析,由用户提供软件的需求,并根据需求制作软件规格说明书;设计者根据软件规格说明书进行软件设计;实现者编写程序,调试、测试并整理各种开发文档,然后提交给用户使用,在应用的过程中不断改进和提高软件的品质。操作系统的研发也基本遵从这样的过程范式,但是因为上述两个原因,操作系统的研制周期比较长。一个操作系统的研制周期一般为5年左右。例如,微软的Windows NT从1988年提出设计目标到1993第一个可用的版本WindowsNT3.1发布经历了将近5年的时间,而它的第一个被广泛应用的版本WindowsNT4.0则到1996年后半年才正式发布。由此对操作系统开发的难度可见一斑。