一个64位操作系统的设计与实现
上QQ阅读APP看书,第一时间看更新

1.3 编写操作系统需要的知识

鉴于操作系统是与硬件设备紧密相连的软件程序,所以操作系统的编写自然会涉及软件和硬件两个方面。

1.硬件方面

首先,我们要根据硬件电路掌握处理器与外围设备的电路组成,通俗一点说,就是处理器和外围设备是怎么连接的。当掌握电路组成后,进而可以知道处理器如何控制外围设备,以及采用何种方式与它们通信。对于ARM这类片上系统而言,它们与外围设备的连接方法非常灵活,所以这部分内容必须要掌握;而通用的PC平台的连接方法相对固定得多。因此,编写一个PC平台的操作系统,对硬件电路的掌握要求会比较宽松。

其次,既然清楚了硬件电路的连接,下一步就是阅读这些硬件设备的芯片手册。芯片手册会详细描述芯片的硬件特性、通信方式、芯片内部的寄存器功能,以及控制寄存器的方法。不管何种硬件平台,硬件设备的芯片手册都同等重要,不了解这部分内容也就无法与硬件设备通信。一般情况下,操作系统开发人员会更关注处理器如何与这些硬件设备通信、如何控制它们的寄存器状态,而硬件工程师则会更关注芯片的工作环境、温度、工作电压、额定功率等硬件特性指标。

所以在硬件方面,掌握硬件电路、处理器和外围设备的芯片手册即可。其中,处理器芯片手册会介绍如何初始化处理器、如何切换处理器工作模式等一系列操作处理器的信息与方法,这些知识为操作系统运行提供技术指导。硬件芯片手册会对设备上的所有寄存器功能进行描述,我们根据这些寄存器功能方可编写出驱动程序。

2.软件方面

至于软件方面,只要熟练运用汇编语言和C语言就足够编写操作系统了。

汇编语言主要用于控制和配置处理器,例如引导启动处理器、配置处理器运行状态、进程切换、中断和异常处理程序、设备I/O端口操作等必须操作寄存器的工作,或者是对性能要求极为苛刻的场景,这些工作C语言几乎无法实现。

C语言是编写操作系统的主要开发语言,它以简单、高效、使用灵活等特性深受底层开发人员的喜爱。而且,它在内嵌汇编语言以及与汇编语言的相互调用方面都表现得非常自然,只要遵循C语言的标准方法就能实现这些功能。

除了熟练使用开发语言之外,操作系统作为所有资源的管理者,一些灵活高效的算法也是必不可少的。从基础的链表结构,到树状结构,再到图状结构,操作系统会根据不同的应用场景有选择地使用它们。此外,一些灵活的编程技巧也必不可少。像内核异常处理程序的错误对照表,其原理是在程序容易出错的地方提前写出错误处理函数,并将出错地址和处理地址记录在错误对照表内。当错误发生时处理器会自动捕获错误地址,操作系统会从错误对照表里检索出对应的处理地址,并加以执行。这个过程必须借助链接脚本巧妙设计地址空间,才能组建错误处理对照表。

综上所述,编写一个操作系统必备的知识并不多,只需掌握汇编语言和C语言,能够看懂硬件电路图和硬件芯片手册即可。如果期望操作系统运行得又快又稳,那么还需要在兼顾空间开销和性能损耗的同时适当使用高效算法。所以,编写一个操作系统不难,难的是通过巧妙的方法让它运行得更高效、更人性化。