- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章(1) μC/OS-II任务
什么是任务?
在实时多任务系统下运行的应用软件程序就是任务。在没有使用OS的前后台系统中,我们可以认为main函数以及通过main函数调用的全体函数为一个任务。
通常将“并行程序执行的基本逻辑单位”称之为“任务”,也就是说任务是可以被分割为独立的且可并行执行的基本逻辑单位程序。一个任务的程序是顺序执行的,而不同任务的程序却是并行执行的。任务必须包括相互“独立”和“并行”执行两个方面。
-独立
独立具体指任务不能彼此直接调用,也不能直接进行数据交换。
void task0 (void)
{
task1( );
}
void task1 (void)
{
}
内核
通过调用执行任务,因此可以看成整体。
void task0 (void)
{
系统调用
}
通过内核进行任务调度和数据交换。
基本概念
独立具体指任务不能彼此直接调用,也不能直接进行数据交换。
×
√
-独立
基本概念
-并行执行
想象相互独立的任务各自拥有一个CPU,每个CPU各自执行各自的任务,此即任务的并行执行。但实际上CPU只有一个,我们认为操作系统为每个任务虚拟了一个CPU。
基本概念
任务代码
任务堆栈
内存
处理器
任务运行时与
处理器之间的关系
处理器通过两个指针寄存器(PC和SP)来与任务代码和任务堆栈建立联系并运行它
寄存器组
运行环境包括了两部分:处理器中的运行环境和内存中的运行环境
处理器
多任务时的问题
?
当有多个任务时,处理器中的运行环境应该怎么办?
寄存器组
程序运行环境
多任务时任务与处理器 之间关系的处理
程序
在内存中为每个任务创建一个虚拟的处理器(处理器部分的运行环境
由操作系统的调度器按某种规则来进行这两个复制工作
寄存器组
寄存器组
也就是说,任务的切换是
任务运行环境的切换
虚拟处理器
虚拟处理器应该存储的主要信息:
1。程序的断点地址(PC)
2。任务堆栈指针(SP)
3。程序状态字寄存器(PSW)
4。通用寄存器内容
5。函数调用信息(已存在于堆栈)
另外再用一个数据结构保存任务堆栈
指针(SP),这个数据结构叫做任务
控制块,它除了保存任务堆栈指针之
外还要负责保存任务其他信息。
这些内容通常保存在任务堆栈中,这些内容也常叫做任务的上下文。
任务控制块是由操作系统另行构造的一个数据结构,每个任务都有一个。
任务控制块结构的主要成员
typedef struct os_tcb {
OS_STK *OSTCBStkPtr; //指向任务堆栈栈顶的指针
……
INT8U OSTCBStat; //任务的当前状态标志
INT8U OSTCBPrio; //任务的优先级别
……
} OS_TCB;
其实,程序切换的关键是
把程序的私有堆栈指针赋
予处理器的堆栈指针SP
实质上系统是通过SP的切换
来实现程序的切换的。
要建立一个概念:具有
控制块的程序才是一个
可以被系统所运行的任务。
程序代码、私有堆栈、任
务控制块是任务的三要件。
任务控制块提供了运行环
境的存储位置。
任务的基本概念
把一个大型任务分解成多个小任务,然后在计算机中通过运行这些小任务,最终达到完成大任务的目的。
在μC/OS-II中,与上述那些小任务对应的程序实体就叫做“任务”(实质上是一个线程),μC/OS-II就是一个能对这些小任务的运行进行管理和调度的多任务操作系统。
从应用程序设计的角度来看,μC/OS-II的任务就是一个用户编写的C函数和与之相关联的一些数据结构而构成的一个实体。
任务切换过程
获得待运行任务的任务控制块
如何获得待运行任务的任务控制块?
小结
一个完整的任务应该有如下三部分:
任务代码(程序)
任务的私有堆栈(用以保护运行环境)
任务控制块(提供私有堆栈也是虚拟处理器的位置)
这些都是任务方应该提供的基本信息。
文档评论(0)