uC/OS-II学习总结

来源:互联网 发布:windows loader有毒吗 编辑:程序博客网 时间:2024/05/02 02:28

uC/OS-II学习总结

  通过两周的学习,终于是把uC/OS-II的源代码看了一遍,做了一些简单的注释,不能说掌握了它,或者已经掌握了OS,这只能算是给正在上OS课程的自己提前注入一点OS的概念吧。OS的学习难度是比较高的,虽然其很多的概念还是比较容易理解,但是一些算法在整个OS体系中如何实现以及如何选择这些算法,确实是一个比较难的问题。只有反复的实践,去了解这些已经实现了并且得到广泛认可的开源OS,对照理论,才能真正的学好OS课程。

  uC/OS-II是一个很小的嵌入式实时操作系统,在繁多的操作系统类型中只属于一个很小的点,它是一个多任务的操作系统。其整个结构相对来说比较简单:

  1)任务管理:在uC/OS-II中,任务就相当于操作系统中所说的进程。其任务的管理结构由任务栈、任务控制块,任务的主要属性有优先级、任务状态等。多任务的管理结构是一个双向任务控制链表。提供了创建任务、初始化任务栈、初始化任务控制块、扩展创建任务、删除任务、请求删除任务本身、挂起任务、恢复任务、设置任务名称、获取任务名称以及获取任务控制块信息等API

  2)任务调度:uC/OS-II的任务调度有两个层次:任务级调度和中断级调度。其采用的算法是基于优先级的调度算法。任务级调度就是说在任务中进行调度,比如一个任务处于阻塞的情况下,根据优先级调度新的任务;而中断级调度是系统在遇到外部中断的情况下发生的调度。一般操作系统的调度算法有先来先服务、短作业优先、时间片轮转、优先权、多级反馈队列等调度算法,而这里只采用的优先权一种调度算法。在进行一个OS设计的时候,采用何种算法,必须基于对OS的应用特点来选择!

  3)任务通信与同步:多任务操作系统中,很重要的一个问题就是任务的通信与同步。比如说,某个任务的执行必须依赖另一个任务执行完后产生的结果,那么系统在调度任务的时候就要使得先执行后一个任务。另外,如果一个资源,比如说打印机,每次只能被一个任务占有,那么就需要告诉申请该资源的任务,是否可用,若不可用,使它等待,到可用的时候使任务就绪,经过调度后运行。在uC/OS-II中,任务与任务之间的通信与同步被看做是事件,根据事件的功能很明显有同步事件与通信事件。通信事件涉及到数据的传输,而同步事件置涉及某个事务的状态。根据处理事件的数量也可以分为单一事件和多事件管理。对于单一事件的通信机制,根据一次事件传输数据的数量,其采用了消息邮箱和消息队列两种方式;对于单一事件的同步机制,根据事务的状态数量分为信号量和互斥锁,信号量即事务有多种状态,互斥锁即事务只具有两种状态,.i.e.,要么有,要么没有。

  4)系统启动与时钟管理:操作系统要能用,必须先在处理器上启动,在启动中最主要的就是要对系统进行初始化,然后开始运行最高优先级任务,在uC/OS-II中初始化启动后,系统自产生一个空闲任务,这个任务无论何时,只要系统在运行,它就在运行。在Linux操作系统中启动,需要通过引导程序将操作系统装入到内存开始初始化后运行。时钟的管理也是非常重要的,对于一个处理器来说,时钟是必不可少的,比如定时,任务等待时间设置等有关时间的问题依靠系统时钟来实现,所以OS对于时钟的管理也是非常重要的。

  5)内存管理:这里主要讲的是用户要求动态管理内存而言,至于处理器内存结构,在制造时就已经固定,而OS要做的就是形成怎么为任务分配内存。uC/OS-II中内存管理也是通过双向链表的形式实现的。将内存分成一个个区,区中有固定大小的块。通过双向链表将这些块的状态统一管理,就可以实现申请一个分区,申请一个块,释放一个分区或者一个块的功能。

  6)移植:一个操作系统在设计之初只针对一个特定的处理器,那么通过修改部分源代码,使之可以在某个特定处理器上运行的过程就叫移植。移植性是衡量一个操作系统的重要技术指标。由于操作系统是管理硬件资源,因而必然涉及到与具体硬件打交道,尤其是处理器。uC/OS-II的移植需要完成几大任务:一是系统启动处理,即编写启动代码。在调用系统初始化程序之前,必须对相应的处理器进行一些必要的初始化。如关闭看门狗、设置异常处理栈空间、时钟任务、启动代码存放的内存空间等等,都需要程序员自己设定。二是安装中断异常。系统启动后,中断是管理外部异常的机制。当一个中断信号来之后,处理器的PC指针跳转到何处进行什么样的中断处理程序,都是需要预置的。具体有查找中断源、在中断向量表中设置中断处理函数等。三是任务管理与调度的一些设置。比如具体的数据类型,每个处理器支持的数据类型是不一样的,如有的是8位,有的16位,还有的32位等,那么在移植的时候就要修改这些数据类型。还有临界状态的设置,自定义操作接口等。四是添加必要的硬件驱动程序,比如步进电机、打印机、鼠标、键盘等外设硬件资源。

  至此,就可以说完成了整个操作系统的学习,当然还有一些涉及到流行的网络问题,比如建立TCP/IP协议栈等,都是一些进阶的话题。综观一个完整的操作系统,就是涉及进程有关的管理,存储的管理,外设I/O的管理,文件系统等内容,这其中的每一部分都有很多不同的算法与结构,在继续学习时要注意加强实践,深层次的理解并掌握这些算法,只有这些,才能对算法有所创新,才能为在根据实际要求建立一个操作系统打下牢固基础!

 

原创粉丝点击