原创 《嵌入式操作系统设计与实现》读后感

2008-12-23 08:48 4733 8 9 分类: MCU/ 嵌入式

    最近一个月阅读了一本书《嵌入式操作系统设计与实现》,书的作者是蓝枫叶。这本书早就出版了,我也关注过一段时间,目前是第二版。我买的时候主要是想看看作者对操作系统的理解以及设计操作系统的一些思路,于是这一段时间对书中的局部章节进行了精读,对作者在短短一年时间之年完成操作系统的开发,并且在交换机上成功运行,感到敬佩。但是,对该操作系统的市场前景以及后期应用持保守意见。因为,阅读本书之后发现hello china的设计思想与Linux存在很多类似的地方。另外,作者在设计嵌入式操作系统的时候可能没有一个非常明确的应用,因此,没有需求分析,没有针对嵌入式应用作特殊的考虑,所以,hello china操作系统的应用可能会受到影响。但是,不管怎么样非常欣赏作者对操作系统深刻的理解,特别是将获取的一半稿费捐献给西部贫困地区的失学儿童。


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


       Hello china的内存管理部分的设计应该算是比较复杂的,其采用了虚拟内存机制,需要MMU的支持。Hello china将系统内存分为kernel memorypaged memorykernel memory只能被kernel利用,并且kernel memory分为两大类,一类为按照4kB粒度进行块分配的内存区域;另一类为可以按照任意大小进行分配的区域。按照4KB粒度进行分配的思路类似于应用于内核的分页机制,任意大小内存分配采用的是Heap算法,该算法在某种应用下会产生内存碎片。Paged memory就是将内存切分成4KB大小的page,并且采用page frame(页框)对其进行描述。Paged memory可以映射给进程的VM,实现虚拟内存机制。Paged frame机制与Linux下的实现颇为类似。系统中的每个进程都会拥有一个virtual memory manager(虚拟内存管理器)对进程所拥有的内存进行管理,VMM是对虚拟内存的抽象,其封装了虚拟内存资源及其属性,并且对虚拟内存的操作方法进行了封装,例如虚拟内存分配方法和释放方法。每个进程的虚拟内存空间都会被分成一些区域(VM area),这些VM区域通过链表或者二叉树联系起来,构成虚拟空间的整体。在hello china中的VM区域对象为virtual area descriptor,该对象对虚拟内存的线性地址空间进行描述。在虚拟内存管理对象结构中还有一个非常重要的对象:页面索引对象(page index manager),该对象封装了虚拟地址与物理地址之间转换所需的数据结构,其中页目录的物理地址(Intel架构的CR3寄存器值)就存储在该对象中。大家知道,如果要实现虚拟内存机制,那么需要页表实现虚拟地址与物理地址之间的转换,转换过程通过MMU的硬件机制来实现。页面索引对象的封装有一个好处,就是增强了代码的可抑制性,页面操作与体系结构相关,如果将这一部分内容封装成对象,那么从逻辑层面上看非常清晰,便于移植。显然,在虚拟内存的整个机制中,重要的管理对象有页面管理管理对象、虚拟内存管理对象和页面索引管理对象。页面管理对象维护着物理页框,虚拟内存管理对象维护着虚拟内存资源,页面索引管理对象维护着虚拟地址与物理地址之间的映射关系。这样的一种机制与Linux中的虚拟内存机制是一致的。


 


       在同步与互斥机制方面,hello china也作了非常多的工作。很久以前就研读过uc/os的代码,这是我最早接触的一个操作系统,而且是一个实时多任务操作系统。在uc/os操作系统中,临界区的数据保护都是通过关中断的方式进行。对于实时操作系统而言是有问题的,如果临界区过长,那么极易导致中断事件的丢失。并且对于单CPU而言,通过关中断的方式可以解决临界区问题,但是对于多CPU而言,关中断是解决不了问题的,除非有能力将所有CPU的中断同时禁止。针对该问题,hello china解决了多CPU下的临界区互斥问题,解决的方法类似于Linux中的处理方法,这种方法具有很强的通用性。IntelCPU都提供了读-访问-写(BTS)指令,通过这些指令可以实现对内存单元的排他访问、修改,因此可以实现某一内存单元的原子操作。在这些CPU指令的辅助下,可以实现spinlock机制,在spinlock的基础上可以实现semaphore的机制。与uc/os等嵌入式操作系统相比,hello china实现了较为完整的同步互斥机制,但是需要CPU硬件支持。


 


       在中断管理方面,hello china的可移植性较好,与Linux具有相同的设计思想。考虑到不同CPU具有不同的中断入口机制,hello china采用统一的中断入口程序作为最底层的中断服务程序。大家知道有些CPU采用了中断向量表机制(Intel CPU),有些CPU没有采用中断向量表机制(PPC CPU),因此,对于操作系统设计者而言必须面对上述问题。所以,对于这些不同架构的CPU,一旦发生中断事件,那么都进入到统一的中断服务程序(IRQ_handle),在IRQ_hanle程序中再根据不同的中断向量调用用户注册的中断服务程序,并且一个中断向量中的中断服务程序可以通过链表的方式管理起来,实现中断共享。PCI总线就是一种中断共享的总线,软件层就需要采用这样的机制。


 


       设备管理是操作系统中较为核心的一块,hello china的实现机制与Linux中有所不同,Linux中通过Kobject对象设备进行了统一管理,构成了非常复杂的设备树,并且实现了设备的即插即用。但是不知道什么原因,hello china中的部分章节中的代码是空的,所以该部分没有细读,有时间再与Linux机制进行比较一下。


 


       Hello china的所有代码都是在windows VC++环境下开发的,并且自己做了一些小工具,使得编译结果脱离windows环境独立运行,可见蓝枫叶在windows开发方面有相当功力,值得学习啊。另外,hello china代码采用C语言编写,面向对象的开发思想,使得代码结构更加清晰,这也是Linux等很多内核代码都具有的一些特点。


 


       社会的发展离不开技术的发展,技术的发展离不开大家的努力,我们应该推崇像蓝枫叶一样的作者,将自己的技术理解记录下来,沉淀下来,并且尽自己最大的努力回馈社会。

文章评论1条评论)

登录后参与讨论

用户377235 2012-1-6 11:51

這個OS拿來做教學, 研究, 玩玩是不錯的。

不過,恐怕僅止於此...x86 的OS 多的很。

如果是嵌入式也可以選 uC/os 或是RT-Thread 有支援ARM 等...

我認同作者對於技術上的努力與分享,

不過, 實際應用時, 還是不要用這套os.比較好...

相关推荐阅读
用户411565 2012-12-18 12:58
我的存储之道博客
大家好,最近一直在做存储方面的工作,所以我在51CTO上专门开辟了一个空间讨论存储相关的问题,喜欢存储的朋友可以可以访问我的存储博客: 存储之道 (http://alanwu.blog.51cto...
用户411565 2012-04-06 21:39
SAS Cable可以有多长?
SAS接口是高端硬盘的主流接口,是存储系统的理想选择。我们知道高速信号的传输距离和传输线相关的,那么SAS作为外部通信接口,其Cable线具体可以有多长呢? 我在网上找到上图所示的眼图测...
用户411565 2012-04-06 21:38
对TRIM SCSI命令的一些分析
前一段时间做了一些对SSD方面进行优化的工作,SSD最大的问题在于长时间使用之后,IO性能会急剧下降。其主要问题在于为了防止“写放大”问题的产生,SSD的firmware采用了类似于log方式的算...
用户411565 2012-04-06 21:35
惊叹!我们的跨洋网络
  每次地质自然灾害的时候,总会伴随着网络的问题,这是由于我们的越洋光纤网络出了故障,受到自然力的破坏而导致断裂。越洋光纤,听起来的确是件非常不可思议的事情,工程量非常的巨大,但正是如此伟大的...
用户411565 2012-04-06 21:33
科学仪器网络模型
科学仪器概述     科学仪器发展趋势 科学是从测量开始的,科学仪器是信息技术的源头,是信息产业的重要组成部分,是现代科学与工业的基石。科学仪器产业的发展关系到国家科学研究实力、生...
用户411565 2012-04-06 21:16
谈谈RAID产品与技术
说起RAID,学计算机的同学马上会说RAID技术简单啊,就是将数据条带化,然后计算一些冗余数据,一并写入磁盘。通过RAID技术一方面提高系统的IO性能;另一方面提高系统的可靠性。单纯从RAID的原...
EE直播间
更多
我要评论
1
8
关闭 站长推荐上一条 /3 下一条