刚看到,整理下来,看看那一个人和他的djyos 2009年1月4日,吾当深深纪念之!djyos从2004年开始,已经5年了,始初具雏形, 可以睁开眼睛看看世界了。人们常以10年磨一剑以励其志,然在喧嚣、热闹、浮躁的 IT界,半年出一个产品都闲慢的IT界,5年磨一剑是不可想象的,这5年间要忍受多少 寂寞与孤独。5年来,我几乎用尽了所有的业余时间,白天上班养家糊口,晚上回家 加班培育djyos,没有周末,没有节假日。5年来,唯一的休闲时间,就是每周半天陪 伴儿子去公园了,2004年出生的儿子,是伴随着djyos长大的,5年间,没有花多少时 间陪伴他,我深深愧疚;5年间,夫人给了我无穷的理解和支持,付出了无尽的辛 劳;5年间,我岳父岳母默默地为我照顾孩子,为我解除后顾之忧。在此,谨以我唯 一的财富--djyos,献给我的家人,以及所有关心支持我的人。曾经打算用我儿子的名 字命名djyos,因为他们是一起出生、成长的,但不想让他带上过于浓厚的个人色 彩,只好作罢。 起源 发表于 2009-2-3 20:18 一直不敢公开这段文字,怕别人笑我,笑一个毫无软件经验的硬件工程师居然不自量 力地向linux、vworks、wince等巨头们挑战。然而,计算机界是需要奇迹的,也是孕 育奇迹的天堂,辍学的盖茨能盖起微软王国,21岁的linus能够成就linux的世界, 我、一个多年经验的硬件工程师、为什么就不能撑起嵌入式操作系统的天空!!! 自1996年从西电应用物理系毕业后,到2001年底的5年半时间里,我一直是个单 纯硬件工程师,而且是一个出色的硬件工程师,也有一些得意的硬件作品。在此期 间,软件方面就是用51的汇编写过几个程序,大学学过pascal,看过几天谭浩强的C 语言书,仅此而已。在那之前,对于操作系统,全部经历就是安装并使用过 windows,连做梦都没有想过自己会写一个操作系统出来。2008年,多事的祖国,多 事的秋,毫无征兆地发生了汶川大地震,不能亲赴灾区我在哀伤中继续为djyos奋 斗,也算我对祖国、对灾区人民的支持吧!与地震不可预测一样,2001年无端地发生 了一件注定要改变中国无操作系统格局的事!在那一年的年底,公司有一个项目,要 写一个软件,而我刚刚完成了一个硬件项目,软件方面又刚好人手紧张,于是任务就 落到我这个毫无软件经验的人头上了。这个软件要涉及到另一门很高深的学科的许多 专业知识,这些专业知识我一无所知。当时公司的软件开发管理水平比较低,没有架 构设计、系统设计的说法,一上来就动手写程序,连个设计文档都没有的阶段,也没 有任何流程来控制这些。我实际上负责的是软件系统结构方面的工作,以及写一些界 面、通信、模块管理和底层驱动方面的代码。当时最大的目的,就是设计一个好的结 构,使之能够容纳我写的部分代码和另外一些我一无所知的专业算法程序。抱着谭浩 强的那本《C程序设计》教材,痛苦地写了几千行核心程序,为整个软件(超过2万 行)划分好了模块,设计了模块之间互操作以及交换数据的架子,然后交给专业工程 师添加血肉。不觉中,该软件成了公司最好的软件之一,后来的移植到别的平台,只 花了很少的时间,后来被移植到许多型号的产品上,该部分代码根本无需修改。直至 今天,公司还没有一个有一点规模的软件模块能做到这点,今天的djyos特别强调软 件在相同平台的不同产品间移植,与此有关。我完成这个项目后,就又回到自己的老 本行——硬件设计上继续工作。连我自己都没有想到的是,这个软件的设计思想会成 为djyos的最原始的萌芽。也正因为我是硬件工程师,所以在djyos的设计中,特别强 调并支持软硬件一体设计。 后来,由于要上网络,公司决定用vxworks,于是要把现有代码移植到vxworks, 在购买vxworks后,接受了windriver公司为期2 天的培训,这是我首次接触嵌入式操作 系统,说是培训,其实效果很差,那些操作系统的专业名词对我来说就如同天书。说 是移植,其实就是在人家写好BSP,安装好操作系统的情况下,做一个大任务,把原 来的main函数改个名,做任务入口函数而已,啥也没干。这就是迄今为止我使用实时 操作系统做项目的全部经验。 因这个项目,我对软件产生了一些兴趣,开始看一些操作系统的书,并把邵贝贝 翻译的《UC/OS-II嵌入式实时操作系统》看了一遍,了解了实时操作系统的设计原 理。也就是看书,但没有实际写过ucosii下运行的例程。因与工作无关,也就没有压 力和动力,东瞧瞧西瞅瞅而已。后来,因为要做一个linux 下的PCI卡驱动程序,根据 网上的推荐,买了《LINUX设备驱动程序》和《LINUX内核设计与实现》两本书看, 但写出来的驱动程序老有bug,后来这个项目还被取消了,算是学了点linux的皮毛, 就没有下文了。这就是我做的与桌面操作系统内核相关的软件开发的全部经历。 时间转眼到了2004年,发生了一件注定值得纪念的事,又一个比原来大的软件 项目想让我试试。我当然地以第一个项目为蓝本进行系统架构构思,但不幸的是,这 个项目还没有开始就夭折了。然而,我的设计思想可没有因此夭折,我看到了它的闪 光点,经搜索发现目前并无操作系统使用相同的设计思路(也许我的搜索不全面), 决定用业余时间把它用操作系统的形式实现,并把我的设计思想写成书,于是,就有 了今天的djyos和《都江堰操作系统和嵌入式系统设计》一书。也就有了这5年的苦 旅,说实话,当初是低估了这东西的复杂度和工作量,否则的话,我是否有这种勇气 还很难说。 开发历程是艰难而且曲折的,由于是一个全新的设计思想,现成的东西中没有什 么可参考的,一切都需要自己从头探索,自己缺乏软件经验也成了前进路上的拦路 虎,开始的时候抱的是谭浩强的《C程序设计》,但很快那本书不够用了,根据网络 的推荐,换成《C Primer Plus中文版》了,这本书我电子版和纸版都有。我看书有 个习惯,先找电子版,发现是本好书的话,一定会买一个纸版的,即使从来不看纸 版,以示对作者的尊重。当然,我的书你不需要去买,下载就行了,只要你看,就是 对我的鼓励,如果能在我的论坛上发表书评,或者在臭虫榜上留个脚印,就是对我最 大的奖赏。也因为没有参考系,在开发的过程中,多次大规模地推翻原来的方案,你 现在看到的是2万行代码,408页文档,实际上的工作量,你乘个1.5后就差不多了。 5年怀胎,一朝分娩,让我们共同呵护djyos,期待他能茁壮成长。 2009-2-3 17:49 优秀创新之处 djyos是一个实时嵌入式操作系统,它最大的特征在于它的调度器,是以事件为核心 进行调度的,这种调度策略使程序员可以按人类认知事物的习惯而不是计算机的习惯 来编程。 普通操作系统中,调度是以线程为核心的,事件被作为线程的数据,标榜为“事 件触发”的软件模型,也是由线程在一旁候着,待特定事件发生时线程恢复运行并把 它作为输入数据加以处理。 以事件为核心的调度,则像设备和内存一样,把线程虚拟机作为处理事件所需要 的资源看待,当某事件需要处理时,分配或者创建一个线程虚拟机给该事件,并启动 该线程虚拟机处理事件。 除此之外,djyos还拥有一个快速高效的内存分配系统,从堆中分配任意大小的 内存,只要有内存可供分配,都能在确定的时间完成,而且还有一定的内存泄漏 功能。 djyos的泛设备管理系统也颇具特色,它不但是管理硬件的利器,还刻意为软件 模块间交换数据而优化。 djyos特别强调从技术角度上支持项目子团队的划分,以及确保子团队可以独立 开发。 都江堰操作系统目前包括以下模块: 抢占式多事件调度系统 内存管理模块 内存池管理模块 资源管理模块 中断管理模块 锁(含信号量和互斥量)模块,支持优先级继承 泛设备管理模块 文件系统模块 含擦除平衡的flash文件系统驱动模块 看门狗模块 [ 本帖最后由 djyos 于 2009-2-3 19:55 编辑 ] 投票标题: 你愿意参与都江堰工程吗? 多选 : 最多可选 9 项 [参与投票的会员] 不 愿意 参与测试 参与完善内核 参与移植或编写网络模块 参与移植或编写gui 参与移植或编写其他应用模块 帮助把djyos文档和注释翻译成英文 把djyos移植到新的硬件平台 帮助宣传推广djyos 命名由来 都江堰得名于千年水利工程——都江堰水利工程之名。 都江堰创建于公元前256年左右,距今已有2250多年的悠久历史,是世界上年代 如此久远而唯一留存、以无坝引水为特征的宏大水利工程,建堰2260多年来经久不 衰,而且发挥着愈来愈大的效益。取名都江堰,是因为这个名字最能体现djyos的设 计思想和技术特征。李冰父子修建都江堰时,充分利用水之善德,因势利导,使水利 工程与自然环境浑然一体,老子云: 上善若水。 水善,利万物而有静, 居众人之所恶,故几于道矣。 ………… 水润万物而无争,水载万物而无取,此情此状,正是一个嵌入式操作系统应该具 备的特质。一个嵌入式系统,仅执行操作系统是毫无意义的,真正展示嵌入式产品魅 力的是运行在操作系统之上的应用程序。操作系统为编写应用程序提供恰到好处的支 持,但不喧宾夺主,程序员可以自由自在地编写程序,获得操作系统支持而又几乎感 觉不到操作系统的存在。总之,操作系统应该是一个舞台,应用程序员才是导演、演 员,优秀的操作系统应该使程序员能够地集中精力地编写剧本,心无旁骛于舞台演 绎。 都江堰能够成为千年工程,其本身工程质量是不容质疑的,而能够成为唯一留存的同 类工程,就不是单纯工程质量能解释的了,难道其他工程都是豆腐渣不成!都江堰善 用水德,无坝引水,利用水势自然分流,泄洪灌溉各得其所,利用水力就地飞沙,保 证水流永不阻塞。都江堰治水而不制水,利导而不阻截,是其千年运行不辍的真谛! 水处逆境而拂逆,积弱之中蕴涵无穷力量,顺水之势治水则功利千秋,逆水之德制水 则寸步难行。其实,软件设计何尝不是这个道理,正所谓伪科学千百种,真科学道相 同!
望。就像都江堰一样,操作系统作为软件运行的平台,仅保证自身的健壮性是不够 的,帮助系统设计师正确地构建软件,帮助应用程序员编写无错的代码,才是操作系 统的真正生命力所在,也是djyos的核心价值所在。djyos通过对各功能模块的取舍, 各子系统使用方法的精心设置,给用户微言春秋式的建议,作者从水德中获得感悟, djyos系统具有如下特征: 1、 djyos顺应应用程序运行特征,它的调度算法看似无所作为,实际上又无所不 为;它给应用程序提供必要的支持,但不会企图控制和监视应用程序,强调应用程序 的自主运行;在多模块的应用程序中,djyos也不支持任何模块干涉别的模块的运 行。在djyos支持下,代码和数据就象流水一样,操作系统恰似都江堰,应用程序在 其引导下,周而复始,运行不辍。 2、 djyos顺应其使用者——人认知事物的自然思维模式,它简洁明了,易于学习 和使用。djyos直接以事件为核心进行调度,而不是以进程和线程为核心,这种调度 方法符合人们“有事就做,无事就坐”的习惯。 3、 djyos是个弱控制操作系统,它对软件模块间的数据流动和代码执行过程象水 一样加以利导,但绝不筑堤设桩。
1、ucosii没有driver管理模块,而djyos有完备的泛设备管理模块。 2、ucosii没有完整的内存管理,它只提供djyos很小的一部分内存管理功能。 3、ucosii不支持轮转调度,它要求所有线程必须有不同的优先级。 4、ucosii不支持优先级继承,而djyos可以支持多重优先级继承。 5、ucosii没有完整的中断管理架构,而djyos有完整、科学的中断管理架构。 ………… djyos的特征,在置顶的“项目介绍”帖中有说明。 没有做与linux的对比,有三方面的原因: 1、djyos不是针对linux的优化。 2、djyos与linux本质是不一样的,djyos可做实时系统,linux不是实时系统。 3、最重要的是,我本人对linux了解不深,不敢乱比较。
日本也没有自已的OS,但它有自已的Embed OS ,叫uT。事实上我也正好想做一个 Embed OS,没想DJY当了先驱了... 发表于 2009-2-11 09:36 国内有些人整天喊着要做国产的OS,只是雷声大、雨点小,最终也没见到什么成 果。而djyos直接拿出来了自己倾五年时间的力作。很是佩服。 如果以后时间允许的话,愿意协助djyos兄做一些力所能及的事情。
随着嵌入式系统的日益复杂化,嵌入式现在系统越来越成为嵌入式产业的核心,君不 见,而在我们国家,嵌入式操作系统几乎是个空白,2008年的十大嵌入式企业以及中 国电子信息产业100强中,竟然没有一家是从事嵌入式操作系统的,就连有一个自主 操作系统作为副业的都没有。这既是中国嵌入式行业的悲哀,也是对中国工程师的鞭 策。 然而,实时嵌入式操作系统市场是如此成熟和完整,新操作系统如要从中分一杯 羹,无异于在钢板上钉钉子。即使如此,仍然有不少人前仆后继地往里挤,在前人不 断的“壮烈牺牲”中,我看到的是机会与挑战并存。嵌入式操作系统是一个细分市 场,所以不会形成桌面系统寡头控制的局面,在桌面系统上,是windows 和unix系操 作系统双寡头局面,这种情况绝不会出现在嵌入式领域。这就给了后起之秀一个机 会,只要你的产品好,工程师认同,你就有机会。嵌入式操作系统的目标用户是工程 师,而工程师是一个善于学习的群体,容易接受新事物的群体,这也是djyos的机 会。 都江堰操作系统就在这样的环境中,应运而生,我们有理由期待它能脱颖而出。 分析一下那些壮烈了的操作系统,我们要吸取的教训很多: 1、没有创新就没有生存之本。看许多发布的操作系统,不外乎就是现有操作系统理 论的简单复制,一上来就给人“又一个操作系统”的印象,根本吸引不了人们的眼 球。而djyos则不一样,在构成嵌入式操作系统的几个重要方面:调度器、中断管 理、设备管理、资源管理等方面,都又非常突出的创新,甚至是理论创新。尤其是在 调度器方面,可以说是彻底革新。 2、要贴合用户需求,不能片面强调单项性能。看许多发布的操作系统,在宣传自己 的优异性时,不外乎上下文切换时间多么短、占用系统资源多么少、功能模块多么 多、线程间通信手段多么丰富。有或者说自己的C语言率多么高,移植需要修改的代 码行多么少,等等!整个就是闭门造车,根本没有从用户的角度考虑,不知道代码工 程师需要什么,也不知道系统工程师需要什么,更不知道产品经理和研发经理需要什 么。djyos不同,他本来就是产品研发工程师写出来的操作系统,它充分考虑到用户 的需求,他从技术角度,协助产品经理(研发经理)组织项目团队,协助系统工程师 从软硬件联合设计的角度设计系统架构,协助代码工程师写出移植性和一致性都很高 的代码。 3、要戒除IT界的浮躁,有许多操作系统发布时,还只是一个简单的内核,连基本的 文档都没有,代码也是乱哄哄的没有注释。用户拿到手里,根本就云里雾里。要知 道,你一个新生事物,用户是不会有耐心等你成熟的,即使你真的能够成熟,在你成 熟的过程中,用户早已审美疲劳了。一个新生的操作系统,应该一上来就给人一种令 人耳目一新的冲击,才能是用户有兴趣往下了解你。djyos系统在发布时,就已经是 一个完整的操作系统,而不是一个简单的内核,而且带有408页的文档(还是有意压 缩篇幅之后的),写这个文档花的时间,远比写一个内核要长,近2万行的代码,有 约1/4是注释。 2009-2-3 22:47 许多人认为,可移植性就是软件从一个平台换到另一个硬件平台,仍然能正常运行的 能力。这种说法是很笼统的,我们在细分一下,其中至少存在以下几个层面: 是否需要修改代码。 是否需要修改配置。 是否需要重新编译。 是否能够运行。 运行的结果是否正确。 听过有人说:C语言编写的代码,哪有移植性的问题。这种看法谬之大矣,等于 说:我用拼音输入法写文章,所以我的文章是可移植的。关于C语言程序的可移植 性,我的文档《都江堰操作系统与嵌入式产品设计》的第16章有详细的说明。用标准 c语言写的程序,只能保证在支持标准C的编译环境中成功编译,不能确保能够正确 运行。 比如下面这段代码,用指令实现10uS延时: for(i=100; i>0; i--); 该语句无论在什么平台下,它都可以编译、运行,但结果可能不正确。具体延时 量,与CPU的速度、编译器的效率、编译器的优化级别等都有关系,我们称之为” 耦合“,在《都江堰操作系统与嵌入式产品设计》的第11章论述了什么是耦合以及如 何解耦。含上述代码的软件,在移植时,必须修改代码。一种改进的方法是,把100 定义为符号常量,如下: #define cn_10us 100 for(i=cn_10us; i>0; i--); 这种方法只不过增加了代码的可读性,并降低了代码修改的工作量而已,本质上 还是要修给代码并重新编译。djyos提供的改进方法是,有操作系统提供几个共享变 量,他们是在操作系统初始化过程中被赋值的: 1. uint32_t u32g_ns_of_u32for; 当 delay_var是 32 位无符号整数时,每个循环消耗的纳秒数。 2. uint32_t u16g_ns_of_u32for; 当 delay_var是 16 位无符号整数时,每个循环消耗的纳秒数。 3. uint32_t u8g_ns_of_u32for; 当 delay_var是 8 位无符号整数时,每个循环消耗的纳秒数。 4. volatile uint32_t u32g_delay_10uS; 用 32 位无符号数做循环变量,延时 10uS 需要的循环次数。 在si模式下,若用下列语句做指令延时,可确保延时时间是100微秒。 volatile uint32_t delay_var; for(delay_var =100000/u32g_ns_of_u32for; delay_var >0; delay_var --); 然而,这只是djyos解除软件与CPU运行速度之间耦合的一个小技巧而已,djyos更 着重的是从系统架构入手,帮助项目经理和开发经理组织团队,帮助系统架构师理清 组件之间数据流动和代码互动之间的关系。
见的情况是,拿一套已经有了型的代码到处修改客户化做新项目,或者依据市场需求 把产品改一改,添加一点新的需求,去掉一些老的功能,做系列化型号。广义地,就 一个功能组件来说,它的运行环境整个由硬件、操作系统、以及应用项目的其他组件 共同组成。应用项目某组件的变化,也是运行环境的变化,也可能需要移植,而且这 种移植更加广泛,更加受项目经理的重视。djyos系统更加关注的是广义的移植,从 这个角度,即使硬件和操作系统部分不改变,某组件的运行平台的数量,也跟使用该 组件的衍生产品型号一样多。如果不注意广义平台的可移植性,一个组件往往会在这 个型号中好使,那个型号中就不行了,按下葫芦浮起瓢,防不胜防,烦不胜烦!最后 造成的是,实现相同功能的组件,在不同的衍生型号中就是不一样。日子久了,这样 的东西就会充斥企业的产品中,并与企业历史相结合,企业历史留下来的人和流下来 的势力格局有限制了改进问题的机会,许多企业里面软件版本繁多而且凌乱,难于管 理,就是这样造成的。解决这个问题,需要一个优秀的系统设计师,在项目设计之初 就确定一个良好的系统架构,djyos从技术角度上,对项目经理和系统工程师提供帮 助,为新项目的开发和老项目的改造都提供支持。试举例如下: 某工程由多个团队协同开发,某中断的初始化以及ISR代码由团队B负责,另外 一个组件由团队A开发,组件A有一个线程需要阻塞等待某中断发生。那么,在传统 模式下,团队A和团队B之间在技术上,至少有一个信号量在联系,线程等待信号量 而中断释放信号量。别看这个简单联系,它造成的后果就是两个模块互相关联(耦 合),中断ISR中至少有一句是跟组件A相联系的,线程和ISR之间至少有一个共享变 量——信号量句柄!ISR和线程之间至少失去了独立的命名空间,即使你不用共享变 量,那么,ISR至少需要提供一个手段,使线程能够把信号量的地址告知。总之,两 个团队之间不可能再是完全独立的关系。而使用djyos 的异步信号同步技术,则团队 A可以根本不知道团队B的存在。 多团队共同开发的项目中,项目经理最希望看到的是,两个团队之间各自完成自 己的任务,各自的任务之间不互相依赖,这样两个团队之间的开发进度就可以异步安 排。而如果两个组件之间有耦合的话(就像刚才的例子,通过信号量耦合),至少有 一些团队协调工作要做。而djyos中,两个团队是完全独立工作的,独立开发、独立 编译、独立加载运行。 djyos在许多地方体现了协助项目经理”孤立“团队的策略,今天先写到这里 吧,下次继续谈。 2009-2-3 22:45 许多操作系统夸耀自己的可移植性时,爱这样说: “超过xx%代码由C语言编写,只有xx个函数是汇编,移植时只有xx个函数需要 修改”。他们所关注的不外乎是操作系统本身从一个硬件平台移植到另一个硬件平台 的难易度,这根本就是舍本逐末的提法。试问,一个含嵌入式系统的产品中,操作系 统重要还是应用程序重要?我们说嵌入式操作系统是嵌入式产业的核心,是针对整个 产业来说的,毕竟,操作系统的装机量远大于任何一个运行于操作系统的应用程序。 而对具体产品来说,则应用程序无论从哪个方面讲都远比操作系统重要。对一个企业 来说,尤其如此,企业可能有非常多的衍生产品,他们同同一份操作系统拷贝,或者 有许多产品系列,系列之间的操作系统也只是稍有不同。他们花在移植操作系统上的 时间,远小于应用程序的工作量,甚至可以忽略不计。因此,操作系统的可移植性, 应该把重点放在协助应用程序移植上,那才是可移植性的精髓所在。 djyos在这方面是非常出色的,举个例子,如果某企业有两个相似产品,产品L不 需要显示界面,产品H需要显示界面,其他功能相同,在的djyos下,你可以轻易做 到: 1、把软件分成两大块,一块是显示部分代码,称为模块A,另一块是显示无关 代码,显示无关代码完成产品的整体功能,调用显示部分的功能实现界面显示,称为 模块B。 2、如果是si模式,A+B一起编译就是产品H,单独编译B就是产品L。编译产品L 时连模块B中跟调用显示功能的代码都无需修改。 3、如果在dlsp模式下,则把模块A编译成A.out,模块B编译成B.out,把A.out和 B.out一起copy到autorun目录下就成了产品H,单独copy B.out就成立产品L。 djyos的各模块设置,无不是围绕方便应用程序移植来设计,多事件调度器、泛 设备组件、异步信号同步功能、事件和事件类型同步、应用程序模块加载器等,都为 此做了许多考虑。今天很累了,暂不细说,在接下来的一段时间里,我将系列化发 帖,讲述djyos中如何协助应用程序可移植,以及软件可移植性与可靠性之间的关 系。 特别提示 首页 -> 特别提示 现在很多人都盯着我的操作系统看,但是,由于djyos的核心概念与现有操作系 统都不一样,即使我有丰富的注释,但不看书还是很难看明白的。所以,希望想要了 解djyos的朋友们,先看看我的书《都江堰操作系统与嵌入式系统设计》,在“下 载”页面共享着的。这本书是我多年经验之集成,融汇了许多软硬件系统架构设计方 面的思想,以及设计可移植的和高可靠性嵌入式系统的基本方法,不仅仅是djyos的 文档。 djyos的定位: 1、djyos是一个嵌入式实时操作系统,没有考虑在通用计算机/服务器上与windows、 linux、unix竞争。 2、在嵌入式领域,djyos要与非实时操作系统如linux、wince竞争,以及实时操作系 统如vxworks、qnx等竞争。 3、djyos的目标,是改变中国无(有影响力的)操作系统局面,在不久的将来,世界 上流行的操作系统中,有一个来自中国。 下载,http://www.djyos.com/bbx/136243-136243.html 内容:源代码V0.2.0都江堰操作系统与嵌入式产品设计V20090112 电路图 pdf格式 |