- 1、本文档共93页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 任务管理与调度 第三节任务管理 1.任务(进程)状态 任务拥有的资源情况是不断变化的,导致任务状态也表现出不断变化的特性。 不同的实时内核实现方式对任务状态的定义不尽相同,但是都可以概括为三种基本的状态: 执行状态 就绪状态 等待状态(阻塞状态) 任务的三种状态 执行状态:任务正在处理机上运行的状态,该任务已获得必要的资源,也获得了处理机,用户程序正在运行。多机系统:可以有多个任务处于执行状态。 就绪状态:该任务已分配到除CPU之外的所有一切条件。只要获得CPU,则可以立即执行。处于就绪状态的任务可能有多个,通常都放在一个就绪队列内。 任务的三种状态 等待(阻塞):任务等待某种事件完成(例如,等待输入/输出操作的完成)而暂时不能运行的状态,处于该状态的任务不能参加竞争处理机,此时,即使分配给它处理机,它也不能运行。 致使任务进入等待(阻塞)状态的典型事件:请求I/O,申请缓冲空间。 任务会在不同的状态之间进行转换,即任务状态的变迁 对于处于就绪状态的任务,获得CPU后,就处于执行状态。 处于执行状态的任务如果被高优先级任务所抢占,任务又会回到就绪状态。 处于执行状态的任务如果需要等待资源(除CPU之外的其他资源),任务会被切换到等待状态。 处于等待状态的任务,如果需要的资源(除CPU之外的其他资源)得到满足,就会转换为就绪状态,等待被调度执行。 μc-os-II任务的状态 μc-os-II 的休眠状态 暂时中断任务的执行,不接受系统的调度。即任务驻留在程序空间,还没有交给操作系统来管理。 一个任务可以通过调用OSTaskDel()函数来返回到休眠状态;或通过调用该函数让另一个任务进入休眠状态。 2.μC-OS-II的系统任务 空闲任务 这个任务是操作系统创建的 用户的任务不能删除这个任务。 这个任务的优先级最低 如果没有任何其他任务执行时,该任务才可能被执行。 Windows下也有空闲任务。 统计任务 OS_TaskStat (void *pdata) void OS_TaskStat (void *pdata) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif INT32U run; INT32U max; INT8S usage; pdata = pdata; /* Prevent compiler warning for not using pdata */ while (OSStatRdy == FALSE) { OSTimeDly(2 * OS_TICKS_PER_SEC); /* Wait until statistic task is ready */ } max = OSIdleCtrMax / 100L; for (;;) { OS_ENTER_CRITICAL(); OSIdleCtrRun = OSIdleCtr; /* Obtain the of the idle counter for the past second */ run = OSIdleCtr; OSIdleCtr = 0L; /* Reset the idle counter for the next second */ OS_EXIT_CRITICAL(); if (max 0L) { usage = (INT8S)(100L - run / max); if (usage = 0) { /* Make sure we dont have a negative percentage */ OSCPUUsage = usage; } else { OSCPUUsage = 0; } } else {
文档评论(0)