CN101290590A - 一种嵌入式操作***中切换任务的方法和单元 - Google Patents
一种嵌入式操作***中切换任务的方法和单元 Download PDFInfo
- Publication number
- CN101290590A CN101290590A CNA2008101143219A CN200810114321A CN101290590A CN 101290590 A CN101290590 A CN 101290590A CN A2008101143219 A CNA2008101143219 A CN A2008101143219A CN 200810114321 A CN200810114321 A CN 200810114321A CN 101290590 A CN101290590 A CN 101290590A
- Authority
- CN
- China
- Prior art keywords
- stack
- task
- storehouse
- field data
- odd
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 21
- 230000008859 change Effects 0.000 claims description 19
- 230000008569 process Effects 0.000 claims description 7
- 239000002699 waste material Substances 0.000 abstract description 7
- 238000005457 optimization Methods 0.000 abstract 1
- 238000007726 management method Methods 0.000 description 29
- 230000006870 function Effects 0.000 description 5
- 238000000151 deposition Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012913 prioritisation Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004615 ingredient Substances 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种嵌入式操作***中切换任务的方法和单元;其中单元包括存储模块,堆栈管理模块;所述存储模块中包括用于保存当前运行任务的现场数据的临时工作栈;所述堆栈管理模块用于接收任务切换命令后,确定当前运行任务的现场数据的大小N并记录,以及将当前运行任务的现场数据存放在一个存储空间大小至少等于N的堆栈中,并记录该任务与该堆栈的对应关系。本发明的技术方案可以解决任务堆栈浪费存储空间的问题,基本不会浪费任何空间,对于存储空间紧缺,切换不是特别频繁的***更加适用;本发明的优化方案可以提高切换时的效率,节省软硬件资源。
Description
技术领域
本发明涉及嵌入式操作***,尤其涉及一种嵌入式操作***中切换任务的方法和单元。
背景技术
嵌入式操作***是一种支持嵌入式***应用的操作***软件,它是嵌入式***(包括硬、软件***)极为重要的组成部分,通常包括与硬件相关的底层驱动软件、***内核、设备驱动接口、通信协议、图形界面、标准化浏览器browser等。与通用操作***相比较,嵌入式操作***在***实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
中断是指由于某个事件的发生,CPU暂停当前正在执行的其它程序,转而执行处理该事件的一个程序。该事件的程序执行完成后,CPU接着执行被暂停的程序,这个过程称为中断。根据中断源的位置,有两种类型的中断:有的中断源在CPU的内部,称为内部中断。大多数的中断源在CPU的外部,称为外部中断。根据中断引脚的不同,或者CPU响应中断的不同条件,也可以把中断划分为可屏蔽中断和不可屏蔽中断两种。有了这种中断机制,CPU才能有条不紊地“同时”完成多个任务,中断机制实质上帮助CPU提高了并发“处理”能力。
任务上下文是指任务切换要保存的数据,也叫上下文,简单地说,一个任务可看作一个运行中的C函数。对于抢先式RTOS(实时操作***)来说,在任务切换时,应保存当前任务的各种现场数据。现场数据包括局部变量、各个CPU寄存器、堆栈指针和程序被中止的任务指针。CPU寄存器是任何任务代码均会用到的;而局部变量,一般的编译器是将其它安排在堆栈空间中,堆栈指针也是各任务共用的,所以也需要保存。而对于全局变量,由于一般是在内存中的固定位置,各任务所占用的空间完全独立,所以不需要保存。
变量在堆栈中的位置,一般编译器中,对于一个存在函数调用嵌套的C程序来说,大部分编译器将传递的参数和函数本身的局部变量放在了堆栈中,编译器会自动生成压栈(push)和弹栈(pop)代码,以保存上级函数的运行寄存器。假设函数main()调用test1(),而test1()调用test2(),则在执行test2()中的代码时,堆栈映像如图1所示(ARM CPU的情况)。对于RTOS***,堆栈中的各种数据就是一个任务的现场。一般CPU的堆栈指针SP只有一个,在进行任务切换时,必须将挂起任务所使用的堆栈内容保存起来,以便使该任务在下次唤醒时能从原地继续运行。
在现有技术中,为了保存任务堆栈中的数据,为每个任务定义一个数组变量作为堆栈,在任务切换时,将CPU堆栈指针SP指向当前运行的任务对应的数组中的某个元素,即栈顶,如图2所示。而各任务的堆栈空间都是预留好的。
在图2中,为每个任务定义一个数组变量作为堆栈,数组的大小一般根据可能出现的任务需要的最大堆栈来分配,任务所需的最大堆栈一般很难确定,一般根据经验值来确定,而且堆栈要确保不能溢出,一旦溢出就很麻烦,因此在实际中每个任务需要分配比实际大很多的一个堆栈,这样每个任务的堆栈都会有浪费,一般在操作***中任务的个数是比较多的,因此对于整个***而言,存储资源的浪费就很明显。
发明内容
本发明要解决的技术问题是提供一种嵌入式操作***中切换任务的方法和单元,能够节省任务堆栈占用的存储空间。
为了解决上述问题,本发明提供了一种嵌入式操作***中切换任务的方法,包括:
将当前运行任务的现场数据保存在临时工作栈中;
任务切换时,确定当前运行任务的现场数据的大小N并记录,将当前运行任务的现场数据存放在一个存储空间大小至少等于N的堆栈中,记录该任务与该堆栈的对应关系。
进一步的,所述的方法还包括:
查找待运行任务对应的堆栈,查找到后将待运行任务的现场数据存放到临时工作栈中,并相应更改临时工作栈的栈顶指针的值。
进一步的,将待运行任务的现场数据存放到临时工作栈中后不释放堆栈的存储空间;
将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:判断当前运行任务的现场数据的大小是否大于该任务对应的堆栈的大小,如果不是则将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所述对应的堆栈中,从栈底开始存储;如果是则释放该堆栈的存储空间,重新申请一个存储空间大小至少等于N的堆栈,将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所申请的堆栈中,从栈底开始存储。
进一步的,如果是以复制方式将现场数据从其存储空间存放到临时工作栈,则在任务运行过程中跟踪SP的值;记录最接近栈底的SP值为SP1;
当需要切换到其它任务并且不用重新申请堆栈时,将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:仅复制临时工作栈中SP到SP1的数据到当前任务对应的堆栈中,从SP2开始存储;其中,SP2与当前任务对应堆栈的栈底之间的距离等于SP1与临时工作栈的栈底之间的距离。
进一步的,相应更改临时工作栈的栈顶指针SP的值是指:
如果查找不到待运行任务对应的堆栈或无现场数据,将临时工作栈的栈顶指针SP的值置为栈底地址;否则在将待运行任务对应的现场数据存放进临时工作栈后,使SP指向待运行任务的现场数据中位于顶部的一条。
本发明还提供了一种嵌入式操作***中切换任务的单元,包括:存储模块,堆栈管理模块;
所述存储模块中包括用于保存当前运行任务的现场数据的临时工作栈;
所述堆栈管理模块用于接收任务切换命令后,确定当前运行任务的现场数据的大小N并记录,以及将当前运行任务的现场数据存放在一个存储空间大小至少等于N的堆栈中,并记录该任务与该堆栈的对应关系。
进一步的,所述堆栈管理模块还用于查找待运行任务对应的堆栈,查找到后将待运行任务的现场数据存放到临时工作栈中,并相应更改临时工作栈的栈顶指针SP的值。
进一步的,堆栈管理模块将待运行任务的现场数据存放到临时工作栈中后释放堆栈的存储空间;
所述堆栈管理模块将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:堆栈管理模块判断当前运行任务的现场数据的大小是否大于该任务对应的堆栈的大小,如果不是则将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所述对应的堆栈中,从栈底开始存储;如果是则释放该堆栈的存储空间,重新申请一个存储空间大小至少等于N的堆栈,将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所申请的堆栈中,从栈底开始存储。
进一步的,所述切换任务的单元还包括一寄存器;所述堆栈管理模块还用于将现场数据从其存储空间复制到临时工作栈并相应更改SP的值后,将其保存在所述寄存器中;以及在任务运行过程中跟踪SP的值,如果当前SP值比寄存器中的值更接近临时工作的栈底地址,则用当前SP值替换寄存器中保存的值,将寄存器中的值记为SP1;当需要切换到其它任务并且不用重新申请堆栈时,所述堆栈管理模块将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:堆栈管理模块仅复制临时工作栈中SP到SP1的数据到当前任务对应的堆栈中,从SP2开始存储;其中,SP2与当前任务对应堆栈的栈底之间的距离等于SP1与临时工作栈的栈底之间的距离。
进一步的,所述堆栈管理模块相应更改临时工作栈的栈顶指针SP的值是指:
堆栈管理模块如果查找不到待运行任务对应的堆栈或无现场数据,将临时工作栈的栈顶指针SP的值置为栈底地址;否则在将待运行任务对应的现场数据存放进临时工作栈后,使SP指向待运行任务的现场数据中位于顶部的一条。
本发明的技术方案可以解决任务堆栈浪费存储空间的问题,基本不会浪费任何空间,对于存储空间紧缺,切换不是特别频繁的***更加适用;本发明的优化方案可以提高切换时的效率,节省软硬件资源。
附图说明
图1为一种堆栈的映像图;
图2为现有技术中切换任务时的堆栈使用示意图;
图3为应用实例中的堆栈使用示意图;
图4为应用实例中的流程示意图。
具体实施方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
本发明提供了一种嵌入式操作***中切换任务的方法,包括:
将当前运行任务的现场数据保存在临时工作栈中;
任务切换时,确定当前运行任务的现场数据的大小N并记录,将当前运行任务的现场数据存放在一个存储空间大小至少等于N的堆栈中,记录该任务与该堆栈的对应关系。
该方法还可以包括:
查找待运行任务对应的堆栈,查找到后将待运行任务的现场数据存放到临时工作栈中,并相应更改临时工作栈的栈顶指针SP的值。此时,可以释放原先存放待运行任务现场数据的堆栈的存储空间,也可以不释放堆栈的存储空间,记录任务与堆栈之间的对应关系;可以但不限于记录于TCB(任务控制块)中。
如果释放堆栈的存储空间,将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:申请一个存储空间大小至少等于N的堆栈,将临时工作栈中当前运行任务的现场数据--即位于SP到栈底之间的数据--按顺序复制或移动到所申请的堆栈中,从栈底开始存储。
如果不释放堆栈的存储空间,将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:判断当前运行任务的现场数据的大小是否大于该任务对应的堆栈的大小,如果不是则将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所述对应的堆栈中,从栈底开始存储;如果是则释放该堆栈的存储空间,重新申请一个存储空间大小至少等于N的堆栈,将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所申请的堆栈中,从栈底开始存储。对于之前没运行过的任务,堆栈的存储空间大小可设为0;或是在判断时,对于查找不到对应堆栈的任务,将其对应的堆栈的存储空间大小默认为0。在嵌入式***中各任务会多次进行,如果采用该优化方案,当各任务运行过一段时间后,各自对应的堆栈将达到适合本任务的大小,此时的这样不仅避免了存储空间的浪费,也提高了效率。
本文中,复制是指不删除原始数据的方式,而移动是指删除原始数据的方式。
可以看出,这样一来每个任务对应的堆栈所占用的存储空间的大小不需要按可能出现的任务需要的最大堆栈定义,可以动态按实际大小从内存中分配空间,因此可以节省存储资源。而无论运行哪个任务时,CPU的SP指针所指向的空间始终是同一块存储空间,即临时工作栈,临时工作栈的大小按可能出现的任务需要的最大堆栈来设定。
其中,由于临时工作栈是预留好的,栈底的地址是固定的,因此确定当前运行任务的现场数据的大小N为SP的值与栈底地址之差的绝对值。
其中,可以但不限于将任务对应的堆栈、及该任务现场数据的大小记录于TCB(任务控制块)中;查找待运行任务对应的堆栈可以是指:在TCB中根据任务名查找其对应的堆栈。
其中,将待运行任务的现场数据存放到临时工作栈中可以是指:根据待运行任务现场数据的大小M,在待运行任务对应的堆栈中从栈底开始按顺序复制或移动大小为M的数据到临时工作栈里,存放在从栈底开始的存储空间中。
其中,相应更改临时工作栈的栈顶指针SP的值可以是指:如果查找不到待运行任务对应的堆栈或无现场数据,将临时工作栈的栈顶指针SP的值置为栈底地址;否则在将待运行任务对应的现场数据存放进临时工作栈后,使SP指向待运行任务的现场数据中位于顶部的一条。
如果是以复制方式将现场数据从其存储空间存放到临时工作栈,则在任务运行过程中跟踪SP的值;记录最接近栈底的SP值为SP1;当需要切换到其它任务并且不用重新申请堆栈时,将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:仅复制临时工作栈中SP到SP1的数据(包括SP和SP1指向的数据)到当前任务对应的堆栈中,从SP2开始存储;其中,SP2与当前任务对应堆栈的栈底之间的距离等于SP1与临时工作栈的栈底之间的距离。这是因为,堆栈中的数据是先进后出的,任务运行中,数据一直在出栈进栈,而SP1所指向的一条数据是最接近栈底的、任务运行中进栈或可能进栈的数据记录,也就是说SP1和栈底间的数据是任务运行后未改变的(不包括SP1指向的数据),那么只要该任务对应的堆栈的存储空间未改变,在向堆栈复制时,就可以不复制这部分数据。可以看出,如果任务运行中该堆栈数据一直没有减少到比复制进来时小,则SP1就是复制后相应更改得到的SP,因此SP1的取值范围是在栈底和复制后相应更改得到的SP之间,包括栈底和该SP。这样做的优点是可以提高切换时复制数据的效率,节省复制时所耗费的软硬件资源。
为了提高切换效率,还可以采用CPU的硬件加速。
本发明还提供了一种嵌入式操作***中切换任务的单元,包括:存储模块,堆栈管理模块;
所述存储模块中包括用于保存当前运行任务的现场数据的临时工作栈;
所述堆栈管理模块用于接收任务切换命令后,确定当前运行任务的现场数据的大小N并记录,以及将当前运行任务的现场数据存放在一个存储空间大小至少等于N的堆栈中,并记录该任务与该堆栈的对应关系。
所述堆栈管理模块还用于查找待运行任务对应的堆栈,查找到后将待运行任务的现场数据存放到临时工作栈中,并相应更改临时工作栈的栈顶指针SP的值。此时,可以释放原先存放待运行任务现场数据的堆栈的存储空间,也可以不释放堆栈的存储空间,记录任务与堆栈之间的对应关系;可以但不限于记录于TCB(任务控制块)中。
如果释放堆栈的存储空间,所述堆栈管理模块将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:堆栈管理模块申请一个存储空间大小至少等于N的堆栈,将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所申请的堆栈中,从栈底开始存储。
如果不释放堆栈的存储空间,所述堆栈管理模块将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:堆栈管理模块判断当前运行任务的现场数据的大小是否大于该任务对应的堆栈的大小,如果不是则将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所述对应的堆栈中,从栈底开始存储;如果是则释放该堆栈的存储空间,重新申请一个存储空间大小至少等于N的堆栈,将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所申请的堆栈中,从栈底开始存储。对于之前没运行过的任务,堆栈的存储空间大小可设为0;或是在判断时,对于查找不到对应堆栈的任务,将其对应的堆栈的存储空间大小默认为0。
其中,所述堆栈管理模块确定当前运行任务的现场数据的大小N为临时工作栈的栈顶指针SP的值与栈底地址之差的绝对值。
其中,所述堆栈管理模块可以但不限于将任务对应的堆栈、及该任务现场数据的大小记录于TCB(任务控制块)中;所述堆栈管理模块查找待运行任务对应的堆栈可以是指:堆栈管理模块在TCB中根据任务名查找其对应的堆栈。
其中,所述堆栈管理模块将待运行任务的现场数据存放到临时工作栈中可以是指:堆栈管理模块根据待运行任务现场数据的大小M,在待运行任务对应的堆栈中从栈底开始按顺序复制或移动大小为M的数据到临时工作栈里,存放在从栈底开始的存储空间中。
其中,所述堆栈管理模块相应更改临时工作栈的栈顶指针SP的值可以是指:堆栈管理模块如果查找不到待运行任务对应的堆栈或无现场数据,将临时工作栈的栈顶指针SP的值置为栈底地址;否则在将待运行任务对应的现场数据存放进临时工作栈后,使SP指向待运行任务的现场数据中位于顶部的一条。
所述切换任务的单元还包括一寄存器;所述堆栈管理模块还用于将现场数据从其存储空间复制到临时工作栈并相应更改SP的值后,将其保存在所述寄存器中;以及在任务运行过程中跟踪SP的值,如果当前SP值比寄存器中的值更接近临时工作的栈底地址,则用当前SP值替换寄存器中保存的值,将寄存器中的值记为SP1;当需要切换到其它任务并且不用重新申请堆栈时,所述堆栈管理模块将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:堆栈管理模块仅复制临时工作栈中SP到SP1的数据(包括SP和SP1指向的数据)到当前任务对应的堆栈中,从SP2开始存储;其中,SP2与当前任务对应堆栈的栈底之间的距离等于SP1与临时工作栈的栈底之间的距离。
下面用本发明的两个应用实例进一步加以说明。
应用实例一以三个任务运行的情况为例,如图3所示,首先是任务1运行,其数据保存在临时工作栈中;当要切换到任务2时,申请堆栈A来存放任务1的数据,记录任务1对应的数据的存放地址为堆栈A的地址;运行任务2;当要切换到任务2时,申请堆栈B来存放任务2的数据,记录任务2对应的数据的存放地址为堆栈B的地址;运行任务3;当又要切换到任务1时,申请堆栈C来存放任务3的数据,记录任务3对应的数据的存放地址为堆栈C的地址;根据任务1对应的数据地址找到任务1的现场数据,将该现场数据存放到临时工作栈中,运行任务1。
应用实例二的主要步骤是:如果任务切换时,需要把原来工作栈中的内容换出,把需要运行的任务的栈的内容重新搬移到工作栈中,使任务运行的栈始终在工作栈中。切换任务时的具体步骤如图4所示,包括:
401、当前运行任务为任务i,现在要切换到任务j;
402、判断任务i对应的堆栈大小是否大于或等于任务i实际需要的存储空间大小--即任务i的现场数据的大小;如果是则进行步骤405;否则进行步骤403;
403、释放任务i原来对应的堆栈;
404、重新为任务i申请一堆栈,该堆栈大小至少等于任务i的现场数据的大小;
405、把临时工作栈中任务i的现场数据复制到任务i的堆栈中,从栈底开始存储;
406、从任务j对应的堆栈中复制任务j的现场数据到临时工作栈中;
407、改变临时工作栈的指针SP,使其指向任务j的现场数据中位于顶部的数据。
任务切换完成,可以开始运行任务j。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。
Claims (10)
1、一种嵌入式操作***中切换任务的方法,包括:
将当前运行任务的现场数据保存在临时工作栈中;
任务切换时,确定当前运行任务的现场数据的大小N并记录,将当前运行任务的现场数据存放在一个存储空间大小至少等于N的堆栈中,记录该任务与该堆栈的对应关系。
2、如权利要求1所述的方法,其特征在于,还包括:
查找待运行任务对应的堆栈,查找到后将待运行任务的现场数据存放到临时工作栈中,并相应更改临时工作栈的栈顶指针的值。
3、如权利要求2所述的方法,其特征在于:将待运行任务的现场数据存放到临时工作栈中后不释放堆栈的存储空间;
将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:判断当前运行任务的现场数据的大小是否大于该任务对应的堆栈的大小,如果不是则将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所述对应的堆栈中,从栈底开始存储;如果是则释放该堆栈的存储空间,重新申请一个存储空间大小至少等于N的堆栈,将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所申请的堆栈中,从栈底开始存储。
4、如权利要求2所述的方法,其特征在于:
如果是以复制方式将现场数据从其存储空间存放到临时工作栈,则在任务运行过程中跟踪SP的值;记录最接近栈底的SP值为SP1;
当需要切换到其它任务并且不用重新申请堆栈时,将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:仅复制临时工作栈中SP到SP1的数据到当前任务对应的堆栈中,从SP2开始存储;其中,SP2与当前任务对应堆栈的栈底之间的距离等于SP1与临时工作栈的栈底之间的距离。
5、如权利要求1到4中任一项所述的方法,其特征在于,相应更改临时工作栈的栈顶指针SP的值是指:
如果查找不到待运行任务对应的堆栈或无现场数据,将临时工作栈的栈顶指针SP的值置为栈底地址;否则在将待运行任务对应的现场数据存放进临时工作栈后,使SP指向待运行任务的现场数据中位于顶部的一条。
6、一种嵌入式操作***中切换任务的单元,其特征在于,包括:存储模块,堆栈管理模块;
所述存储模块中包括用于保存当前运行任务的现场数据的临时工作栈;
所述堆栈管理模块用于接收任务切换命令后,确定当前运行任务的现场数据的大小N并记录,以及将当前运行任务的现场数据存放在一个存储空间大小至少等于N的堆栈中,并记录该任务与该堆栈的对应关系。
7、如权利要求6所述的单元,其特征在于:
所述堆栈管理模块还用于查找待运行任务对应的堆栈,查找到后将待运行任务的现场数据存放到临时工作栈中,并相应更改临时工作栈的栈顶指针SP的值。
8、如权利要求7所述的单元,其特征在于:堆栈管理模块将待运行任务的现场数据存放到临时工作栈中后释放堆栈的存储空间;
所述堆栈管理模块将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:堆栈管理模块判断当前运行任务的现场数据的大小是否大于该任务对应的堆栈的大小,如果不是则将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所述对应的堆栈中,从栈底开始存储;如果是则释放该堆栈的存储空间,重新申请一个存储空间大小至少等于N的堆栈,将临时工作栈中当前运行任务的现场数据按顺序复制或移动到所申请的堆栈中,从栈底开始存储。
9、如权利要求7所述的单元,其特征在于:
所述切换任务的单元还包括一寄存器;所述堆栈管理模块还用于将现场数据从其存储空间复制到临时工作栈并相应更改SP的值后,将其保存在所述寄存器中;以及在任务运行过程中跟踪SP的值,如果当前SP值比寄存器中的值更接近临时工作的栈底地址,则用当前SP值替换寄存器中保存的值,将寄存器中的值记为SP1;当需要切换到其它任务并且不用重新申请堆栈时,所述堆栈管理模块将当前运行任务的现场数据存放在一个大小至少等于N的堆栈中是指:堆栈管理模块仅复制临时工作栈中SP到SP1的数据到当前任务对应的堆栈中,从SP2开始存储;其中,SP2与当前任务对应堆栈的栈底之间的距离等于SP1与临时工作栈的栈底之间的距离。
10、如权利要求6到9中任一项所述的单元,其特征在于,所述堆栈管理模块相应更改临时工作栈的栈顶指针SP的值是指:
堆栈管理模块如果查找不到待运行任务对应的堆栈或无现场数据,将临时工作栈的栈顶指针SP的值置为栈底地址;否则在将待运行任务对应的现场数据存放进临时工作栈后,使SP指向待运行任务的现场数据中位于顶部的一条。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101143219A CN101290590B (zh) | 2008-06-03 | 2008-06-03 | 一种嵌入式操作***中切换任务的方法和单元 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101143219A CN101290590B (zh) | 2008-06-03 | 2008-06-03 | 一种嵌入式操作***中切换任务的方法和单元 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101290590A true CN101290590A (zh) | 2008-10-22 |
CN101290590B CN101290590B (zh) | 2012-01-11 |
Family
ID=40034857
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101143219A Expired - Fee Related CN101290590B (zh) | 2008-06-03 | 2008-06-03 | 一种嵌入式操作***中切换任务的方法和单元 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101290590B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101908002A (zh) * | 2010-08-17 | 2010-12-08 | 中兴通讯股份有限公司 | 一种任务路径切换方法及装置 |
CN102438062A (zh) * | 2010-09-29 | 2012-05-02 | 联想移动通信科技有限公司 | 多任务切换的方法、装置和移动终端 |
CN102521042A (zh) * | 2011-12-16 | 2012-06-27 | 中船重工(武汉)凌久电子有限责任公司 | 基于哈佛结构dsp的快速正文切换方法 |
CN101630276B (zh) * | 2009-08-18 | 2012-12-19 | 深圳市融创天下科技股份有限公司 | 一种高效的内存访问方法 |
CN105094991A (zh) * | 2015-08-21 | 2015-11-25 | 北京经纬恒润科技有限公司 | 一种堆栈容量的设置方法及*** |
CN105138289A (zh) * | 2015-08-20 | 2015-12-09 | 上海联影医疗科技有限公司 | 计算组件的存储管理方法和装置 |
CN107608775A (zh) * | 2017-09-12 | 2018-01-19 | 南京中探海洋物联网有限公司 | 一种嵌入式***的多任务实时操作方法 |
CN109214169A (zh) * | 2017-06-30 | 2019-01-15 | 芜湖美的厨卫电器制造有限公司 | 堆栈溢出检测方法、装置及家用电器 |
CN111538579A (zh) * | 2020-04-23 | 2020-08-14 | 山东华芯半导体有限公司 | 一种嵌入式平台下的多任务运行方法 |
CN112631510A (zh) * | 2020-12-02 | 2021-04-09 | 海光信息技术股份有限公司 | 堆栈区域扩充的方法、装置及硬件平台 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006072841A2 (en) * | 2004-11-30 | 2006-07-13 | Koninklijke Philips Electronics N.V. | Efficient switching between prioritized tasks |
CN1783020A (zh) * | 2005-09-12 | 2006-06-07 | 浙江大学 | 基于PowerPC体系结构的嵌入式操作***的中断管理方法 |
-
2008
- 2008-06-03 CN CN2008101143219A patent/CN101290590B/zh not_active Expired - Fee Related
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101630276B (zh) * | 2009-08-18 | 2012-12-19 | 深圳市融创天下科技股份有限公司 | 一种高效的内存访问方法 |
CN101908002A (zh) * | 2010-08-17 | 2010-12-08 | 中兴通讯股份有限公司 | 一种任务路径切换方法及装置 |
CN102438062A (zh) * | 2010-09-29 | 2012-05-02 | 联想移动通信科技有限公司 | 多任务切换的方法、装置和移动终端 |
CN102438062B (zh) * | 2010-09-29 | 2014-12-24 | 联想移动通信科技有限公司 | 多任务切换的方法、装置和移动终端 |
CN102521042A (zh) * | 2011-12-16 | 2012-06-27 | 中船重工(武汉)凌久电子有限责任公司 | 基于哈佛结构dsp的快速正文切换方法 |
CN105138289A (zh) * | 2015-08-20 | 2015-12-09 | 上海联影医疗科技有限公司 | 计算组件的存储管理方法和装置 |
CN105094991A (zh) * | 2015-08-21 | 2015-11-25 | 北京经纬恒润科技有限公司 | 一种堆栈容量的设置方法及*** |
CN109214169A (zh) * | 2017-06-30 | 2019-01-15 | 芜湖美的厨卫电器制造有限公司 | 堆栈溢出检测方法、装置及家用电器 |
CN109214169B (zh) * | 2017-06-30 | 2023-12-08 | 芜湖美的厨卫电器制造有限公司 | 堆栈溢出检测方法、装置及家用电器 |
CN107608775A (zh) * | 2017-09-12 | 2018-01-19 | 南京中探海洋物联网有限公司 | 一种嵌入式***的多任务实时操作方法 |
CN111538579A (zh) * | 2020-04-23 | 2020-08-14 | 山东华芯半导体有限公司 | 一种嵌入式平台下的多任务运行方法 |
CN111538579B (zh) * | 2020-04-23 | 2023-02-03 | 山东华芯半导体有限公司 | 一种嵌入式平台下的多任务运行方法 |
CN112631510A (zh) * | 2020-12-02 | 2021-04-09 | 海光信息技术股份有限公司 | 堆栈区域扩充的方法、装置及硬件平台 |
CN112631510B (zh) * | 2020-12-02 | 2023-05-12 | 海光信息技术股份有限公司 | 堆栈区域扩充的方法、装置及硬件平台 |
Also Published As
Publication number | Publication date |
---|---|
CN101290590B (zh) | 2012-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101290590B (zh) | 一种嵌入式操作***中切换任务的方法和单元 | |
CN101290591B (zh) | 一种嵌入式操作***中切换任务的方法和单元 | |
CN1213376C (zh) | 用于被复制的服务器的协议 | |
KR100934533B1 (ko) | 연산 처리 시스템, 컴퓨터 시스템 상에서의 태스크 제어 방법, 및 컴퓨터 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체 | |
US10459661B2 (en) | Stream identifier based storage system for managing an array of SSDs | |
CN109697016B (zh) | 用于改进容器的存储性能的方法和装置 | |
CN100432931C (zh) | 嵌入式***动态补丁长跳转的实现方法 | |
CN102436408B (zh) | 基于Map/Dedup的数据存储云化和云备份方法 | |
CN102831120A (zh) | 一种数据处理方法及*** | |
CN103023805A (zh) | 一种MapReduce*** | |
CN100538646C (zh) | 一种在分布式***中执行sql脚本文件的方法和装置 | |
CN102314506B (zh) | 基于动态索引的分布式缓冲区管理方法 | |
CN1928872A (zh) | 动态切换将事务数据写入盘中的模式的设备和方法 | |
CN101231619A (zh) | 一种基于非连续页的动态内存管理方法 | |
CN101840362A (zh) | 一种改进的写时拷贝快照的实现方法和装置 | |
CN102012852A (zh) | 一种增量写快照的实现方法 | |
US9836516B2 (en) | Parallel scanners for log based replication | |
CN101452465A (zh) | 大批量文件数据存放和读取方法 | |
CN101819539B (zh) | 一种μCOS-Ⅱ移植到ARM7的中断嵌套方法 | |
CN101238441A (zh) | 计算装置中的可抢占语境切换 | |
CN1955939A (zh) | 基于虚拟内存盘的备份与恢复方法 | |
KR20200124070A (ko) | 멀티 코어 솔리드 스테이트 드라이브의 운용 방법 | |
CN101968755A (zh) | 一种自适应应用负载变化的快照生成方法 | |
US20160055027A1 (en) | Virtual machine image disk usage | |
CN102768672B (zh) | 一种磁盘空间管理方法和装置 |
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: 20120111 Termination date: 20120603 |