uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。ucos由于它的开源性得到了几位广泛的应用。我这次阅读的主要目的也是通过它加深自己对操作系统相关概念的认识。

一、ucos的代码结构

  由于ucos可以在不同平台上移植,其代码分为于处理器无关的的代码和与应用程序相关的代码。具体如下图:

uC/OS II原理分析及源码阅读(一)-LMLPHP

二、ucos的工作原理

  在uC/OS-II里,每个任务都有一个任务控制块(Task Control Block),这是一个比较复杂的数据结构。在任务控制块的偏移为0的地方,存储着一个指针,它记录了所属任务的专用堆栈地址。以后每当发生任务切换,系统必然会先进入一个中断,这一般是通过软中断或者时钟中断实现。然后系统会先把当前任务的堆栈地址保存起来,仅接着恢复要切换的任务的堆栈地址。由于那个任务的堆栈里一定也存的是地址(还记得我们前面说过的,每当发生任务切换,系统必然会先进入一个中断,而一旦中断CPU就会把地址压入堆栈),这样,就达到了修改PC为下一个任务的地址的目的。

三、ucos的基本系统服务

  ucos提供了任务管理、时间管理、内存管理、任务间同步与通信、任务调度这几个基本系统服务。

  1、任务管理:ucos最多可以支持64个任务,优先级为0到63,但是系统保留了8,所以我们能用的只有56个。在系统初始化的时候会自动生成两个任    务(一个是空闲任务,另一个用来计算cpu利用率)。

  2、时间管理:通过中断来实现,时间按一般为10毫秒或者是100毫秒,时钟频率取决于用户对定时器的编程

  3、内存管理:ucos把连续的大快内存按分区管理。每个分区中包含整数个大小相同的内存块,但不同分区之间的内存快大小可以不同。用户需要动    态分配内存时,系统选择一个适当的分区,按块来分配内存。释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行    时间也是固定的。

  4、任务间同步与通信:主要是通过信号量、邮箱、消息队列等实现

  5、任务调度:由于提供了不同优先级的时间,所以ucos提供了基于优先级的调度方法。

当然这些只是参考别的资料得到的一些大体上的概况,具体的细节实现还是要靠阅读源代码才能得到一个较好的理解。

  

04-13 15:36