上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.6 编写嵌入式操作系统的方法
要学习嵌入式操作系统原理,则必以编写为目的,立足于如何编写嵌入式操作系统将收到事半功倍的效果。编写嵌入式操作系统分成以下几步。
第一步必须明确目标。例如,C语言当初的目的就是编写系统程序,很清楚什么是要的,什么是不要的,因此成功了。而PL语言,当时为了提供给FORTRAN、COBOL、ALGOL使用者一个标准的通用语言,因为目标不够明确,所以失败了。
编写一个操作系统要考虑以下几部分:
- 定义一个硬件抽象(Define Abstractions),把硬件和软件隔离开。为此必须了解所需要涵盖的不同微处理器的结构、存储器特征和支持I/O的具体种类。
- 提供基本操作(Provide Primitive Operations)。基本操作的主要功能是维持系统的数据结构,并保持一致。既要对下面的硬件抽象负责,也要对上层的调用负责。可以说操作系统的核心就是下面的硬件抽象以及对基本操作的调用。
- 保证隔离(Ensure Isolation)。因为可以有多个用户同时登录或使用操作系统,或者多个任务同时运行,所以操作系统要保证它们在内存和上下文环境上的隔离。但是又要能让它们之间互用一些资源,因此完成时比较困难。
- 管理硬件(Manage Hardware)。当然操作系统是必须管理底层硬件的,如各种芯片和设备,尤其是要允许用户通过操作系统去管理一些常用的的硬件设备,如LCD显示屏、串行接口等。
第二步需要了解编写操作系统的难点。
- 为了支持更多的功能,操作系统程序就越变越大,可是没有用户愿意花很长时间安装一个非常庞大的操作系统。
- 操作系统必须解决并行性,而资源的竞争、死锁等一系列问题都必须考虑。
- 操作系统必须要面对一些恶意用户,如连接网络时想远程破坏系统等。
- 许多设备希望能和别人分享一些资源。
- 操作系统的生命周期相对非常长,如UNIX等还一直在使用。
- 操作系统的设计往往面临一些新事物的挑战,如Windows、UNIX最初都没有设计Email支持。
- 操作系统必须面对各种硬件,即使对硬件不兼容也不能瘫痪。
- 必须兼容以前的系统。
第三步要了解编写嵌入式操作系统的基本原则。
原则1:简单。
原则2:完整。
原则1和原则2就是中国古人说的“增一分则肥,减一分则瘦”的道理。例如,MINIX操作系统最初只设计了三个系统调用:send、recieve和sendrec。send就是发送一个消息。recieve就是接收信息。sendrec是一个优化操作,为了方便在一个内核周期内完成发送并请求一个应答。Amoeba操作系统只有一个系统调用 perform remote procedure call。从简单入手,然后再从能够完整表述所有系统的范例来验证这种设计,从而不断完善,反复推敲,最后才能确定方案。
原则3:效率。
如果一个系统调用不能用有效的代码完成,那么不如不要。所以对设计者的要求是必须知道每条代码的执行效率。例如,UNIX编程者希望lseek要比read调用执行效率高,那么操作系统则必须满足这种效率来设计这两个系统调用。
第四步从接口设计开始。操作系统必须为硬件和用户提供一些处理数据结构和硬件操作的接口。尤其要为一些用户开放权利,让其可以插入自己的驱动。
第五步明确自己要采用的体系结构。体系结构划分详见3.2节。
通过以上5步,嵌入式操作系统的设计基本就成形了,剩下的就是实现的问题了。