版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式系统(xtng)及应用共一百五十四页第五章任务管理(gunl)与调度共一百五十四页主要(zhyo)内容任务任务管理(gunl)任务调度优先级反转共一百五十四页High Priority TaskLow Priority TaskTaskTaskTaskTaskTaskTaskEventEventEach TaskInfinite LoopImportanceSplitting an application into Tasks共一百五十四页int main(void) / Initialize uCOS-II. OSInit(); / Create the first task OSTa
2、skCreate(TestTask1, (void *) 11, &TestTaskStk1TASK_STK_SIZE, 11); / Start multitasking. OSStart(); return 0;void TestTask1(void *pdata) printf(%4u: * Test Task 1 First call *n, OSTime); /Create 3 other tasks OSTaskCreate(TestTask2, (void *) 22, &TestTaskStk2TASK_STK_SIZE, 22); OSTaskCreate(TestTask3
3、, (void *) 33, &TestTaskStk3TASK_STK_SIZE, 33); OSTaskCreate(TestTask4, (void *) 10, &TestTaskStk3TASK_STK_SIZE, 10); while (1) printf(%4u: * Test Task 11 *n, OSTime); OSTimeDly(1); Task demo based on uCOS共一百五十四页void TestTask2(void *pdata) while (1) printf(%4u: * Test Task 22 *n, OSTime); OSTimeDly(
4、1); void TestTask3(void *pdata) while (1) printf(%4u: * Test Task 33 *n, OSTime); OSTimeDly(1); void TestTask4(void *pdata) while (1) printf(%4u: + Test Task 10 +n, OSTime); OSTaskSuspend(10); /Suspend yourself 程序运行结果(ji gu)共一百五十四页采用多任务的好处:任务的规模较小每个任务更容易编码(bin m)和调试,其质量也更容易得到保证不少应用本身就是由多个任务构成的如一个应用可
5、能需要进行以下任务的处理:计算、从网络获取数据和刷新显示屏幕采用多任务的处理方式是应用问题的一个非常自然的解决方式任务之间具有较高的独立性,耦合性小通过增加新的任务就能方便的扩充系统功能实时性强保证紧急事件得到优先处理成为可能共一百五十四页在嵌入式实时系统中任务(task)通常为进程(process)和线程(thread)的统称任务是调度的基本单位进程最初由Multics的设计者在60年代提出来的,主要包括以下内容: 一个正在执行的程序;计算机中正在运行的程序的一个实例;可以分配给处理器,并由处理器执行的一个实体;由一个顺序的执行线程、一个当前状态和一组相关(xinggun)的系统资源所刻画的
6、活动单元。共一百五十四页进程由代码、数据、堆栈和进程控制块构成。进程控制块包含了操作系统用来控制进程所需要的信息:进程状态CPU寄存器调度信息内存管理信息I/O状态信息等早期的进程,包含了以下两个方面的内容: 资源。进程是资源分配的基本单位,一个进程包括一个保存进程映像的虚拟地址空间、主存、I/O设备和文件等资源。调度执行。进程作为(zuwi)操作系统的调度实体,是调度的基本单位。共一百五十四页随着操作系统的发展,进程所包含的两个方面的内容逐渐被分开:轻量级进程或线程:调度执行的单位进程:资源分配的单位线程是进程内部(nib)一个相对独立的控制流,由线程上下文和需要执行的一段程序指令构成在进程
7、中,所有线程共享该进程的状态和资源,可以访问相同的数据共一百五十四页使用线程的优势:创建:在一个已有进程中创建一个新线程比创建一个全新的进程所需的时间开销少;终止:终止一个线程比终止一个进程所花费的时间少;切换:线程切换比进程切换所花费的时间少;通信:使同一(tngy)进程内部不同线程之间的通信效率得到显著提高。在大多数操作系统中,不同进程之间的通信需要内核的干预,而同一进程内部不同线程之间则可直接通信。 共一百五十四页引入线程的概念后,可把进程和线程的使用分为以下几种模型:单进程/单线程模型(如MS-DOS):整个系统只有一个进程、一个线程 单进程/多线程模型:在单进程/多线程模型中,整个系
8、统有一个进程、多个线程 多进程/单线程模型(如传统(chuntng)的UNIX):在多进程/单线程模型中,整个系统有多个进程,每个进程只有一个线程 多进程/多线程模型(如Windows NT、Solaris、Mach等):在多进程/多线程模型中,系统有多个进程,每个进程又可包含多个线程 共一百五十四页单进程/单线程模型单进程/多线程模型多进程/多线程模型多进程/单线程模型共一百五十四页大多数嵌入式实时内核:单进程(jnchng)/多线程模型,或简单地称为任务模型把整个应用当作一个没有定义的进程来对待;应用则被划分为多个任务的形式来进行处理。适用于实时性要求较高的、相对简单的应用也有一些嵌入式实
9、时操作系统采用了多进程/多线程模型:系统中包含多个进程,每个进程对应又包含多个线程适合于处理复杂的应用共一百五十四页第一节任 务 任务的定义及其主要特性任务的内容(nirng)任务的分类任务参数共一百五十四页任务的定义及其主要(zhyo)特性任务是一个具有独立功能的无限循环的程序段的一次运行活动,是实时内核调度的单位,具有以下特性(txng):动态性:任务状态是不断变化的。一般分为就绪态、运行态和等待态。在多任务系统中,任务的状态将随着系统的需要不断进行变化。并行性:系统中同时存在多个任务,这些任务在宏观上是同时运行的。异步独立性:每个任务各自按相互独立的不可预知的速度运行,走走停停。 多任务
10、运行情况共一百五十四页任务(rn wu)的内容任务(rn wu)主要包含以下内容: 代码:一段可执行的程序数据:程序所需要的相关数据(变量、工作空间、缓冲区等)堆栈程序执行的上下文环境共一百五十四页任务(rn wu)的内容任务通常包含一个(y )具有无限循环的程序/*ioTask implements data obtaining and handling continuously*/void ioTask(void)int data; initial();/*The following sentences get data and handle data continuously*/whil
11、e(TRUE)data = getData();handleData(data);共一百五十四页 void YourTask (void *pdata) for (;) /* USER CODE */ Call one of uC/OS-IIs services: OSFlagPend(); OSMboxPend(); OSMutexPend(); OSQPend(); OSSemPend(); OSTaskDel(OS_PRIO_SELF); OSTaskSuspend(OS_PRIO_SELF); OSTimeDly(); OSTimeDlyHMSM(); /* USER CODE */
12、void YourTask (void *pdata) /* USER CODE */ OSTaskDel(OS_PRIO_SELF); 共一百五十四页void TestTask2(void *pdata) while (1) printf(%4u: * Test Task 22 *n, OSTime); OSTimeDly(1); void TestTask3(void *pdata) while (1) printf(%4u: * Test Task 33 *n, OSTime); OSTimeDly(1); void TestTask4(void *pdata) while (1) pr
13、intf(%4u: + Test Task 10 +n, OSTime); OSTaskSuspend(10); /Suspend yourself 共一百五十四页任务(rn wu)的内容任务与程序的区别: 任务能真实(zhnsh)地描述工作内容的并发性,而程序不能;程序是任务的组成部分除程序外,任务还包括数据、堆栈及其上下文环境等内容;程序是静态的,任务是动态的;任务有生命周期,有诞生、有消亡,是短暂的;而程序是相对长久的;一个程序可对应多个任务,反之亦然;任务具有创建其他任务的功能,而程序没有。 共一百五十四页任务(rn wu)的内容任务上下文环境(context)包括(boku)了实时内
14、核管理任务、以及处理器执行任务所需要的所有信息。任务优先级任务的状态等实时内核所需要的信息以及处理器的各种寄存器的内容(hardware context):程序计数器、堆栈指针、通用寄存器等的内容任务的上下文环境通过任务控制块(Task Control Block,TCB)来体现。共一百五十四页任务1任务2任务3内核内核代码内核数据栈数据任务控制块代码栈数据任务控制块代码栈数据任务控制块代码任务1任务2任务3多任务系统(xtng)示意图共一百五十四页任务(rn wu)的分类按照(nzho)到达情况的可预测性,任务可以划分为:周期任务(periodic task)非周期任务按照重要程度,可分为:
15、关键任务(critical task)非关键任务(noncritical task)共一百五十四页任务(rn wu)的分类周期任务与非周期任务周期任务每隔一个固定的时间间隔就会执行一次。举例:飞行器可能需要每隔100ms获得一次关于(guny)飞行器的速度、高度和姿态数据,控制传感器获取这些数据就需要通过周期任务来进行。非周期任务执行的间隔时间则为不确定的。举例:移动通信设备中的通信任务,该任务只有在需要进行通信的情况下才会得到执行。非周期任务分为:sporadic task:有最小到达间隔时间限制aperiodic task:没有到达时间限制共一百五十四页任务(rn wu)的分类关键任务与非
16、关键任务关键任务:为需要得到及时执行的任务,否则将出现灾难性的后果举例:飞行器中用于处理生命(shngmng)支持系统和稳定性控制系统的任务非关键任务:如果没有得到及时执行,则不会产生严重后果 共一百五十四页任务(rn wu)参数任务参数:优先级(priority)周期(period)计算(j sun)时间(computation time)就绪时间(ready time)截止时间(deadline)共一百五十四页任务(rn wu)参数任务的优先级表示任务对应工作内容在处理(chl)上的优先程度优先级越高,表明任务越需要得到优先处理飞行器中处理稳定性控制的任务,就需要具有较高的优先级,一旦执行
17、条件得到满足,应及时得到执行任务的优先级分为静态优先级和动态优先级。静态优先级:任务的优先级被确定后,在系统运行过程中将不再发生变化;动态优先级:系统运行过程中,任务的优先级是可以动态变化的。 返回共一百五十四页任务(rn wu)参数周期周期任务所具有的参数,表示任务周期性执行的间隔时间任务的计算时间任务在特定硬件环境下被完整执行所需要的时间,也被称为是任务的执行时间(execution time)。由于任务每次执行的软件环境的差异性,导致任务在各次具体执行过程(guchng)中的计算时间各有不同。通常用最坏情况下的执行时间(worst case time)或是需要的最长执行时间来表示,也可用
18、统计时间(statistical time)来表示。 返回共一百五十四页任务(rn wu)参数任务的就绪时间任务具备了在处理器上被执行(zhxng)所需要条件时的时间。 任务的截止时间意味着任务需要在该时间到来之前被执行完成。截止时间可以通过绝对截止时间(absolute deadline)和相对截止时间(relative time)两种方式来表示相对截止时间为任务的绝对截止时间减去任务的就绪时间。截止时间可以分为强截止时间(hard deadline)和弱截止时间(soft deadline)两种情况:具有强截止时间的任务即为关键任务,如果截止时间不能得到满足,就会出现严重的后果。拥有关键任
19、务的实时系统又被称为强实时(hard real-time)系统,否则称为弱实时(soft real-time)系统。 共一百五十四页第二节任务(rn wu)管理任务状态与变迁空闲任务任务控制(kngzh)块任务切换任务队列优先级位图算法任务管理机制共一百五十四页任务状态(zhungti)与变迁任务(rn wu)拥有的资源情况是不断变化的,导致任务状态也表现出不断变化的特性。不同的实时内核实现方式对任务状态的定义不尽相同,但是都可以概括为三种基本的状态:等待(waiting):任务在等待某个事件的发生;就绪(ready): 任务等待获得处理器资源;执行(running):任务获得处理器资源,所包
20、含的代码内容正在被执行。 共一百五十四页任务(rn wu)状态与变迁在单处理器系统中:任何时候都只有一个任务在CPU中执行如果没有任何事情可做,就运行空闲任务执行空操作任何一个可以执行的任务都必须处于就绪状态调度程序从任务的就绪队列中选择(xunz)下一个需要执行的任务。处于就绪状态的任务拥有除CPU以外的其他所有需要的资源。任务还可能处于等待状态如果任务在需要等待I/O设备或其他任务提供的数据,而数据又还没有到达该任务的情况下,就处于等待状态共一百五十四页任务(rn wu)状态与变迁任务会在不同(b tn)的状态之间进行转换,即任务状态的变迁就绪态运行态等待态获得CPU被高优先级任务抢占或超
21、时获得资源需要资源任务状态变迁共一百五十四页任务1任务2任务3调度程序05101520253035404550运行等待就绪三个任务进行状态转换(zhunhun)的过程 包含三个任务和一个调度程序。调度程序用来确定下一个需要投入运行的任务,因此调度程序本身也需要占用一定的处理时间。 共一百五十四页Task states and transition of uCOSOSMBoxPOST()OSQPost()OSQPostFront()OSSemPost()OSTASKResume()OSTimeDlyResume()OSTimeTick()OSMBoxPend()OSQPend()OSSemPen
22、d()OSTaskSuspend()OSTimeDly()OSTimeDlyHMSM()InterruptOSIntExit()OSStart()OSIntExit()OS_TASK_SW()OSTaskDel()OSTaskCreate()OSTaskCreateExt()OSTaskDel()Task is PreemptedOSTaskDel()WAITINGDORMANTREADYRUNNINGISR共一百五十四页空闲(kngxin)任务Which is executed when none of the other tasks is ready to run. The idle ta
23、sk is always set to the lowest priority. The idle task can never be deleted by application software. Idle Task is created by OS共一百五十四页void OS_TaskIdle (void *pdata) /* Prevent compiler warning for not using pdata */ pdata = pdata; for (;) OS_ENTER_CRITICAL(); OSIdleCtr+; OS_EXIT_CRITICAL(); /* Call
24、user definable HOOK */ OSTaskIdleHook(); Idle Task of uCOSOSIdleCtr is used by the statistics task to determine how much CPU time (in percentage) is actually being consumed by the application software. 共一百五十四页任务(rn wu)控制块任务管理是通过对任务控制块(Task Control Block,TCB)的操作来实现的。 任务控制块是包含任务相关信息的数据结构包含了任务执行过程中所需要的
25、所有信息。任务控制块大都包括以下信息:任务的名字(mng zi)任务执行的起始地址任务的优先级任务的状态任务的硬件上下文(堆栈指针、PC和寄存器等)任务的队列指针等内容 共一百五十四页task nametask IDtask statustask prioritytask context(registers and flags of CPU)任务(rn wu)控制块示意图共一百五十四页任务(rn wu)控制块为节约内存,任务数量通常需要进行预先配置按照配置的任务数量初始化任务控制块,一个任务对应一个初始的任务控制块,形成一个空闲任务控制块链。在任务创建时,实时内核从空闲任务控制块链中为任务分配
26、一个任务控制块。随后(suhu)对任务的操作,都是基于对应的任务控制块来进行的。当任务被删除后,对应的任务控制块又会被实时内核回收到空闲任务控制块链。 共一百五十四页typedef struct os_tcb OS_STK *OSTCBStkPtr; /* Pointer to current top of stack*/#if OS_TASK_CREATE_EXT_EN 0 void *OSTCBExtPtr; /* Pointer to user definable data for TCB extension */ OS_STK *OSTCBStkBottom; /* Pointer t
27、o bottom of stack */ INT32U OSTCBStkSize; /* Size of task stack (in number of stack elements) */ INT16U OSTCBOpt; /* Task options as passed by OSTaskCreateExt() */ INT16U OSTCBId; /* Task ID (0.65535) */#endif struct os_tcb *OSTCBNext;/* Pointer to next TCB in the TCB list */ struct os_tcb *OSTCBPre
28、v;/* Pointer to previous TCB in the TCB list*/TCB of uCOS共一百五十四页#if (OS_Q_EN0)&(OS_MAX_QS0)|(OS_MBOX_EN0)|(OS_SEM_EN0)|(OS_MUTEX_EN0) OS_EVENT *OSTCBEventPtr; /* Pointer to event control block */#endif#if (OS_Q_EN 0) & (OS_MAX_QS 0) | (OS_MBOX_EN 0) void *OSTCBMsg; /* Message received from OSMboxPos
29、t() or OSQPost()*/#endifTCB of uCOS共一百五十四页#if (OS_VERSION = 251) & (OS_FLAG_EN 0) & (OS_MAX_FLAGS 0)#if OS_TASK_DEL_EN 0 OS_FLAG_NODE *OSTCBFlagNode; /* Pointer to event flag node*/#endif OS_FLAGS OSTCBFlagsRdy; /* Event flags that made task ready to run*/#endif INT16U OSTCBDly; /* Nbr ticks to dela
30、y task or, timeout waiting for event*/ INT8U OSTCBStat;/* Task status */ INT8U OSTCBPrio;/* Task priority (0 = highest, 63 = lowest) */TCB of uCOS共一百五十四页INT8U OSTCBX;/* Bit position in group corresponding to task priority (0.7)*/ INT8U OSTCBY;/* Index into ready table corresponding to task priority
31、*/ INT8U OSTCBBitX; /* Bit mask to access bit position in ready table */ INT8U OSTCBBitY; /* Bit mask to access bit position in ready group */#if OS_TASK_DEL_EN 0 BOOLEAN OSTCBDelReq; /* Indicates whether a task needs to delete itself */#endif OS_TCB;TCB of uCOS共一百五十四页任务(rn wu)切换任务切换(context switchi
32、ng)保存当前任务的上下文,并恢复需要(xyo)执行的任务的上下文的过程。当发生任务切换时:当前正在运行的任务的上下文就需要通过该任务的任务控制块保存起来;把需要投入运行的任务的上下文从对应的任务控制块中恢复出来。共一百五十四页任务1任务2任务3调度程序05101520253035404550运行等待就绪在时刻8即发生了任务切换,任务1的上下文需要保存到任务1的任务控制块中去。经过调度程序的处理,在时刻10任务2投入运行,需要把任务2的任务控制块中关于上下文的内容(nirng)恢复到CPU的寄存器中。 共一百五十四页任务(rn wu)1任务(rn wu)2实时内核调度程序保存任务1的上下文到T
33、CB1从TCB2恢复任务2的上下文保存任务2的上下文到TCB2从TCB1恢复任务1的上下文时间任务1执行一段时间后,由于某种原因,需要进行任务切换,进入实时内核的调度程序。调度程序首先把当前的上下文内容保存到任务1的任务控制块TCB1中,然后又把任务2的上下文从TCB2中恢复到CPU寄存器,随后任务2得到执行。任务2执行一段时间后,由于某种原因,需要进行任务切换,进入实时内核的调度程序。调度程序首先把当前的上下文内容保存到任务2的任务控制块TCB2中,然后又把任务1的上下文从TCB1中恢复到CPU寄存器,随后任务1得到执行。 共一百五十四页任务(rn wu)切换任务切换(qi hun)将导致任
34、务状态发生变化:当前正在运行的任务将由运行状态变为就绪或是等待状态;需要投入运行的任务则由就绪状态变为运行状态。共一百五十四页任务(rn wu)切换 任务切换(qi hun)基本步骤 1 保存任务上下文环境2 更新当前运行任务的控制块内容,将其状态改为就绪或等待状态3 将任务控制块移到相应队列(就绪队列或等待队列)4 选择另一个任务进行执行(调度)5 改变需投入运行任务的控制块内容,将其状态变为运行状态6 恢复需投入运行任务的上下文环境共一百五十四页任务(rn wu)切换任务切换(qi hun)时机中断、自陷运行任务因缺乏资源而被阻塞时间片轮转调度时高优先级任务处于就绪时退出共一百五十四页任务
35、(rn wu)切换中断、自陷如当I/O中断发生的时候如果I/O活动是一个或多个任务正在等待的事件,内核(ni h)将把相应的处于等待状态的任务转换为就绪状态同时,内核还将确定是否继续执行当前处于运行状态的任务,或是用高优先级的就绪任务抢占该任务自陷由于执行任务中当前指令所引起,将导致实时内核处理相应的错误或异常事件,并根据事件类型,确定是否进行任务的切换返回共一百五十四页任务(rn wu)切换运行任务因缺乏资源而被阻塞如,任务执行过程中进行I/O操作(cozu)时(如打开文件),如果此前该文件已被其他任务打开,将导致当前任务处于等待状态,而不能继续执行返回共一百五十四页任务(rn wu)切换时
36、间片轮转调度时内核将在时钟中断处理程序中确定当前正在运行的任务的执行时间是否(sh fu)已经超过了设定的时间片;如果超过了时间片,实时内核将停止当前任务的运行,把当前任务的状态变为就绪状态,并把另一个任务投入运行返回共一百五十四页任务(rn wu)切换高优先级任务处于就绪时如果采用基于优先级的抢占式调度算法,将导致当前任务停止(tngzh)运行,使更高优先级的任务处于运行状态共一百五十四页void OS_Sched (void) INT8U y; OS_ENTER_CRITICAL(); if (OSIntNesting = 0) & (OSLockNesting = 0) /* Sched
37、. only if all ISRs done & not locked */ y = OSUnMapTblOSRdyGrp; /*Get pointer to HPT ready*/ OSPrioHighRdy = (INT8U)(y OSTCBStkPtr = SP; OSTCBCur = OSTCBHighRdy; SP = OSTCBHighRdy-OSTCBStkPtr; POP R4, R3, R2 and R1 from the new stack; Execute a return from interrupt instruction;OS_TASK_SW()共一百五十四页Co
38、ntext-switch in uCOSData structures before context-switchCPULOW MEMORYHIGH MEMORYLOW MEMORYHIGH MEMORYOSTCBCurOSTCBHighRdyStack GrowthspR1R2R3R4PCPSW(1)(5)(4)(2)(3)OS_TCBOS_TCBLow Priority TaskHigh Priority TaskR3R4R2R1PCPSW共一百五十四页Data structures after saving the context of current taskCPULOW MEMORY
39、HIGH MEMORYLOW MEMORYHIGH MEMORYOSTCBCurOSTCBHighRdyStack GrowthspR1R2R3R4PCPSW(1)(3)OS_TCBOS_TCBLow Priority TaskHigh Priority TaskPSWPCR1R2R3R4R4R3R2R1PCPSW(2)(3)共一百五十四页CPULOW MEMORYHIGH MEMORYLOW MEMORYHIGH MEMORYOSTCBHighRdyspR1R2R3R4PCPSWOS_TCBOS_TCBLow Priority TaskHigh Priority TaskPSWPCR1R2R
40、3R4R4R3R2R1PCPSWData structures after restoring the context of high priority taskOSTCBCur(1)(2)(3)(4)(4)Stack Growth共一百五十四页LOW MEMORYHIGH MEMORYSWSEG_taskOFF_taskAXCXDXBXSPBPSIDIESDSLOW MEMORYHIGH MEMORYSWSEG_taskOFF_taskAXCXDXBXSPBPSIDIESDSSWSSSPAXBXDXDSESSIDIBPCSIPCXOS_TCBOS_TCBOSTCBCurOSTCBHighRd
41、yOSTCBCur-OSTCBStkPtr80 x86 CPU(Real Mode)OSTCBHighRdy-OSTCBStkPtrPUSH ESPUSH DSPUSHAOS_TASK_SW() (INT 128 )POP DSPOP ESPOPAIRETStack GrowthStack Growth(1)(2)(3)(4)(1)(2)(3)(4)(5)(6) (7) (8) (9)(10)(7)(8)(9)(10)Context-switch in ucOSBased on 80X86CPU real mode共一百五十四页_OSCtxSw PROC FAR PUSHA ; Save cu
42、rrent tasks context PUSH ES ; PUSH DS ; ; MOV AX, SEG _OSTCBCur ; Reload DS in case it was altered MOV DS, AX ; ; LES BX, DWORD PTR DS:_OSTCBCur ; OSTCBCur-OSTCBStkPtr = SS:SP MOV ES:BX+2, SS ; MOV ES:BX+0, SP ; ; CALL FAR PTR _OSTaskSwHook ; MOV AX, WORD PTR DS:_OSTCBHighRdy+2 ; OSTCBCur = OSTCBHig
43、hRdy MOV DX, WORD PTR DS:_OSTCBHighRdy ; MOV WORD PTR DS:_OSTCBCur+2, AX ; MOV WORD PTR DS:_OSTCBCur, DX ; ; MOV AL, BYTE PTR DS:_OSPrioHighRdy ; OSPrioCur = OSPrioHighRdy MOV BYTE PTR DS:_OSPrioCur, AL ; LES BX, DWORD PTR DS:_OSTCBHighRdy ; SS:SP = OSTCBHighRdy-OSTCBStkPtr MOV SS, ES:BX+2 ; MOV SP,
44、 ES:BX ; ; POP DS ; Load new tasks context POP ES ; POPA ; ; IRET ; Return to new task ;_OSCtxSw ENDPContext-switch under 80 x86共一百五十四页任务调度及上下文切换(qi hun)时间 保 存 调 度 恢 复 保存当前运行任务(rn wu)上下文的时间选择下一个任务的调度时间将要运行任务的上下文的恢复时间取决于任务上下文的定义和处理器的速度。不同种类的处理器,任务上下文的定义不同,其内容有多有少。 任务上下文切换的时间与调度(即选择下一个运行任务)的过程有关。强实时内核
45、要求调度过程所花费的时间是确定的,即不能随系统中就绪任务的数目而变化。与具体实现调度算法时所采用的数据结构有关。共一百五十四页任务(rn wu)队列任务(rn wu)队列通过任务(rn wu)控制块实现对系统中所有任务(rn wu)的管理。新任务CPU就绪队列等待队列超时调度等待资源获得资源释放CPU单就绪队列和单等待队列共一百五十四页任务(rn wu)队列队列由任务(rn wu)控制块构成 task nametask IDtask statustask prioritytask contexttask nametask IDtask statustask prioritytask conte
46、xttask nametask IDtask statustask prioritytask contextHead队列TCB1TCB2TCBnNULL任务队列共一百五十四页任务(rn wu)队列单等待队列资源对应的事件发生时,实时内核需要扫描整个等待队列,搜索等待该资源的任务,并按照一定的策略选取任务,把任务的任务控制块放置到就绪队列。如果系统(xtng)的资源和任务比较多,搜索等待该资源的任务所需要的时间就比较长,会影响整个系统(xtng)的实时性。可采用一种多等待队列的处理方式资源对应的事件发生时,能够在较短的时间内确立等待该资源的任务等待队列。 共一百五十四页新任务CPU就绪队列资源1
47、等待队列超时调度等待资源1获得资源1释放CPU资源2等待队列等待资源2获得资源2资源n等待队列等待资源n获得资源n单就绪队列(duli)和多等待队列(duli)共一百五十四页任务(rn wu)队列对于就绪任务,如果采用上述队列方式进行管理,在基于优先级的调度处理中,要获得当前(dngqin)具有最高优先级的就绪任务:方式一:任务就绪时,把就绪任务的任务控制块放在就绪队列的末尾。调度程序需要从就绪队列的头部到尾部进行一次遍历,才能获得就绪队列中具有最高优先级的任务;方式二:就绪队列按照优先级从高到低的顺序排列。新的就绪任务到达时,需要插入到就绪队列的合适位置,确保就绪队列保持优先级从高到低排列的
48、顺序性。共一百五十四页任务(rn wu)队列在这两种处理方式中,所花费的时间与任务(rn wu)数量有密切的关系,具有不确定性。为提高实时内核的确定性,可采用一种被称为优先级位图的就绪任务处理算法。 共一百五十四页Free TCBs after OS_TCBInit() in uCOS共一百五十四页优先级位图算法(sun f) OSRdyGrp: 优先级就绪(jix)组OSRdyTbl: 优先级就绪表35: 00100011char OSRdyGrp;char OSRdyTbl8;共一百五十四页下标二进制值00000000110000001020000010030000100040001000
49、0500100000601000000710000000优先级映射(yngsh)表OSMapTblchar OSMapTbl8 = 0 x01, 0 x02, 0 x04, 0 x08, 0 x10, 0 x20, 0 x40, 0 x80;OSMapTbl的数组元素的下标与任务优先级的高三位或低三位相对应。 OSMapTbl的数组元素对应的二进制值中,位为1的位表示(biosh)OSRdyGrp或是OSRdyTbl的对应位也为1。35: 00100011共一百五十四页INT8U const OSUnMapTbl = 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2,
50、 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1,
51、0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3,
52、0, 1, 0, 2, 0, 1, 0,5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 0 x00 to 0 x0F */* 0 x00 to 0 x1F */* 0 x00 to 0 x6F */* 0 x00 to 0 x7F */* 0 x00 to 0 x8F */* 0 x00 to 0 x9F */* 0 x00 to 0 xAF */* 0 x00 to 0 xBF */* 0 x00 to 0 xCF */* 0 x00 to 0 x
53、DF */* 0 x00 to 0 xEF */* 0 x00 to 0 x2F */* 0 x00 to 0 x3F */* 0 x00 to 0 x4F */ /* 0 x00 to 0 x5F */* 0 x00 to 0 xFF */OSRdyTbl3 contains 0 xE4OSRdyGrp contains 0 x68;3 = OSUnMapTbl 0 x68 ;2 = OSUnMapTbl 0 xE4 ;26 = (3 3;OSRdyTblpriority 3 |= OSMapTblpriority & 0 x07;35: 00100 011OSRdyGrp765432107
54、654321015141312111098232221201918171631302928272625243938373635343332474645544342414055545352515049486362616059585756OSRdyTblOSRdyTbl0OSRdyTbl1OSRdyTbl2OSRdyTbl3OSRdyTbl4OSRdyTbl5OSRdyTbl6OSRdyTbl70001000000001000共一百五十四页任务退出(tuch)就绪态 if(OSRdyTblpriority 3 &= OSMapTblpriority & 0 x07) = = 0)OSRdyGrp
55、&= OSMapTblpriority 3; 35: 00100 011OSRdyGrp765432101514131211109823222120191817163130292827262524393837363534333247464554434241405554535251504948636261605958575676543210OSRdyTbl 00001000-11110111 00010000-11101111OSRdyTbl0OSRdyTbl1OSRdyTbl2OSRdyTbl3OSRdyTbl4OSRdyTbl5OSRdyTbl6OSRdyTbl7共一百五十四页获取(huq)
56、进入就绪态的最高优先级 high3Bit = OSUnMapTblOSRdyGrp;low3Bit = OSUnMapTblOSRdyTblhigh3Bit; priority = (high3Bit 4/high3Bit 0 x88-3/low3BitOSRdyTbl0OSRdyTbl1OSRdyTbl2OSRdyTbl3OSRdyTbl4OSRdyTbl5OSRdyTbl6OSRdyTbl7共一百五十四页任务(rn wu)管理机制任务管理用来实现对任务状态的直接控制和访问。内核的任务管理是通过系统调用来体现,主要包括(boku)任务创建、任务删除、任务挂起、任务唤醒、设置任务属性等内容 。
57、创建任务删除任务挂起任务唤醒任务设置任务属性改变任务优先级获取任务信息任务管理功能共一百五十四页任务(rn wu)管理机制创建任务的过程即为分配任务控制块的过程。在创建任务时,通常需要确定任务的名字和任务的优先级等内容,确立(qul)任务所能使用的堆栈区域。任务创建成功后,通常会为用户返回一个标识该任务的ID,以实现对任务的引用管理。删除任务把任务从系统中去掉,释放对应的任务控制块。挂起/唤醒任务把任务变为等待状态,可通过唤醒任务操作把任务转换为就绪状态。共一百五十四页任务(rn wu)管理机制设置任务属性可以用来设置任务的抢占、时间片等特性,以确定是否允许(ynx)任务在执行过程中被抢占或是
58、对同优先级任务采用时间片轮转方式运行等。改变任务优先级用来根据需要改变任务的当前优先级。获取任务信息获得任务的当前优先级、任务的属性、任务的名字、任务的上下文、任务的状态等内容,便于用户进行决策。共一百五十四页创建(chungjin)任务任务创建为任务分配和初始化相关的数据结构。任务创建时通常需要使用如下信息:任务的名字任务的初始优先级任务栈任务属性任务对应的函数入口(r ku)地址任务对应函数的参数任务删除时的回调函数 共一百五十四页创建(chungjin)任务栈空间:由于不同任务运行时需要的的大小不同,由内核进行任务栈的分配就不能适应应用任务的多样性需求。通常由用户指定任务运行过程中需要使
59、用的栈空间。确定任务到底需要多少栈空间是一个比较困难的事情。大都需要进行一个反复修正的过程:在最开始的时候(sh hou),根据应用的类型,为任务分配一个比预期估计更大的栈空间;使用栈检测函数,定期监控任务对栈的使用情况,并据此对任务栈的大小进行调整。共一百五十四页创建(chungjin)任务任务可以包含多种属性任务是否可被抢占是否采用时间片轮转调度方式调度是否响应异步信号任务中开放的中断级别是否使用数字协处理器等内容如果任务需要进行浮点运算,在创建任务时实时内核应为任务分配浮点堆栈空间,以在任务切换时保存或是恢复(huf)数字协处理器的上下文内容。任务对应函数的入口地址表示所创建任务起始执行
60、的入口共一百五十四页创建(chungjin)任务任务创建通常需要完成以下工作:获得任务控制块TCB根据实时内核用户提供的信息初始化TCB为任务分配一个可以唯一标识任务的ID使任务处于就绪状态,把任务放置到就绪队列(duli)进行任务调度处理共一百五十四页INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio) OS_STK *psp; INT8U err; OS_ENTER_CRITICAL(); if (OSTCBPrioTblprio = (OS_TCB *)0) /* Make s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国汽车连杆行业运营模式及未来发展策略研究报告版
- 2024-2030年中国汽车延伸箱行业供需状况发展战略规划分析报告
- 2024年提供住宿社会救助服务项目规划申请报告范文
- 2024-2030年中国水环式造行业市场运营模式及未来发展动向预测报告
- 2024-2030年中国氨纶纤维行业前景预测及发展潜力研究报告权威版
- 2022年大学生物科学专业大学物理下册期中考试试题B卷-含答案
- 旋转楼梯钢结构施工安全方案
- 制造业税务筹划方案
- 污水治理与回用技术实施方案
- 办公楼内墙隔音施工方案
- GB/T 20721-2022自动导引车通用技术条件
- 外包施工人员入场安全培训考试卷(项目经理)
- 纤维素的分子结构课件
- 四年级上册第十课美化我的文字《美化我的文字》课标版四年级上册
- 领导力与团队建设教材课件
- 《思想道德与法治》 课件 第六章 学习法治思想 提升法治素养
- 全文图解进一步加强新时代中小学思政课建设的意见教育学习PPT
- 同仁堂-老字号的营销典范案例分析课件
- 《城镇燃气输配工程施工及验收规范》CJJ33-
- 山西省太原市2022-2023学年高一上学期期中质量监测生物试题 (含答案)
- 欧盟允许使用的食品添加剂
评论
0/150
提交评论