预计阅读本页时间:-
13.3.7 自顶向下与自底向上的实现
虽然最好是自顶向下地设计系统,但是在理论上系统可以自顶向下或者自底向上地实现。在自顶向下的实现中,实现者以系统调用处理程序为开端,并且探究需要什么机制和数据结构来支持它们。接着编写这些过程等,直到触及硬件。
这种方法的问题是,由于只有顶层过程可用,任何事情都难于测试。出于这样的原因,许多开发人员发现实际上自底向上地构建系统更加可行。这一方法需要首先编写隐藏底层硬件的代码,特别是图11-6中的HAL。中断处理程序和时钟驱动程序也是早期就需要的。
然后,可以使用一个简单的调度器(例如轮转调度)来解决多道程序设计问题。在这一时刻,测试系统以了解它是否能够正确地运行多个进程应该是可能的。如果运转正常,此时可以开始仔细地定义贯穿系统的各种各样的表格和数据结构,特别是那些用于进程和线程管理以及后面内存管理的表格与数据结构。I/O和文件系统在最初可以等一等,用于测试和调试目的的读键盘与写屏幕的基本方法除外。在某些情况下,关键的低层数据结构应该得到保护,这可以通过只允许经由特定的访问过程来访问而实现——实际上这是面向对象的程序设计思想,不论采用何种程序设计语言。当较低的层次完成时,可以彻底地测试它们。这样,系统自底向上推进,很像是建筑商建造高层办公楼的方式。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
如果有一个大型团队可用,那么替代的方法是首先做出整个系统的详细设计,然后分配不同的小组编写不同的模块。每个小组独立地测试自己的工作。当所有的部分都准备好时,可以将它们集成起来并加以测试。这一设计方式存在的问题是,如果最初没有什么可以运转,可能难于分离出一个或多个模块是否工作不正常,或者一个小组是否误解了某些其他模块应该做的事情。尽管如此,如果有大型团队,还是经常使用该方法使程序设计工作中的并行程度最大化。