谈谈嵌入式系统的可靠性(二)
本帖最后由 djyos 于 2012-8-3 15:25 编辑2. 简洁的调度器,提高操作系统可靠性
我们知道,越简洁的东西,越可靠,这是永恒不变的真理。作为操作系统的核心——调度器,更加如此。但简洁,必须以良好的系统架构设计为依据,不能以牺牲功能和性能为代价,更不能因此而降低用户使用的方便性。如果降低了使用方便性,不但会降低用户的使用体验,更重要的是,可能导致应用程序更多的缺陷,进而大大降低用户产品的可靠性,这与“简洁以提高可靠性”的目标,是背道而驰的。djyos的调度器,虽然更加简洁,但实现了更加强大的功能,同时更加易学易用。
传统操作系统中,线程是调度对象,也是程序员编程控制的对象。线程是计算机的实际运行单位,操作系统需要许多状态来获知线程的执行情况,才能有效进行调度。有些操作系统,状态多得让人眼花缭乱,而状态多了,状态机就会变得复杂,代码也随之变得复杂。而djyos是以事件为调度目标的,事件是现实世界的抽象,即人们需要计算机处理的事务,事务只有3中状态:
1、 处理事务的条件未成熟,处于阻塞态;
2、 事务本身准备好,等待计算机处理,属就绪态;
3、 事务正在被计算机处理,属运行态。
既然事务只有3种状态,那么,djyos的事件,自然也只有三种状态,状态少了,调度器自然更加简洁,代码也因此更加简单、更容易保证其可靠性。djyos能实现更加简洁的调度器,完全源于现实世界的特点,丝毫没有因此而降低系统的功能和性能。
Djyos的简洁,还体现在临界资源的保护上,我们知道,操作系统为应用程序提供服务,其本身有着大量的资源是临界资源,在操作时需要保护。
传统操作系统的中断系统设计并不合理,它使得操作系统的临界资源面临两级保护:关调度和关中断,且使应用程序容易出错。关于这点,本系列文章有专文论述,在此不赘述。
我们知道,在RTOS的实现中,临界资源保护方面,要极其小心,一不小心就会出错。而且,这种错误,是属于上帝扔骰子的游戏,刚好碰上并发访问,就出错,没碰上,就正常。出错了,破坏了数据,但如果不立即访问被破坏的数据,也表现不出来,只有天知道知道什么时候bug会找上们来。传统操作系统用关中断和关调度两级控制,在实现时,时时刻刻都要小心,每一个需要保护的地方,都要考虑关中断还是关调度,更甚的是,应用程序也一样,程序员小心翼翼地选择关中断还是关调度。这对有经验的程序员,也许没什么难的,但是,代码不总是由有经验的程序员写的。因此,临界资源保护方面,也是应该尽可能地简化。
djyos得益于中断系统的架构设计,使djyos的临界资源保护更加简洁。Djyos中,中断被分为异步信号和实时中断。异步信号表示不是十分紧急的中断,实时中断用于响应非常紧急的中断。实时中断不允许使用任何系统服务,而异步信号则允许使用所有系统服务。保护临界资源不再分两级,开关调度和开关异步信号是等同的,这使操作系统实现变得简单,应用程序也变得简单,不需要纠结究竟要关调度还是要关中断。同时,更加简单的系统,实现了更加强大的功能:
1、 异步信号中断服务函数允许使用所有系统服务,更加自由且不容易犯错。
2、 实时中断可达到裸跑的实时性。
其实, 操作系统的可靠性和安全性,主要还是来自设计,实现和测试。简单的说来:
1. OS的需求是否明确,djyos的需求是什么?
2.OS的实现是否满足需求,代码和需求之间如何对应?
3. OS的测试是否验证需求正确的实现,覆盖率是多少, djyos有无test suite和覆盖率验证?
4. OS的可靠性设计是否考虑到了,djyos是否支持常用的os可靠性和安全性设计,比如分区设计
页:
[1]