对Hello China操作系统比较客观的评价

以下内容转自网友的评价,个人感觉比较客观到位,特贴在此处,供朋友们参考。后面有作者的一些点评,因此本文算做原创:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

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

       Hello china的内存管理部分的设计应该算是比较复杂的,其采用了虚拟内存机制,需要MMU的支持。Hello china将系统内存分为kernel memory和paged memory,kernel 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中的处理方法,这种方法具有很强的通用性。Intel等CPU都提供了读-访问-写(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等很多内核代码都具有的一些特点。

转自:http://bbs.ednchina.com/BLOG_ARTICLE_190517.HTM

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

作者点评:这本书是针对Hello China 1.5版本出版的,现在已发展到V1.68版本。相比V1.5,虽然版本号上增加不大,但操作系统的功能却有了非常多的增加,至少是V1.5版本的两到三倍。评论中描述的一些弱点,在V1.68中也做了改进。比如后续版本有一个明确的应用,那就是云终端。后续将写更多的blog介绍Hello China的应用和开发计划,欢迎朋友们关注、支持。

原文地址:https://www.cnblogs.com/new0801/p/6176089.html