搜索
bottom↓
回复: 26

TI演讲活动结束了,整理了一下讲稿

[复制链接]

出0入0汤圆

发表于 2009-11-28 22:18:29 | 显示全部楼层 |阅读模式
为期一个月的TI MCU演讲活动结束了,这里是部分讲稿,删掉了赞美TI产品的部分,免得有做拖之嫌,也省的大家肉麻。既然是合作,赞美一下人家的优点,也是应该的嘛。
特向各地参与djyos演讲的志愿者们表示感谢,非常感谢。

1.        都江堰工程介绍
都江堰工程是国内发起的开源操作系统。包括都江堰操作系统和一本配套的书《都江堰操作系统与嵌入式系统设计》,代码和书全部开源。
在2009-01-04日正式发布前,djyos已经由开发者闭关开发了5年。在喧嚣、热闹、浮躁的IT界,半年出一个产品都闲慢的IT界,闭关5年,真可谓是“5年磨一剑”。
djyos已经移植到stelliars上,在不包含文件系统和图形界面的情况下,只需要不到30Kflash和不到10Kram就可以运行。
djyos的定位和目标:
1.djyos 是一个嵌入式操作系统,没有考虑在PC/服务器上与windows、linux、unix竞争。
2.在嵌入式领域,djyos 既要进入非实时操作系统领域;又要涉足实时操作系统领域。
3.djyos的目标,是改变中国没有有影响力的操作系统局面,在不久的将来,世界上流行的操作系统中,有一个来自中国。
djyos的应用范围将涵盖从单片机到高性能的移动计算设备,涵盖实时应用和通用计算。djyos将有三个分支:
djysi分支:这是面向单片机的分支,全部应用程序代码和操作系统编译在一个可执行文件中,不能动态加载,群星的M3上运行的就是这个版本。
djydlsp分支:这是面向复杂实时系统的分支,使用单一寻址空间,但支持动态加载应用程序模块。用在资源比较丰富的嵌入式系统上,实现复杂的实时控制系统。
djymp分支:这是面向通用嵌入式计算分支,适合与移动计算,比如手机、pda等。
为什么命名为都江堰:
可能有人会问,都江堰这个名字怎么来的,为啥不命名为长江长城黄山黄河?
都江堰是2000多年前全世界唯一留存的大型水利工程,欲走向世界的、来自中国的操作系统,取一个来自中国的世界性工程为名字,岂不顺理成章?
都江堰水利工程可靠稳定,无坝引水,都江堰工程作为一个舞台,让水成为演员、导演,演绎了成都平原千年富饶的大戏,djyos愿效法先人,稳定可靠的djyos,作为程序员的舞台,让程序员演绎出灿烂多彩的嵌入式产品世界。


2.        djyos系统构成
djyos目前由以下模块组成,由于时间关系,不能一一介绍,下面我给大家介绍一下djyos最有特色的事件调度。

抢占式多事件调度系统
内存管理模块
内存池管理模块
资源管理模块
中断管理模块
锁(含信号量和互斥量)模块,支持优先级继承
泛设备管理模块
文件系统模块
含擦除平衡的flash文件系统驱动模块
看门狗模块
即将发布的GUI模块


3.        djyos事件调度系统
在座的诸位,即使没有用过VC、VB、CB等可视化编程工具,也至少听说过吧。
让我们来看看CB下的一个编程场景:
先优雅地拖一个按钮放到桌面上。
为鼠标点击该按钮的事件编写处理函数。
编码工作就这样完成了,很简单很强大吧。
接着编译、执行,用鼠标点击该按钮,就会执行处理函数。
可视化编程工具为什么要这样设计呢?是因为现实需要,这样能提高程序员的生产力。
为什么这样会提高生产力呢?因为这样很直观,计算机处理的是现实世界中的具体任务,刚才所述的点击事件,就是一个具体任务,程序员只与程序需要处理的具体事件打交到。而不需要跟晦涩难懂的线程、进程打交道。
敲破寒冰,冰面的海水深不见底,我们穿上潜水服,看看VC是怎样实现的。原来,有一个或多个线程一直在后台候着,等待操作系统弹出鼠标点击事件。操作系统则负责检测并弹出事件,潜伏的线程一旦收到鼠标点击事件,便被唤醒执行。我们可以看到,无论该按钮是否被点击,甚至一辈子都不点击,该线程依然要占用系统资源。
经过VC等可视化编程工具包装后,程序员只与程序需要处理的具体事件打交到,其编程过程完全与线程、进程等无关。
我们再来看看,VC、VB等是在PC上的工具,在嵌入式编程中能不能得到这种便利呢?我们知道,wince、嵌入式linux等是可以实现的,但什么样的平台才适合运行wince、嵌入式linux这些操作系统呢?单片机可以吗?TI的M3 CPU可以吗?过去,不可以,今天,我要告诉大家一个好消息,有了djyos,可以了。
传统操作系统,需要在VC之类的工具支持下,才能够做事件触发式编程,究其原因,是因为操作系统是按照线程调度的,必须经过开发工具的包装后,才能转换成事件触发。我们可以看到,计算机处理的是事件,人们关心的也是事件,为什么操作系统不能以事件为核心进行调度呢?回答这个问题,djyos应运而生!
   
(原文件名:事件调度.jpg)

    djyos的调度是基于事件的,这是djyos与传统操作系统最大的区别。左上图是从传统操作系统抽象出来的,传统的、基于线程调度的OS,无论是简单的OS还是复杂OS,均可以用该图表示。我们知道,创建线程需要分配线程所需的资源,其中栈是必备的资源。左上图中,无论是初始化创建线程,还是线程执行过程中创建线程,都需要当前执行的线程为新线程分配资源。右图中,无论什么时候弹出事件,只把事件控制块加入到队列中,除非新事件的优先级足够高,需要立即处理,否则弹出时不会分配或创建线程,直到该事件应该被处理的时候才创建或分配线程。
看起来,除了不能从中断处理函数中创建线程外,左上图与右图有很大的相似性,其实不然,传统OS是不会频繁地在线程执行过程中创建新线程的,为什么呢?因为创建线程时必须为线程分配内存,分配内存的操作可能导致阻塞,而被阻塞的却是当前正在执行的线程。大家注意了,是新线程缺乏内存资源,当前线程并不缺乏资源,但被阻塞的却是不缺资源的当前线程,这是不合理的。如果新线程的优先级低于当前线程,那当前线程就冤了,因为一个低优先级的线程,而导致高优先级线程阻塞,这在RTOS中是个灾难;即使不被阻塞,创建线程是一个很费时的操作,高优先级线程执行过程中,花大量时间用于创建低优先级的线程,也是不合理的。所以,传统OS的线程,总是在初始化阶段创建,极少在运行过程中创建。
所以,在传统操作系统下做事件触发式编程,需要在初始化阶段创建绝大多数线程,只有很少情况会在线程运行过程中创建新线程的。所以,如左图下显示,传统操作系统的事件触发式编程,不能在事件发生的时候才创建线程,而是只能在初始化是创建线程并启动,启动后等待事件发生,事件发生将唤醒线程,事件处理完后又进入休眠,如此周而复始。而无论事件是否会发生,线程肯定会占用资源。比如一个uart通信程序,初始化创建并启动线程,等待uart接收事件发生后唤醒处理接收到的数据,即使串口线没有插,该线程也必须占用资源。另外,如果事件频繁发生,比如uart通信很频繁,也只能由初始化时创建的那个线程一点一点处理,如果初始化时只创建了一个线程,即使你拥有双核甚至多核cpu,也只能干着急。在线程调度模式下优化多核编程,是很复杂的技术,已经发展成了一门学科,这里不打算探讨。
而djyos的事件为核心调度则没有这个问题,如果新弹出的事件优先级不够高,根本就不会为他创建线程。传统操作系统中,事件发生后,操作系统把事件作为线程的资源交给线程处理,而djyos中正好相反的,事件发生后,操作系统把线程作为处理事件所需要的资源分配给事件。这使得djyos能够更加优化配置计算机的资源,还拿uart通信的例子,如果串口线没有连接,uart端口上就不会有数据,则根本不会弹出该事件,也就不会占用任何资源。如果频繁通信,就会频繁弹出事件,若计算机有多个cpu核,则自然而然地会把事件分散到不同的cpu核上,程序员根本不知道线程为何物,就能进行优化的多核编程。在这里,cpu核实际上也是当作解决事件所需要的资源而存在。
传统操作系统下事件触发式编程,需要像VC类似的工具支持,在高性能平台上才可以,而djyos则可以在只有        几十K内存的单片机上,依靠文本编辑器完成;传统操作系统下多核编程复杂得要发展成一门学科,而djyos则几乎无需用户过问,这就是djyos的巨大优势。
现代计算机已经进入“ubiquitous/Pervasive Computing”时代,即普适计算。在普适计算时代,触手可及的计算产品里面也包含着触手可及的计算机程序,这些程序由大量的嵌入式程序员编写。设计这些产品需要大量的软件工程师,这使得嵌入式程序员的队伍迅速增大,新增的程序员,可能来自各行各业,他们原来在各自的行业中,可能都是非常了不起的专家,比如化工专家、医疗专家等。这些不同领域的专家,却未必是计算机领域的专家,让他们去掌握晦涩难懂的线程技术并灵活应用,恐怕要花费不少的人才培养成本,而使用传统的操作系统开发嵌入式产品,不理解这些复杂的概念根本就寸步难行。djyos操作系统不要求程序员操纵线程和进程,程序员只需把需要计算机处理的任务划分为一个个事件类型,并为各种不同类型的事件编写独立的事件处理函数,并且把它登记到系统中就可以了。当事件发生时,发现(检测到)该事件的模块只要告诉操作系统“某类型事件发生了”,二处理该事件的程序员,也只需要编写事件处理函数,不需要管劳什子的线程。从这个角度,djyos降低了程序员培训要求,客观地为企业节约了人力资源费用。

再回头看看VC下的编程过程:
放置一个按钮——相当于djyos的登记事件类型
编写鼠标点击处理函数——相当于djyos的编写事件处理函数
不同的是,传统OS要通过VC等工具转换为线程操作,才能为操作系统接受,而djyos则直接就是按照事件调度的,可以用普通文本编辑器完成。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-11-28 22:47:47 | 显示全部楼层
我顶一下.

其实我还是比较支持楼主的.

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

不过建议楼主多写些和 uCOS , vxworks 等嵌入式操作系统的区别, 少些 和 linux , wince 的比较吧.

感觉楼主老是避开关键的地方.

出0入0汤圆

 楼主| 发表于 2009-11-29 07:45:14 | 显示全部楼层
呵呵,这个演讲中我其实没有刻意跟任何具体操作系统比较,我是做传统操作系统的调度方法和djyos调度方法做理论对比分析。

讲稿中有很大篇幅讲VC,不能说我跟VC比较吧。

再说,做对比就不是这次演讲的主题,这么短时间,我只想尽可能把事件调度的好处讲清楚,跟传统线程调度的区别降温清楚。

出0入0汤圆

发表于 2009-11-30 10:05:04 | 显示全部楼层
感觉楼主左右两个图好像可比性不大,这两个不是一个层次的东西啊
楼主想表达传统线程调度不能管理多核系统?还是事件调度比线程调度更牛?

事件调度是好东西,将硬件层与应用层开发分离,大大简化对开发人员的底层能力要求
盖茨靠它一统PC市场几十年,旗下开发人员无数,但为什么仅限于PC市场?

如果大家尝试下在WINDOWS环境下,用事件队列技术编写一个硬件高速通信的程序,就知道为什么了
否则在WINDOWS下写游戏的人,也不会放着简单的WIN-API不用,非要搬出生涩麻烦DirectX技术
如果说“都江堰OS”可以降低了程序员培训要求,我相信;
如果说基于事件队列的OS具有超强的稳定性,我有点疑问。

我想表达是:并不是任何环境下都是抽象程度越高越好,如同C与C++各有各的用途
只有既保证底层的稳定可靠,又保证上层应用接口的适度抽象,才能设计出好的系统,而往往设计者不能二者平衡兼顾

以上只是纯粹技术层面的个人看法,不含任何不相信国产OS的意思
最后向楼主表达一下敬意,毕竟国人自己潜心做OS的人不多,向楼主学习!

再次建议楼主,是否能把都江堰OS移植到AVR32?UC3系列或AP7000系列都行

出0入0汤圆

发表于 2009-11-30 10:23:30 | 显示全部楼层
感觉楼主左右两个图好像可比性不大,这两个不是一个层次的东西啊
楼主想表达传统线程调度不能管理多核系统?还是事件调度比线程调度更牛?

事件调度是好东西,将硬件层与应用层开发分离,大大简化对开发人员的底层能力要求
盖茨靠它一统PC市场几十年,旗下开发人员无数,但为什么仅限于PC市场?

如果大家尝试下在WINDOWS环境下,用事件队列技术编写一个硬件高速通信的程序,就知道为什么了
否则在WINDOWS下写游戏的人,也不会放着简单的WIN-API不用,非要搬出生涩麻烦DirectX技术
如果说“都江堰OS”可以降低了程序员培训要求,我相信;
如果说基于事件队列的OS具有超强的稳定性,我有点疑问。

我想表达是:并不是任何环境下都是抽象程度越高越好,如同C与C++各有各的用途
只有既保证底层的稳定可靠,又保证上层应用接口的适度抽象,才能设计出好的系统,而往往设计者不能二者平衡兼顾

以上只是纯粹技术层面的个人看法,不含任何不相信国产OS的意思
最后向楼主表达一下敬意,毕竟国人自己潜心做OS的人不多,向楼主学习!

再次建议楼主,是否能把都江堰OS移植到AVR32?UC3系列或AP7000系列都行
————————————————————————————————————————————————————————
最好能像ffxx搞个实际的应用案例出来~~
这样推广起来比较容易

出0入0汤圆

 楼主| 发表于 2009-11-30 11:58:37 | 显示全部楼层
谢3楼4楼。
事件调度相对于线程调度,实际上减少了一个转换环节,而且程序员不能直接操弄线程,理论上应该更稳定。我同时实现了接口更抽象,底层更简单,更简单意味着更稳定,鱼和熊掌兼得。独特的中断系统设计,使得临界资源的保护方面,也比传统OS简单得多,这可是最容易出问题的地方。

线程调度被ms、linux、unix等操作系统使用了几十年,但流行的东西,并不代表技术上最正确,商业因素也很重要,流行几千年的“地心说”不也被推翻了。

姑且不论事件调度是否更优越,集中无数精英打造的windows、linux、unix等,姑且不论这些精英们是否想到了事件调度,实际上早已失去了使用事件调度的机会,因为他们无法面对海量应用程序因不兼容而失效。

djyos作为新事物,同样面对可用程序资源不足的问题,所以我首选实时控制为突破口,因为实时控制程序基本上是自己写的,只要你提供了gui、文件系统、tcp协议栈、usb驱动,外来代码就很少了。

至于实际案例,容我点时间吧,虽然djyos起步于2004年,但由于是一个完全创新而不是仿制的作品,直到今年才基本成型。

关于3楼提到的Directx,稍微透露一下djygui的设计,djygui中,直接使用统一的djygui api,无需专门的技术,从框架上直接实现Directx的效果。

出0入0汤圆

发表于 2009-11-30 12:30:23 | 显示全部楼层
貌似

传统OS是 线程管理事件,(先有线程,然后线程等待事件并处理)
DJYOS是  事件管理线程,(先有事件,然后事件分配线程并处理)

出0入0汤圆

发表于 2009-11-30 13:47:11 | 显示全部楼层
继续支持,要有实际的例子引导大家逐步进入才容易获得认可。

出0入0汤圆

 楼主| 发表于 2009-12-2 14:58:31 | 显示全部楼层
楼上不要以我的出身给djyos下结论嘛,以此理推之,斩蛇屠狗的刘邦为首的汉军,秃头讨饭的朱元璋率领的明军,也绝对只是乌合之众,岂有得享天下之理?

出0入0汤圆

 楼主| 发表于 2009-12-2 17:29:52 | 显示全部楼层
楼上能把我没搞定的“大容量SD卡启动6410”问题搞定,应是一个软硬兼修的不凡之辈,从你在我主页论坛的发言看,应该是对djyos有所了解的,不知何出此言。
这是在Ti连续讲了多场的讲稿,若真如你所言,不但我的智商有问题,连Ti各级工程师的智商一样有问题了。

微笑有助健康。

出0入0汤圆

发表于 2009-12-3 09:26:12 | 显示全部楼层
多核的问题和lz想的完全不是一回事

看看Intel TBB,

传统的程序
for (i = 0; i < loop; i ++)
  foo(i);

这么一个程序传统上是只能在一个核上单一串行的运行。多核的任务(目标)是,把程序能够无相关的分散到多核上运行,而最后结果依然正确。

Intel TBB则会使用paralle_for语句,自动把它转换成多核运行(当然是具备某些限制的,这个需要仔细看TBB文档)。

所以,多核的任务更多的类似【11楼】 zhanglf08 说的,如何把单一的任务转换成分散无关的任务(放到不同的核心上运行)。而根据我对djy的理解,那么这个任务就会变成,如何把单一的任务转换成分散无关的事件(由不同核心进行调度处理)。这个实质是相同的。

另外,lz的书中有很多误导的嫌疑,把实时系统更多的理解为全盘可控的系统,甚至精确到memcpy(还是strcpy?)都不能超过固定时间。但学术上,实时系统更多说的是,对外部输入能够在规定的时间内进行正确的响应。这其中隐含着,什么样的外部输入才需要进行实时响应的,而不是所有外部输入都需要进行实时的响应。对于非实时响应输入,冗长的memcpy没什么不合理之处,而对于实时响应输入,才是需要着重考虑的。

出0入0汤圆

 楼主| 发表于 2009-12-3 10:27:11 | 显示全部楼层
楼上理解有些片面了。
楼上也是linux高手了,借用unix世界最著名的一句话之一:提供机制而不是策略。

djyos提供的是由内核来管理和分配任务到多核的机制,至于如何把任务变成可拆分的,是一个策略问题,当然应该由程序员来决定了。
举例来说,在通信接收程序中,我们可能会规定一个条件,指明哪些数据包必须由同一个cpu处理,哪些允许分配到不同的cpu核上去,这是策略。而djyos提供机制,把允许分散的数据包分散到不同cpu核上去。

至于实时的问题,也是一样的,djyos为应用程序提供可控的组件,使应用程序有实现实时的机制,但是否能够实现可控、以及哪些任务需要可控,还受应用程序策略的影响,一个低优先级的任务,被高优先级的抢占而变得不可预测,就是典型的(优先级)策略导致低优先级实现不了实时的案例,djyos无能为力也不想干涉应用程序采用这样的策略。

出10入120汤圆

发表于 2010-2-2 09:46:43 | 显示全部楼层
楼主通俗一点讲,最好有个小的实时项目做例子,比较一下自己的操作系统的优点在哪儿。

我到现在对楼主系统的了解就是基于事件这几个字,至于如何调度如何应用好像都很朦胧,相信大部分大侠和我感觉是一样的。
头像被屏蔽

出0入0汤圆

发表于 2010-2-2 09:48:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2010-2-2 10:38:23 | 显示全部楼层
回复【20楼】makesoft
楼主通俗一点讲,最好有个小的实时项目做例子,比较一下自己的操作系统的优点在哪儿。
我到现在对楼主系统的了解就是基于事件这几个字,至于如何调度如何应用好像都很朦胧,相信大部分大侠和我感觉是一样的。
-----------------------------------------------------------------------

非常理解大家的心情,让大家久等,实在抱歉,我在这里向大伙赔罪了。
目前应用案例的情况是:有两个企业正在使用djyos开发产品,届时能不能说服他们公开他们的项目,还是未知数。
目前,有网友发动的正在4个DIY项目,介绍如下:
1、DJYOS基础实验平台DIY,http://space.chinaaet.com/group/detail.aspx?gid=91
2、DJYOS手机综合平台DIY,http://space.chinaaet.com/group/groupinfo.aspx?gid=88
3、DJYOS机器人DIY,即将开展
4、DJYOS数码相机DIY,即将开展

出0入0汤圆

发表于 2010-2-13 03:42:04 | 显示全部楼层
我只关注与单片机有关的。

出0入0汤圆

发表于 2010-2-22 09:15:26 | 显示全部楼层
我是来学习的

出0入0汤圆

发表于 2010-3-12 14:15:14 | 显示全部楼层
一个新的事物出来总是艰辛的。我先声明支持楼主。
从以上看来,ZJYOS似乎连AVR网内也没有被认同,任重道远啊
想当年UC/OS如果不是通过了美国的航空标准测试,现在可能也不会这么大名鼎鼎。
也许ZJYOS需要的是一个机会,一个可以扬名立万的机会

现在说来,我基本对ZJYOS无视,我研究一个不是很出名的OS又需要一个月或者几个月,还不会对我的收入有任何的影响(可能对应用于私人玩玩的项目还可以,毕竟企业还没有使用),那么我何不把UC/OS,LINUX掌握得更扎实一些呢,随着芯片价格的降低,这些对系统的要求已经越来越不是问题了。

话不怎么好听,我站在客观的立场上说说,代表一种心态,希望能给DJYOS作者一点启发。如有得罪,见谅。

出0入0汤圆

 楼主| 发表于 2010-3-12 14:42:35 | 显示全部楼层
回复【25楼】zdq094
-----------------------------------------------------------------------

谢谢你的支持和建议,你说的问题非常客观,也是我经常在想的问题。
但也不要受前面帖子的影响,8、10、11、13、14、17、18、19楼是别有用心、换着马甲来故意诋毁djyos的,阿莫老大那里有铁证的,曾经删了很多他们的帖子,没想到这里有这么多漏网的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 23:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表