论文部分内容阅读
摘要:μC/OS-II操作系统之所以在10多年的时间里作为一个嵌入式实时的多任务操作系统得到了广泛的应用,原因之一是它的任务管理机制存在许多的优点。多任务运行的最大难点就在于多任务的调度。
关键词:μC/OS-II;多任务;任务调度
中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)15-30794-02
The Task-scheduling Mechanism of μC/OS-II Operating Systems
WANG Yu-rong,ZHU Jian-bin
(Computer Science College Wuhan University of Science and Engineering,Wuhan 430073,China)
Abstract:As a multi-task embedded real time operation system, μC/OS-II Operating Systems has been widely used in more ten years.One of the reason is that the Operating Systems has many advantages.The hardest point is the schedul of tasks when we run multi-task Operating Systems.
Key words:μC/OS-II;Multi-task;task-scheduling
1 引言
嵌入式系统是一种应用范围非常广泛的系统。可以这样理解,除了桌面计算机和服务器外所有计算设备都属于嵌入式系统。在短短十多年的时间里,伴随着微电子技术、软件技术的发展,嵌入式系统被广泛的用于如生物医学仪器、智能汽车、通信设备、网络设备、仪器仪表、手持设备等诸多领域。[1] 它是以应用为中心的,而嵌入式操作系统则是嵌入式系统应用中的核心。
嵌入式系统是计算机硬件和软件的结合体,或许还加上机械等其他部分,被设计来完成专门的功能。在一些情况下,嵌入式系统是一个大的系统或产品的一部分,就象汽车上的防抱死装置,与通用计算机相对。最初的嵌入式系统是不带操作系统的,只是用来完成某一个特定的单一功能,随着软硬件技术的发展,完成单一功能的嵌入式系统已经不能适应市场的需要,因此出现了带操作系统的嵌入式系统。现在嵌入式系统的准确定义是:以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可剪裁的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。[2]
μC/OS-II操作系统是一个完整的,可移植、固化、裁剪的占先式实时多任务操作系统。它之所以这么受欢迎,其中一个很重要的方面是因为它的实时性和多任务管理机制。由此可见它对任务的管理是成功的。在μC/OS-II操作系统中,一个任务,也称作一个线程,就是一个简单的程序,这个程序在执行时可以任务CPU完全属于该程序自己。而多任务的运行实际上并不是有多个CPU让多任务使用,而是靠CPU在多个任务间的转换和调度。
2 任务状态
μC/OS-II操作系统的任务状态有五种,分别是睡眠态、就绪态、运行态、等待状态和中断服务态。
睡眠态是指程序还在存储设备中,还没有被μC/OS-II操作系统管理,此时的任务只能通过任务创建函数才能脱离此状态,调用创建任务函数后,任务才能从睡眠态变成就绪态,在这个意义上来说,睡眠态就是μC/OS-II操作系统的入口,而任务创建函数就是入口的钥匙。[3]
任务被建立后,任务就进入到了就绪态,准备运行了。如果新建立任务的优先级高于就绪态中的其他任务的优先级,则新建立的任务就会立即得到CPU的使用权,会被优先执行,从而进入到运行态;而在就绪态的任务也可以通过调用任务删除函数回到睡眠态。
由于任何时刻只有一个任务处于运行态,所以一旦运行态中的任务被剥夺了CPU的使用权,它就从运行态回到等待状态。也可以通过人为的控制邮箱、信号量、延迟时间等使正在运行的任务从运行态转到等待状态。如果正在运行的任务是允许中断的,此时若中断服务程序正好到来,正在运行的任务也会进入中断服务状态,而进入中断服务状态的任务只有中断任务把CPU的控制权还给中断前的任务时,才能从中断服务状态退出来。运行态的任务也是可以被删除的,如果此时调用了任务删除函数,运行态的任务也会直接回到睡眠态。
一旦正在运行的任务通过将自己延迟一段时间或是由于要等待某一事件的发生而进入到了等待状态,如果延迟时间满,或是等待的某一事件发生了,任务就进入到了就绪态;或者等待状态的任务被删除了,那么它也会进入到睡眠态。由此看来,睡眠态又是μC/OS-II操作系统的出口,而出口的钥匙是任务删除函数,与任务建立函数相对。
3 任务调度
μC/OS-II操作系统总是运行进入就绪态任务中优先级最高的任务。它可以管理多达64个任务,但目前的版本里已经有两个任务被系统占用。一般来说用户可以使用从优先级4到优先级OS_LOWEST_PRIO-4一共56个优先级。对于多任务的管理,μC/OS-II操作系统是通过调度器完成了。其中任务级的调度是由函数OSSched()完成,而中断级的调度是通过函数OSIntExiT()完成。这两个函数是很相似的,所不同的其中一点就是OSSched()调用了任务切换函数OS_TASK_SW(),而退出中断服务子程序OSIntExiT()却调用的是OSIntCtxSw()函数。这是因为中断服务子程序已经将CPU寄存器存入到中断了的任务的堆栈中,所以只需要恢复堆栈中的内容即可。
μC/OS-II操作系统是一个商业用的实时操作系统。这是因为它是可剥夺型内核。可剥夺型内核是指当有高优先级任务到来时,不用等待低优先级的任务执行完毕,可以直接切换到高优先级的任务执行,即高优先级任务可以剥夺低优先级任务的CPU的使用权。μC/OS-II操作系统是一个多任务的实时操作系统。对于多任务的调度,它主要通过以下四类方法的使用来完成。
3.1优先级
对于μC/OS-II操作系统定义的每一个任务,在创建任务之初,一定会给这个任务分配一个合适的优先级。如果一个操作系统在调度算法选择上只是基于优先级调度,即支持静态优先级,那么这个操作系统只是一个准实时操作系统。而在μC/OS-II操作系统中,任务的优先级是可变的,即支持动态优先级。因此μC/OS-II操作系统是一个实时操作系统。改变任务优先级的函数是OSTaskChangePrio()。
3.2互斥信号量与信号量
在μC/OS-II操作系统中,互斥信号量被定义为一个二值信号,可以实现对共享资源的独占式占用。当这个资源被一个任务占用时,就被定义为1。其他的需要这个资源的任务如果检查到互斥型信号量是1,则进入等待状态,当占用此资源的任务释放这个资源时,互斥型信号量则被置为0,此时等待这个资源的任务队列中优先级最高的任务则可以获得这个资源而得以执行。
在μC/OS-II操作系统中,信号量有两种用法:一种是执行与互斥信号量相同的功能。二是如果一个资源允许多个任务调用,但现在要调用此资源的任务数目却多于允许使用此资源的数目,此时就需要用到信号量。这种情况下就会为资源设置一个计数器,如果被一个任务调用一次就自动减一,被一个任务释放一次就自动加一,只要这个计数器是大于零的,其他的任务就可以调用这个资源。
3.3消息邮箱和消息队列
用来传递消息缓冲区指针的数据结构叫做消息邮箱。消息邮箱所传递的是指向消息的指针,并非消息本身。如果一个任务获得了这个指针,即获得了该指针指向的一个特定数据结构。
消息邮箱不仅用来传递一个消息,而且也可定义一个指针数组,让数组的每个元素都存放一个消息缓冲区指针。那么任务就可通过这个指针数组指针的方法来传递多个消息。这种可以传递多个消息的数据结构叫做消息队列。
消息邮箱和消息队列在功能上的不同点是邮箱中只能存放一则消息指针,而队列可以存放多则消息指针。
3.4事件标志组
当某个任务需要与多个任务同步时,必须要使用事件标志组。事件标志组一旦建立之后,只有当某个任务需要事件标志组中的某些事件标志位(置位或者清0),这个任务才能继续运行。而且几个任务可以同时得到所需要的事件标志而进入就绪态。因此只要任务所需要的标志位满足要求,任务便可以进入就绪态。而使用信号量的任务是在等待该信号量的任务中优先级最高的任务才能得到信号量进入就绪态。
事件标志组可以使一个任务与多个任务同步,而信号量只能使一个任务与另一个任务同步。这是事件标志组与信号量的不同之处。
4 结论
本文在理论上对μC/OS-II操作系统的任务调度原理及方法进行了详细的研究,了解了μC/OS-II操作系统所定义的任务状态,找到了整个状态循环过程中的出口和入口,并分析了此操作系统是如何运用优先级、信号量等一些方法进行任务的调度。在研究的同时,也使得我们了解了μC/OS-II操作系统不同于其他一些操作系统的地方。正是由于这些不同点,使得μC/OS-II操作系统在短短十多年的时间里迅速发展起来并得到了广泛的应用。
参考文献:
[1]季志均,马文丽,陈虎,郑文岭.四种嵌入式实时操作系统关键技术分析[J].计算机应用研究,2005,(9):4-8.
[2]张文学.两种嵌入式实时操作系统的分析和比较[J].移动通信,2003.
[3]Jean J. Labrosse. 邵贝贝.等.μC/OS2Ⅱ源码公开的实时嵌入式操作系统(第2 版)[M].北京:北京航空航天大学出版社,2003.
[4]任哲.嵌入式实时操作系统μC/OS-II原理及应用[M].北京: 北京航空航天大学出版社,2005.
[5]涂刚,阳富民,胡贯荣。嵌入式操作系统综述[J].计算机应用研究,2000,(11):4-9.
关键词:μC/OS-II;多任务;任务调度
中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)15-30794-02
The Task-scheduling Mechanism of μC/OS-II Operating Systems
WANG Yu-rong,ZHU Jian-bin
(Computer Science College Wuhan University of Science and Engineering,Wuhan 430073,China)
Abstract:As a multi-task embedded real time operation system, μC/OS-II Operating Systems has been widely used in more ten years.One of the reason is that the Operating Systems has many advantages.The hardest point is the schedul of tasks when we run multi-task Operating Systems.
Key words:μC/OS-II;Multi-task;task-scheduling
1 引言
嵌入式系统是一种应用范围非常广泛的系统。可以这样理解,除了桌面计算机和服务器外所有计算设备都属于嵌入式系统。在短短十多年的时间里,伴随着微电子技术、软件技术的发展,嵌入式系统被广泛的用于如生物医学仪器、智能汽车、通信设备、网络设备、仪器仪表、手持设备等诸多领域。[1] 它是以应用为中心的,而嵌入式操作系统则是嵌入式系统应用中的核心。
嵌入式系统是计算机硬件和软件的结合体,或许还加上机械等其他部分,被设计来完成专门的功能。在一些情况下,嵌入式系统是一个大的系统或产品的一部分,就象汽车上的防抱死装置,与通用计算机相对。最初的嵌入式系统是不带操作系统的,只是用来完成某一个特定的单一功能,随着软硬件技术的发展,完成单一功能的嵌入式系统已经不能适应市场的需要,因此出现了带操作系统的嵌入式系统。现在嵌入式系统的准确定义是:以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可剪裁的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。[2]
μC/OS-II操作系统是一个完整的,可移植、固化、裁剪的占先式实时多任务操作系统。它之所以这么受欢迎,其中一个很重要的方面是因为它的实时性和多任务管理机制。由此可见它对任务的管理是成功的。在μC/OS-II操作系统中,一个任务,也称作一个线程,就是一个简单的程序,这个程序在执行时可以任务CPU完全属于该程序自己。而多任务的运行实际上并不是有多个CPU让多任务使用,而是靠CPU在多个任务间的转换和调度。
2 任务状态
μC/OS-II操作系统的任务状态有五种,分别是睡眠态、就绪态、运行态、等待状态和中断服务态。
睡眠态是指程序还在存储设备中,还没有被μC/OS-II操作系统管理,此时的任务只能通过任务创建函数才能脱离此状态,调用创建任务函数后,任务才能从睡眠态变成就绪态,在这个意义上来说,睡眠态就是μC/OS-II操作系统的入口,而任务创建函数就是入口的钥匙。[3]
任务被建立后,任务就进入到了就绪态,准备运行了。如果新建立任务的优先级高于就绪态中的其他任务的优先级,则新建立的任务就会立即得到CPU的使用权,会被优先执行,从而进入到运行态;而在就绪态的任务也可以通过调用任务删除函数回到睡眠态。
由于任何时刻只有一个任务处于运行态,所以一旦运行态中的任务被剥夺了CPU的使用权,它就从运行态回到等待状态。也可以通过人为的控制邮箱、信号量、延迟时间等使正在运行的任务从运行态转到等待状态。如果正在运行的任务是允许中断的,此时若中断服务程序正好到来,正在运行的任务也会进入中断服务状态,而进入中断服务状态的任务只有中断任务把CPU的控制权还给中断前的任务时,才能从中断服务状态退出来。运行态的任务也是可以被删除的,如果此时调用了任务删除函数,运行态的任务也会直接回到睡眠态。
一旦正在运行的任务通过将自己延迟一段时间或是由于要等待某一事件的发生而进入到了等待状态,如果延迟时间满,或是等待的某一事件发生了,任务就进入到了就绪态;或者等待状态的任务被删除了,那么它也会进入到睡眠态。由此看来,睡眠态又是μC/OS-II操作系统的出口,而出口的钥匙是任务删除函数,与任务建立函数相对。
3 任务调度
μC/OS-II操作系统总是运行进入就绪态任务中优先级最高的任务。它可以管理多达64个任务,但目前的版本里已经有两个任务被系统占用。一般来说用户可以使用从优先级4到优先级OS_LOWEST_PRIO-4一共56个优先级。对于多任务的管理,μC/OS-II操作系统是通过调度器完成了。其中任务级的调度是由函数OSSched()完成,而中断级的调度是通过函数OSIntExiT()完成。这两个函数是很相似的,所不同的其中一点就是OSSched()调用了任务切换函数OS_TASK_SW(),而退出中断服务子程序OSIntExiT()却调用的是OSIntCtxSw()函数。这是因为中断服务子程序已经将CPU寄存器存入到中断了的任务的堆栈中,所以只需要恢复堆栈中的内容即可。
μC/OS-II操作系统是一个商业用的实时操作系统。这是因为它是可剥夺型内核。可剥夺型内核是指当有高优先级任务到来时,不用等待低优先级的任务执行完毕,可以直接切换到高优先级的任务执行,即高优先级任务可以剥夺低优先级任务的CPU的使用权。μC/OS-II操作系统是一个多任务的实时操作系统。对于多任务的调度,它主要通过以下四类方法的使用来完成。
3.1优先级
对于μC/OS-II操作系统定义的每一个任务,在创建任务之初,一定会给这个任务分配一个合适的优先级。如果一个操作系统在调度算法选择上只是基于优先级调度,即支持静态优先级,那么这个操作系统只是一个准实时操作系统。而在μC/OS-II操作系统中,任务的优先级是可变的,即支持动态优先级。因此μC/OS-II操作系统是一个实时操作系统。改变任务优先级的函数是OSTaskChangePrio()。
3.2互斥信号量与信号量
在μC/OS-II操作系统中,互斥信号量被定义为一个二值信号,可以实现对共享资源的独占式占用。当这个资源被一个任务占用时,就被定义为1。其他的需要这个资源的任务如果检查到互斥型信号量是1,则进入等待状态,当占用此资源的任务释放这个资源时,互斥型信号量则被置为0,此时等待这个资源的任务队列中优先级最高的任务则可以获得这个资源而得以执行。
在μC/OS-II操作系统中,信号量有两种用法:一种是执行与互斥信号量相同的功能。二是如果一个资源允许多个任务调用,但现在要调用此资源的任务数目却多于允许使用此资源的数目,此时就需要用到信号量。这种情况下就会为资源设置一个计数器,如果被一个任务调用一次就自动减一,被一个任务释放一次就自动加一,只要这个计数器是大于零的,其他的任务就可以调用这个资源。
3.3消息邮箱和消息队列
用来传递消息缓冲区指针的数据结构叫做消息邮箱。消息邮箱所传递的是指向消息的指针,并非消息本身。如果一个任务获得了这个指针,即获得了该指针指向的一个特定数据结构。
消息邮箱不仅用来传递一个消息,而且也可定义一个指针数组,让数组的每个元素都存放一个消息缓冲区指针。那么任务就可通过这个指针数组指针的方法来传递多个消息。这种可以传递多个消息的数据结构叫做消息队列。
消息邮箱和消息队列在功能上的不同点是邮箱中只能存放一则消息指针,而队列可以存放多则消息指针。
3.4事件标志组
当某个任务需要与多个任务同步时,必须要使用事件标志组。事件标志组一旦建立之后,只有当某个任务需要事件标志组中的某些事件标志位(置位或者清0),这个任务才能继续运行。而且几个任务可以同时得到所需要的事件标志而进入就绪态。因此只要任务所需要的标志位满足要求,任务便可以进入就绪态。而使用信号量的任务是在等待该信号量的任务中优先级最高的任务才能得到信号量进入就绪态。
事件标志组可以使一个任务与多个任务同步,而信号量只能使一个任务与另一个任务同步。这是事件标志组与信号量的不同之处。
4 结论
本文在理论上对μC/OS-II操作系统的任务调度原理及方法进行了详细的研究,了解了μC/OS-II操作系统所定义的任务状态,找到了整个状态循环过程中的出口和入口,并分析了此操作系统是如何运用优先级、信号量等一些方法进行任务的调度。在研究的同时,也使得我们了解了μC/OS-II操作系统不同于其他一些操作系统的地方。正是由于这些不同点,使得μC/OS-II操作系统在短短十多年的时间里迅速发展起来并得到了广泛的应用。
参考文献:
[1]季志均,马文丽,陈虎,郑文岭.四种嵌入式实时操作系统关键技术分析[J].计算机应用研究,2005,(9):4-8.
[2]张文学.两种嵌入式实时操作系统的分析和比较[J].移动通信,2003.
[3]Jean J. Labrosse. 邵贝贝.等.μC/OS2Ⅱ源码公开的实时嵌入式操作系统(第2 版)[M].北京:北京航空航天大学出版社,2003.
[4]任哲.嵌入式实时操作系统μC/OS-II原理及应用[M].北京: 北京航空航天大学出版社,2005.
[5]涂刚,阳富民,胡贯荣。嵌入式操作系统综述[J].计算机应用研究,2000,(11):4-9.