CN101290591B - 一种嵌入式操作系统中切换任务的方法和单元 - Google Patents

一种嵌入式操作系统中切换任务的方法和单元 Download PDF

Info

Publication number
CN101290591B
CN101290591B CN2008101143223A CN200810114322A CN101290591B CN 101290591 B CN101290591 B CN 101290591B CN 2008101143223 A CN2008101143223 A CN 2008101143223A CN 200810114322 A CN200810114322 A CN 200810114322A CN 101290591 B CN101290591 B CN 101290591B
Authority
CN
China
Prior art keywords
task
field data
common stack
moving
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2008101143223A
Other languages
English (en)
Other versions
CN101290591A (zh
Inventor
艾国
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Vimicro Corp
Original Assignee
Vimicro Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Vimicro Corp filed Critical Vimicro Corp
Priority to CN2008101143223A priority Critical patent/CN101290591B/zh
Publication of CN101290591A publication Critical patent/CN101290591A/zh
Application granted granted Critical
Publication of CN101290591B publication Critical patent/CN101290591B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种嵌入式操作系统中切换任务的方法和单元;单元,包括:存储模块、共用堆栈控制模块;所述存储模块用于存储多个任务共用的堆栈;所述共用堆栈控制模块用于在接收切换任务的指令后,将当前运行任务的现场数据存放在所述共用堆栈中,查找待运行任务的现场数据是否保存在共用堆栈中,如果在则找到其对应的现场数据,将该现场数据调换至共用堆栈中其它数据的上方。本发明的技术方案可以解决任务堆栈浪费存储空间的问题,适用于存储空间紧缺的系统;并且在任务切换时不需要更改CPU的SP指针。本发明的优化方案还可以进一步节省存储空间;另一优化方案可以降低任务切换时的工作量,从而提高切换效率。

Description

一种嵌入式操作系统中切换任务的方法和单元
技术领域
本发明涉及嵌入式操作系统,尤其涉及一种嵌入式操作系统中切换任务的方法和单元。
背景技术
嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统(包括硬、软件系统)极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器browser等。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
中断是指由于某个事件的发生,CPU暂停当前正在执行的其它程序,转而执行处理该事件的一个程序。该事件的程序执行完成后,CPU接着执行被暂停的程序,这个过程称为中断。根据中断源的位置,有两种类型的中断:有的中断源在CPU的内部,称为内部中断。大多数的中断源在CPU的外部,称为外部中断。根据中断引脚的不同,或者CPU响应中断的不同条件,也可以把中断划分为可屏蔽中断和不可屏蔽中断两种。有了这种中断机制,CPU才能有条不紊地“同时”完成多个任务,中断机制实质上帮助CPU提高了并发“处理”能力。
是在内存中的固定位置,各任务所占用的空间完全独立,所以不需要保存。
变量在堆栈中的位置,一般编译器中,对于一个存在函数调用嵌套的C程序来说,大部分编译器将传递的参数和函数本身的局部变量放在了堆栈中,编译器会自动生成压栈(push)和弹栈(pop)代码,以保存上级函数的运行寄存器。假设函数main()调用test1(),而test1()调用test2(),则在执行test2()中的代码时,堆栈映像如图1所示(ARM CPU的情况)。对于RTOS系统,堆栈中的各种数据就是一个任务的现场。一般CPU的堆栈指针SP只有一个,在进行任务切换时,必须将挂起任务所使用的堆栈内容保存起来,以便使该任务在下次唤醒时能从原地继续运行。
在现有技术中,为了保存任务堆栈中的数据,为每个任务定义一个数组变量作为堆栈,在任务切换时,将CPU堆栈指针SP指向当前运行的任务对应的数组中的某个元素,即栈顶,如图2所示。而各任务的堆栈空间都是预留好的。
在图2中,为每个任务定义一个数组变量作为堆栈,数组的大小一般根据可能出现的任务需要的最大堆栈来分配,任务所需的最大堆栈一般很难确定,一般根据经验值来确定,而且堆栈要确保不能溢出,一旦溢出就很麻烦,因此在实际中每个任务需要分配比实际大很多的一个堆栈,这样每个任务的堆栈都会有浪费,一般在操作系统中任务的个数是比较多的,因此对于整个系统而言,存储资源的浪费就很明显。
发明内容
本发明要解决的技术问题是提供一种嵌入式操作系统中切换任务的方法和单元,能够节省任务堆栈占用的存储空间。
为了解决上述问题,本发明提供了一种嵌入式操作系统中切换任务的方法,包括:
建立多个任务共用的共用堆栈;切换任务时,先将当前运行任务的现场数据存放在所述共用堆栈中;
查找待运行任务的现场数据是否保存在共用堆栈中,如果在则找到待运 行任务的现场数据,将该现场数据调换至共用堆栈中其它数据的上方。
进一步的,将当前运行任务的现场数据存放在所述共用堆栈中时,记录该当前运行任务现场数据存放起点和终点的地址;
查找待运行任务的现场数据是否保存在共用堆栈中是指:查找所述待运行任务现场数据对应的存放起点和终点的地址,判断该起点和终点是否位于所述共用堆栈中;
待运行任务的现场数据根据待运行任务现场数据对应的存放起点和终点的地址在所述共用堆栈中找到。
进一步的,将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体是指:
将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新下移的各任务对应的存放起点和终点的地址。
进一步的,将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体是指:
在共用堆栈中待运行任务现场数据上方的存储空间中查找,是否存在现场数据长度小于或等于待运行任务现场数据长度的任务;
如果不存在则将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新下移的各任务对应的存放起点和终点的地址;
如果存在则从查找到的任务当中选择一个作为目标任务,将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方;将目标任务的现场数据复制或移动到待运行任务现场数据原先的存放位置,更新该任务对应的存放起点和终点的地址;将共用堆栈中在目标任务现场数据原先存放位置以上的所有数据依次下移L1,L1为目标任务现场数据的长度;更新下移的各任务对应的存放起点和终点的地址。
进一步的,复制或移动现场数据时直接进行,或先将待运行任务的现场数据复制/移动到临时存储空间中,再复制/移动到共用堆栈中。
本发明还提供了一种嵌入式操作系统中切换任务的单元,包括:存储模块、共用堆栈控制模块;
所述存储模块用于存储多个任务共用的共用堆栈;
所述共用堆栈控制模块用于在接收切换任务的指令后,将当前运行任务的现场数据存放在所述共用堆栈中,查找待运行任务的现场数据是否保存在共用堆栈中,如果在则找到待运行任务的现场数据,将该现场数据调换至共用堆栈中其它数据的上方。
进一步的,所述共用堆栈控制模块将当前运行任务的现场数据存放在所述共用堆栈中时,将其存放起点和终点的地址记录在任务控制块TCB中;
所述共用堆栈控制模块查找待运行任务的现场数据是否保存在共用堆栈中是指:共用堆栈控制模块在TCB中查找所述待运行任务现场数据对应的存放起点和终点的地址,判断该起点和终点是否位于所述共用堆栈中;
所述共用堆栈控制模块根据待运行任务现场数据对应的存放起点和终点的地址在所述共用堆栈中找到待运行任务的现场数据。
进一步的,所述共用堆栈控制模块将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体是指:
共用堆栈控制模块将待运行任务的现场数据按顺序复制或移动到共用堆栈中当前运行任务的现场数据的上方,然后将共用堆栈中待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新TCB中下移的各任务对应的存放起点和终点的地址。
进一步的,所述共用堆栈控制模块将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体是指:
共用堆栈控制模块在共用堆栈中找到现场数据位于待运行任务现场数据上方的任务,根据TCB中的记录确定这些任务及待运行任务的现场数据
如果不存在则将待运行任务的现场数据按顺序复制或移动到共用堆栈中当前运行任务的现场数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新TCB中下移的各任务对应的存放起点和终点的地址;
如果存在则选择一个作为目标任务;将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方;将目标任务的现场数据复制或移动到待运行任务现场数据原先的存放位置,更新TCB中该任务对应的存放起点和终点的地址;将共用堆栈中在目标任务现场数据原先存放位置以上的所有数据依次下移L1,L1为目标任务现场数据的长度;更新TCB中下移的各任务对应的存放起点和终点的地址。
进一步的,所述存储模块中还包括一临时存储空间;
共用堆栈控制模块复制或移动待运行任务的现场数据时先将其复制/移动到所述临时存储空间中,再复制/移动到共用堆栈中。
本发明的技术方案可以解决任务堆栈浪费存储空间的问题,适用于存储空间紧缺的系统;并且在任务切换时不需要更改CPU的SP指针。本发明的优化方案还可以进一步节省存储空间;另一优化方案可以降低任务切换时的工作量,从而提高切换效率。
附图说明
图1为一种堆栈的映像图;
图2为现有技术中切换任务时的堆栈使用示意图;
图3为本发明中的共用堆栈示意图;
图4为应用实例中的堆栈使用示意图;
图5为应用实例中的流程示意图。
具体实施方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
堆栈是一种先进后出的存储器,即第一条进栈的数据将位于堆栈的最底端(即栈底),而最后一条进栈的数据将位于堆栈的最顶端。本文中,为了方便说明,将从栈顶到栈底的方向称为“向下”,而从栈底到栈顶的方向称为“向上”,堆栈的栈顶和栈底分别指的是堆栈中的上、下边界,即一个数据的位置在先进栈的数据的上方。一个任务的现场数据的长度是指:数据的总条数或数据占用的存储空间的大小;比如从图1来看,一条数据占用堆栈中的“一格”。
本发明提供了一种嵌入式操作系统中切换任务的方法:
建立多个任务共用的堆栈;切换任务时,先将当前运行任务的现场数据存放在所述共用堆栈中;
查找待运行任务的现场数据是否保存在共用堆栈中,如果在则找到其对应的现场数据,将该现场数据调换至共用堆栈中其它数据的上方。
其中,所述共用堆栈的大小比现有技术中所需要的堆栈的总存储空间要小的多,假设现有的方法中每个堆栈空间大小为K(K为任务可能出现的任务所需要的最大存储空间大小),任务数为N,则需要的堆栈总空间为N×K;而在本发明中,考虑到各任务互补的情况,即各任务不会都需要占用大小为K的存储空间,假设各任务平均的堆栈空间大小为M,共用堆栈中存放N个任务的现场数据,则共用堆栈的总空间大小等于或稍大于M×N即可,差不多是现有方法中的二分之一或者更小。
其中,将当前运行任务的现场数据存放在所述共用堆栈中时,可以记录该当前运行任务现场数据存放起点和终点的地址。实际应用时,也可以记录起点和终点地址中的任一个,以及堆栈长度;可以但不限于记录于TCB(任务控制块)中。
其中查找待运行任务的现场数据是否保存在共用堆栈中可以是指:查找所述待运行任务现场数据对应的存放起点和终点的地址,判断该起点和终点是否位于所述共用堆栈中。起点和终点地址如记录于TCB中,则在TCB中查找。实际应用时,如果记录的是起点和终点地址中的任一个及堆栈长度, 则这一步骤相应判断起点/终点地址是否位于所述共用堆栈中。
其中,待运行任务的现场数据可以根据待运行任务现场数据对应的存放起点和终点的地址在所述共用堆栈中找到。实际应用时,如果记录的是起点和终点地址中的任一个,以及堆栈长度,则这一步骤相应根据起点/终点地址以及堆栈长度在所述共用堆栈中找到待运行任务的现场数据。
其中,将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体可以是指:将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新下移的各任务对应的存放起点和终点的地址。
实际应用时,如果记录的是起点和终点地址中的任一个,以及堆栈长度,则更新相应地址即可。
复制或移动现场数据时可以直接进行,也可以通过一个临时存储空间进行中转,即先将待运行任务的现场数据复制/移动到该临时存储空间中,再复制/移动到共用堆栈中;如果采用中转的方法,则可以在将待运行任务的现场数据复制/移动到临时存储空间后,先下移待运行任务现场数据原先存放位置以上的所有数据,下移后再将临时存储空间中的现场数据复制/移动到共用堆栈中所有数据的上方,更新下移的各任务和待运行任务对应的存放起点和终点的地址。这个临时存储空间也可以用共用堆栈中顶部的空间来代替,这样是栈的空间占用的更少,如图3所示。
本文中,复制是指不删除原始数据的方式,而移动是指删除原始数据的方式;下移时可以是采用复制的方式,也可以采用移动的方式。
当调换完成后,共用堆栈中各任务的现场数据是从栈底开始相邻存储的,各现场数据间没有间隔,比如对于一个存储位置位于共用堆栈中间的任务而言,其第一条数据(最先进栈的数据)和位于其下面的任务的最后一条数据(最后进栈的数据)是相邻的,而其最后一条数据和位于其上方的任务的第一条数据是相邻的。可以看出,由于在调换前后总的堆栈长度不变,因此切换任务时CPU的SP指针是不用改变的。
其中,将待运行任务的现场数据调换至共用堆栈中所有数据的上方也可以是指:
在共用堆栈中待运行任务现场数据上方的存储空间中查找,是否存在现场数据长度小于或等于待运行任务现场数据长度的任务;
如果不存在则将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新下移的各任务对应的存放起点和终点的地址;
如果存在则从查找到的任务当中选择一个作为目标任务,将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方;将目标任务的现场数据复制或移动到待运行任务现场数据原先的存放位置,更新该任务对应的存放起点和终点的地址;将共用堆栈中在目标任务现场数据原先存放位置以上的所有数据依次下移L1,L1为目标任务现场数据的长度;更新下移的各任务对应的存放起点和终点的地址。
选择目标任务时,选择现场数据长度和待运行任务现场数据长度最接近,或在共用堆栈中与待运行任务现场数据存放位置间隔最远的任务。
现场数据长度可以从TCB中直接找到,或由存放起点、终点地址的差值得到。
这样做的优点在于:目标任务的现场数据在共用堆栈中与待运行任务现场数据存放位置间隔越远,调换时的工作量就能降低越多,因为这两个任务间隔的那些任务都可以不用参与下移了。但是,当查找到的任务的现场数据小于待运行任务的现场数据长度时,调换完成后该查找到的任务的现场数据与其它任务(位于该任务上方,或下方,或上下方都有)的数据之间会有间隔,相当于是存储空间的碎片;这样会需要常常进行碎片整理,以免堆栈中的存储空间被浪费而导致溢出。
本发明还提供了一种嵌入式操作系统中切换任务的单元,包括:存储模块、共用堆栈控制模块。
所述存储模块用于存储多个任务共用的堆栈;
所述共用堆栈控制模块用于在接收CPU切换任务的指令后,将当前运行任务的现场数据存放在所述共用堆栈中,查找待运行任务的现场数据是否保存在共用堆栈中,如果在则找到其对应的现场数据,将该现场数据调换至共用堆栈中其它数据的上方。
其中,所述共用堆栈控制模块将当前运行任务的现场数据存放在所述共用堆栈中时,可以将当前运行任务现场数据存放起点和终点的地址记录在TCB中。实际应用时,也可以记录起点和终点地址中的任一个,以及堆栈长度。实际应用时也不限于记录于TCB中。
其中,所述共用堆栈控制模块查找待运行任务的现场数据是否保存在共用堆栈中可以是指:共用堆栈控制模块在TCB中查找所述待运行任务现场数据对应的存放起点和终点的地址,判断该起点和终点是否位于所述共用堆栈中。实际应用时,如果记录的是起点和终点地址中的任一个,以及堆栈长度,则共用堆栈控制模块相应判断起点/终点地址是否位于所述共用堆栈中。
其中,所述共用堆栈控制模块可以根据待运行任务现场数据对应的存放起点和终点的地址在所述共用堆栈中找到待运行任务的现场数据。实际应用时,如果记录的是起点和终点地址中的任一个,以及堆栈长度,则共用堆栈控制模块相应根据起点/终点地址以及堆栈长度在所述共用堆栈中找到待运行任务的现场数据。
其中,所述共用堆栈控制模块将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体可以是指:共用堆栈控制模块将待运行任务的现场数据按顺序复制或移动到共用堆栈中当前运行任务的现场数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新TCB中下移的各任务对应的存放起点和终点的地址。
实际应用时,如果记录的是起点和终点地址中的任一个,以及堆栈长度,则更新相应地址即可。
共用堆栈控制模块可以直接复制或移动现场数据。
如果所述存储模块中还包括一临时存储空间,则共用堆栈控制模块也可以先将待运行任务的现场数据复制/移动到该临时存储空间中,再复制/移动到共用堆栈中;此时,共用堆栈控制模块可以在将待运行任务的现场数据复制/移动到临时存储空间后,先下移待运行任务现场数据原先存放位置以上的所有数据,下移后再将临时存储空间中的现场数据复制/移动到共用堆栈中所有数据的上方,更新下移的各任务和待运行任务对应的存放起点和终点的地址。下移时可以是采用复制的方式,也可以采用移动的方式。
其中,所述共用堆栈控制模块将待运行任务的现场数据调换至共用堆栈中所有数据的上方也可以是指:
共用堆栈控制模块在共用堆栈中找到现场数据位于待运行任务现场数据上方的任务,根据TCB中的记录确定这些任务及待运行任务的现场数据长度——可以直接在TCB里找到记录,或由存放起点、终点地址的差值得到;判断这些任务中是否存在现场数据长度小于或等于待运行任务现场数据长度的任务;
如果不存在则将待运行任务的现场数据按顺序复制或移动到共用堆栈中当前运行任务的现场数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新TCB中下移的各任务对应的存放起点和终点的地址;
如果存在则选择一个作为目标任务;将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方;将目标任务的现场数据复制或移动到待运行任务现场数据原先的存放位置,更新TCB中该任务对应的存放起点和终点的地址;将共用堆栈中在目标任务现场数据原先存放位置以上的所有数据依次下移L1,L1为目标任务现场数据的长度;更新TCB中下移的各任务对应的存放起点和终点的地址。
所述共用堆栈控制模块选择现场数据长度和待运行任务现场数据长度最接近,或在共用堆栈中与待运行任务现场数据存放位置间隔最远的任务作为目标任务。
下面用本发明的两个应用实例进一步加以说明。
应用实例一是简单的两个任务的切换情况,其中堆栈情况如图4所示;假定任务1首次运行时任务栈为空。运行一段时间后任务2运行,堆栈空间继续往上生长。这次任务切换不需要修改CPU的SP数值,但需要记下任务1的现场数据存放起点位置SP1和长度。在任务2运行一段时间后,RTOS又切换到任务1运行。在切换时,不能简单地将SP指针修改回SP1的数值,因为这样堆栈向上生长时会破坏任务2堆栈中的数据。办法是记下任务2的现场数据存放起点位置SP2和长度,将原来保存的任务1的现场数据移动到靠栈顶的位置,而将任务2的现场数据下移到靠栈底的位置,堆栈指针SP实际上不需要修改。
应用实例二中切换时的流程图如图5所示,主要步骤是:
501、CPU指示切换到任务i运行;
502、判断任务i的现场数据是否位于共用堆栈最上方,如果是则不用切换,进行步骤508;如果不是则进行步骤503;
503、将任务i的现场数据复制到临时堆栈中;
504、判断任务i的现场数据是否在共用堆栈中,如果不在则说明任务i为新任务,完成切换,进行步骤508;如果在则进行步骤505;
505、将共用堆栈中任务i的现场数据上方的数据都下移L,L为任务i的现场数据的长度;
506、更新下移的各任务对应的存放起点和终点地址;
507、将临时堆栈中的现场数据复制到共用堆栈中所有数据的上方;更新待运行任务对应的存放起点和终点地址;
508、结束。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。

Claims (10)

1.一种嵌入式操作系统中切换任务的方法,包括:
建立多个任务共用的共用堆栈;切换任务时,先将当前运行任务的现场数据存放在所述共用堆栈中;
查找待运行任务的现场数据是否保存在共用堆栈中,如果在则找到待运行任务的现场数据,将该现场数据调换至共用堆栈中其它数据的上方。
2.如权利要求1所述的方法,其特征在于:
将当前运行任务的现场数据存放在所述共用堆栈中时,记录该当前运行任务现场数据存放起点和终点的地址;
查找待运行任务的现场数据是否保存在共用堆栈中是指:查找所述待运行任务现场数据对应的存放起点和终点的地址,判断该起点和终点是否位于所述共用堆栈中;
待运行任务的现场数据根据待运行任务现场数据对应的存放起点和终点的地址在所述共用堆栈中找到。
3.如权利要求2所述的方法,其特征在于,将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体是指:
将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新下移的各任务对应的存放起点和终点的地址。
4.如权利要求2所述的方法,其特征在于,将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体是指:
在共用堆栈中待运行任务现场数据上方的存储空间中查找,是否存在现场数据长度小于或等于待运行任务现场数据长度的任务;
如果不存在则将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置 以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新下移的各任务对应的存放起点和终点的地址;
如果存在则从查找到的任务当中选择一个作为目标任务,将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方;将目标任务的现场数据复制或移动到待运行任务现场数据原先的存放位置,更新该任务对应的存放起点和终点的地址;将共用堆栈中在目标任务现场数据原先存放位置以上的所有数据依次下移L1,L1为目标任务现场数据的长度;更新下移的各任务对应的存放起点和终点的地址。
5.如权利要求3或4所述的方法,其特征在于:
复制或移动现场数据时直接进行,或先将待运行任务的现场数据复制/移动到临时存储空间中,再复制/移动到共用堆栈中。
6.一种嵌入式操作系统中切换任务的单元,其特征在于,包括:存储模块、共用堆栈控制模块;
所述存储模块用于存储多个任务共用的共用堆栈;
所述共用堆栈控制模块用于在接收切换任务的指令后,将当前运行任务的现场数据存放在所述共用堆栈中,查找待运行任务的现场数据是否保存在共用堆栈中,如果在则找到待运行任务的现场数据,将该现场数据调换至共用堆栈中其它数据的上方。
7.如权利要求6所述的单元,其特征在于:
所述共用堆栈控制模块将当前运行任务的现场数据存放在所述共用堆栈中时,将其存放起点和终点的地址记录在任务控制块TCB中;
所述共用堆栈控制模块查找待运行任务的现场数据是否保存在共用堆栈中是指:共用堆栈控制模块在TCB中查找所述待运行任务现场数据对应的存放起点和终点的地址,判断该起点和终点是否位于所述共用堆栈中;
所述共用堆栈控制模块根据待运行任务现场数据对应的存放起点和终点的地址在所述共用堆栈中找到待运行任务的现场数据。 
8.如权利要求7所述的单元,其特征在于,所述共用堆栈控制模块将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体是指: 
共用堆栈控制模块将待运行任务的现场数据按顺序复制或移动到共用堆栈中当前运行任务的现场数据的上方,然后将共用堆栈中待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新TCB中下移的各任务对应的存放起点和终点的地址。 
9.如权利要求7所述的单元,其特征在于,所述共用堆栈控制模块将待运行任务的现场数据调换至共用堆栈中所有数据的上方具体是指: 
共用堆栈控制模块在共用堆栈中找到现场数据位于待运行任务现场数据上方的任务,根据TCB中的记录确定这些任务及待运行任务的现场数据长度;判断这些任务中是否存在现场数据长度小于或等于待运行任务现场数据长度的任务; 
如果不存在则将待运行任务的现场数据按顺序复制或移动到共用堆栈中当前运行任务的现场数据的上方,然后将共用堆栈中在待运行任务现场数据原先存放位置以上的所有数据依次下移L,L为待运行任务现场数据的长度;更新TCB中下移的各任务对应的存放起点和终点的地址; 
如果存在则选择一个作为目标任务;将待运行任务的现场数据按顺序复制或移动到共用堆栈中所有数据的上方;将目标任务的现场数据复制或移动到待运行任务现场数据原先的存放位置,更新TCB中该任务对应的存放起点和终点的地址;将共用堆栈中在目标任务现场数据原先存放位置以上的所有数据依次下移L1,L1为目标任务现场数据的长度;更新TCB中下移的各任务对应的存放起点和终点的地址。 
10.如权利要求8或9所述的单元,其特征在于: 
所述存储模块中还包括一临时存储空间; 
共用堆栈控制模块复制或移动待运行任务的现场数据时先将其复制/移动到所述临时存储空间中,再复制/移动到共用堆栈中。 
CN2008101143223A 2008-06-03 2008-06-03 一种嵌入式操作系统中切换任务的方法和单元 Expired - Fee Related CN101290591B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008101143223A CN101290591B (zh) 2008-06-03 2008-06-03 一种嵌入式操作系统中切换任务的方法和单元

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101143223A CN101290591B (zh) 2008-06-03 2008-06-03 一种嵌入式操作系统中切换任务的方法和单元

Publications (2)

Publication Number Publication Date
CN101290591A CN101290591A (zh) 2008-10-22
CN101290591B true CN101290591B (zh) 2011-10-12

Family

ID=40034858

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101143223A Expired - Fee Related CN101290591B (zh) 2008-06-03 2008-06-03 一种嵌入式操作系统中切换任务的方法和单元

Country Status (1)

Country Link
CN (1) CN101290591B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102438062B (zh) * 2010-09-29 2014-12-24 联想移动通信科技有限公司 多任务切换的方法、装置和移动终端
CN102063325B (zh) * 2011-01-06 2013-04-03 哈尔滨工业大学 一种嵌入51系列单片机的多任务实时操作系统的实现方法
CN105138289A (zh) * 2015-08-20 2015-12-09 上海联影医疗科技有限公司 计算组件的存储管理方法和装置
CN107608775A (zh) * 2017-09-12 2018-01-19 南京中探海洋物联网有限公司 一种嵌入式系统的多任务实时操作方法
CN109240815B (zh) * 2018-08-24 2021-07-23 珠海格力电器股份有限公司 一种共享堆栈的多任务运行方法、装置及设备
CN110362510B (zh) * 2019-06-27 2021-07-16 珠海市杰理科技股份有限公司 动态堆栈分配方法、装置、计算机设备和存储介质
CN110618946A (zh) * 2019-08-19 2019-12-27 中国第一汽车股份有限公司 堆栈内存分配方法、装置、设备和存储介质
CN112631762B (zh) * 2020-12-31 2023-10-27 东软睿驰汽车技术(沈阳)有限公司 一种车辆任务切换的方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1783020A (zh) * 2005-09-12 2006-06-07 浙江大学 基于PowerPC体系结构的嵌入式操作系统的中断管理方法
JP2007257257A (ja) * 2006-03-23 2007-10-04 Matsushita Electric Ind Co Ltd マルチタスクシステムにおけるタスク実行環境切替え方法
CN101065728A (zh) * 2004-11-30 2007-10-31 皇家飞利浦电子股份有限公司 优先化任务之间的有效切换

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101065728A (zh) * 2004-11-30 2007-10-31 皇家飞利浦电子股份有限公司 优先化任务之间的有效切换
CN1783020A (zh) * 2005-09-12 2006-06-07 浙江大学 基于PowerPC体系结构的嵌入式操作系统的中断管理方法
JP2007257257A (ja) * 2006-03-23 2007-10-04 Matsushita Electric Ind Co Ltd マルチタスクシステムにおけるタスク実行環境切替え方法

Also Published As

Publication number Publication date
CN101290591A (zh) 2008-10-22

Similar Documents

Publication Publication Date Title
CN101290591B (zh) 一种嵌入式操作系统中切换任务的方法和单元
CN101290590B (zh) 一种嵌入式操作系统中切换任务的方法和单元
CN101807073B (zh) 一种分布式控制系统的历史数据处理方法和装置
CN100590609C (zh) 一种基于非连续页的动态内存管理方法
CN101233498B (zh) 快闪存储器中利用直接数据文件存储的数据操作
CN100349150C (zh) 通过直接存储器访问控制器传输数据的系统及方法
US10459661B2 (en) Stream identifier based storage system for managing an array of SSDs
US11960747B2 (en) Moving data in a memory and command for memory control
US9477413B2 (en) System and method for managing access requests to a memory storage subsystem
CN105069134A (zh) 一种Oracle统计信息自动收集方法
CN100383792C (zh) 缓存数据库数据组织方法
CN101968755B (zh) 一种自适应应用负载变化的快照生成方法
CN100389420C (zh) 用协处理器加速文件系统操作的方法及装置
CN101529383A (zh) 任务处理装置
CN108920267A (zh) 任务处理装置
CN101013415A (zh) 用于多处理器阵列的线程感知分布式软件系统
CN100489770C (zh) 处理指令的系统和方法
US9836516B2 (en) Parallel scanners for log based replication
CN101324851A (zh) 线程调度方法及其装置
CN101093454A (zh) 一种在分布式系统中执行sql脚本文件的方法和装置
WO2015081889A1 (zh) 一种缓存系统和方法
CN105376269B (zh) 虚拟机存储系统及其实现方法和装置
CN102436393B (zh) 任务处理装置
JP3034873B2 (ja) 情報処理装置
CN102567220A (zh) Cache存取的控制方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20111012

Termination date: 20120603