注册会员
- 积分
- 88
- 威望
- 41
- 贡献
- 17
- 兑换币
- 22
- 注册时间
- 2013-11-11
- 在线时间
- 15 小时
|
2#
楼主 |
发表于 2013-11-11 14:28:55
|
只看该作者
作者:jorya_txj(lingjun chen) 邮箱: jorya.txj@gmail.com
官方QQ群:147640063,257989928 官网:www.raw-os.org
Raw OS源码可从官网下载
Raw-OS 操作系统特性
采用了目前业界最先进的hybrid(混合中断架构)不仅实现了最大关中断时间为0us,cpu利用率更是远超越ucos 3等实时系统。
内核最大关中断时间无限接近0us(整个内核最大关中断时间只有20句汇编), s3c2440系统最大关中断时间实测0.8us。
支持idle任务级别的事件驱动(协程),基于状态机机制(fsm+hsm),所有idle 级别的事件任务共享一个栈!
支持MPU内存保护模块
支持task 0以及workqueue的中断下半部机制,轻松降低系统最大关中断时间到最低,以及大大提高了系统的实时性。
支持task 256个优先级
支持task无限多个
支持semaphore无限多个
支持task级别的私有semaphore,即一个任务有一个私有信号量。
支持task级别的私有queue,即一个任务有一个私有queue。
支持mutex无限多个,同时支持优先级继承算法和优先级置顶算法,当优先级反转发生的的时候。
支持mutex在优先级反转过程中的任务优先级逐步还原策略,以及解决了改变任务优先级等mutex带来的副作用。
支持4种队列模块(queue, queue_size, queue_buffer,mqueue), 支持queue的一对多群发,包含了mail box 的功能。
支持软件timer无限多个。
支持event无限多个。
支持task block 在任意queue 和semphore 上,同时支持and 和or 的处理。
调度算法采用双向链表就绪队列,省去位图,采用目前最快的bits搜索算法。
支持动态监测所有任务栈空间大小,栈空间小于整体的12%,系统会马上报错。
任务能以FIFO和PRIO 两种方式block 在semphore, mutex, queue, 等等对象上。
采用目前最快的计算tick timeout的算法。
内核状态机的转换机制非常健全。
同等优先级调度,支持时间片轮。
支持满足posix的标准调度SCHED_RR和SCHED_FIFO
支持posix的pthread封装
支持整个内核配置成非抢占内核。
支持内核配置成非抢占内核, 追求最大的数据吞吐量。
支持block内存分配机制,适用于整块的内存分配,没有内存碎片.
支持byte内存分配机制,适用于任何体积大小的分配,有内存碎片,采用first fit 算法,支持临接空闲块的合并。
支持slab算法基于buddy。
支持基于大内存的分配page算法。
支持c库标准的malloc, calloc, recalloc,free.
支持发送消息的同时也发送消息长度(raw_queue_size)
支持满足posix标准的大级别消息算法mqueue(raw_mqueue),即每一个消息都按照优先级去排序,增加了灵活性。
极其丰富的的API功能,内核支持配置各种功能,最小内核rom 2K, ram 几百个字节。
支持8位,16位,32位的各种cpu以及dsp。
补充内容 (2013-11-11 21:52):
raw os介绍
raw os 的起源以及展望
raw os 第一行代码起于2012年1月15号,2012年4月28号发布了第一版。在2012年之前一直彷徨是不是要写一个实时操作系统,彷徨的原因是目前世界上有这么多的实时操作系统,有开源
补充内容 (2013-11-11 21:53):
的也有闭源的实时操作系统,自己还有必要去写一个这样的实时操作系统吗?这样的彷徨了好多年,突然意识到应该要做些什么了。世界上的实时操作系统再多也是别人的,纵观国内的实时系统处于零星之火,自己写一个实时操
补充内容 (2013-11-11 21:53):
作系统完全是能造福国人的。凭借此想法就开始了raw os 的发展之路,也就是那个时候创建了中国RTOS联盟群,至此一路不可自制,行进之今。
补充内容 (2013-11-11 21:54):
raw os 做了很多,也有很多没做,需要更多更多的国人支持,才能切实的走下去,进而造福国人。
对于raw os 的未来,希望在工控领域铺开来安家,也希望在强实时性的消费类电子领域铺广开来。
补充内容 (2013-11-11 21:54):
raw os 的设计哲学
一个实时操作系统的哲学的指导,往往能决定这个系统的最终层次。Raw os 的第一行代码起始于2012年1月15号,期间积累了10年以上的操作系统经验。
补充内容 (2013-11-11 21:55):
raw os 的理念是承上启下,广采博取,加以糅合创新,自成一脉。
大神牛顿有一句话说得很好:
如果说我比别人看得更远些,那是因为我站在了巨人的肩上。
补充内容 (2013-11-11 21:56):
牛顿的意思有两个层面,第一他肯定了前人的贡献,第二他在前人的基础上做出了创新。这个哲学思想无时不刻影响着raw os的前进。
补充内容 (2013-11-11 21:57):
一个系统如果固步自封,不吸取活水的话,是不可能有未来的,本人始终认为一个实时操作系统的根本在于它的内核的先进和创新性。
以下举几个例子来说明这个哲学观念:
补充内容 (2013-11-11 21:58):
1 raw os 的调度算法一定程度上参考了日本著名实时操作系统t kernel。
2 raw os 的api 设计一定程度上参考了threadx 的api 设计。
3 raw os 的任务状态机一定程度上参考了ucos 3 的任务状态设计。
补充内容 (2013-11-11 21:58):
4 raw os 的中断下半部一定程度上参考了linux的中断下半部设计。
5 raw os 的事件驱动框架以及fsm, hsm状态机的设计参考了QP 操作系统。
以及还有很多的这样的情况,不举例子了。
补充内容 (2013-11-11 21:58):
所以读者仔细阅读raw os 源码的时候无时不刻能感受到多方面的亲切。
raw os除了继承优秀系统的特性外,自我创新了很多的特性,比如中断下半部task 0, 内核最大关中断时间为0us等等,具更多的特性请参考官网。
补充内容 (2013-11-11 21:59):
raw os究竟可以多小?可以多快?
由于raw os 针对市场是目前中低端的cpu,所谓的中低端cpu 一般以arm 9 划分,arm 9 级别的或者类似速度的cpu 为中端cpu, 以上的比如arm 11为高端cpu, 以下的为低端cpu,
补充内容 (2013-11-11 22:00):
比如cortex-m0,cortex-m3,cortex-m4等等。
raw os的市场既然已经决定在中低端cpu, raw os 力争做到世界上所有实时操作系统之中的体积最小以及速度最快者。
补充内容 (2013-11-11 22:00):
基于此理论,整个raw os 的模块是可以高度可配置的,甚至每一个api 也可以单独使能配置,具体的参看raw_config.h。
实战证明raw os整个内核高度配置后,在cortex-m3上的只读代码体积在2K左右,ram只有几百个字节。
补充内容 (2013-11-11 22:01):
Micro raw os 的体积更小只读代码只需要1K, 而ram只需要几个字节。
天下武功唯快不破,操作系统原则上运行速度越快越好,raw os 正是基于此理论而精益求精,不断优化加速,达到极限。
补充内容 (2013-11-11 22:01):
当然实时操作系统的实时性永远是最重要的,有的时候宁愿算法效率低一点也要保证实时性这个原则的贯彻。
raw os 的各个模块都是经过算法极限处理过的,保证在同类产品中,速度无论是在调度方面还是时钟处理方面都是
补充内容 (2013-11-11 22:02):
保持领先的。举其中一个例子,比如bit_search_first_one这个函数是一个找到最高优先级的函数,此函数在32位cpu 和8位cpu 是不同的版本,用来加速不同类型的cpu。具体的可以通过RAW_CPU_WIDTH_32使能或者关闭。
补充内容 (2013-11-11 22:02):
如果单独使用基于raw os的事件触发系统,ram只占有几个字节,也省去了任务栈空间。在实时性上也不比实时操作系统差,具体的章节请参阅基于空闲任务的事件触发机制。
补充内容 (2013-11-11 22:03):
综上所述,raw os 在中低端cpu 上速度和体积都是精心优化过的,特别是在cortex-m 系列的cpu 上具有很大的优势。
补充内容 (2013-11-11 22:03):
Raw os 整体内核架构
raw os的整体模块有以下几种:
1 消息队列queue, 对应的内核文件为raw_queue.c。
此模块的特点是消息队列发送的是消息的指针。可适用于中断发送消息。
补充内容 (2013-11-11 22:04):
2 消息队列queue size,对应的内核文件为raw_queue_size.c。
此模块的特点是消息队列发送的是消息的指针以及消息的大小。可适用于中断发送消息。
3 消息队列mqueue,对应的内核文件为raw_mqueue.c。
补充内容 (2013-11-11 22:04):
此模块的特点是消息队列发送的是消息的指针以及大小并且能按照消息的优先级排序。不可用于中断发送消息。
4 消息队列queue buffer,对应的内核文件为raw_queue_buffer.c。
补充内容 (2013-11-11 22:05):
此模块的特点是消息队列内部会维护一个buffer,当发送消息时,会把消息copy到消息队列内部的buffer,任务接收消息时会从内部buffer把消息copy到用户的buffer中。
5 信号量semaphore ,对应的内核文件为raw_sem.c。
补充内容 (2013-11-11 22:05):
信号量可用于临界区的保护,更多的用于任务的同步。
6 事件标志位event, 对应的内核文件为raw_event.c。一个事件标志有32位。任务可以在事件标志位上实现and 和 or关系的对应操作。
补充内容 (2013-11-11 22:06):
7块内存分配block ,对应的内核文件为raw_block.c
内存一块块的分配,特点是速度快但是不能用于不同字节的分配。可适用于中断。
8字节内存分配byte, 对应的内核文件为raw_byte.c
补充内容 (2013-11-11 22:08):
可以分配不同字节的内存,缺点是有内存碎片,而且存在分配的时间不规定上,不利于实时性。
9 空闲任务事件,对应的内核文件为raw_idle_event.c。空闲任务的优先级最低,此模块特点是利用空闲任务使用以状态机为基础的 |
|