CN103593606A - 上下文信息管理方法及系统 - Google Patents
上下文信息管理方法及系统 Download PDFInfo
- Publication number
- CN103593606A CN103593606A CN201310589625.1A CN201310589625A CN103593606A CN 103593606 A CN103593606 A CN 103593606A CN 201310589625 A CN201310589625 A CN 201310589625A CN 103593606 A CN103593606 A CN 103593606A
- Authority
- CN
- China
- Prior art keywords
- context information
- storage block
- storage
- linked list
- storing
- 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 40
- 238000007726 management method Methods 0.000 claims description 49
- 230000008569 process Effects 0.000 abstract description 18
- 230000007246 mechanism Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 29
- 230000006870 function Effects 0.000 description 6
- 239000000284 extract Substances 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种上下文信息管理方法及系统,不使用堆栈存储上下文信息,而是将上下文信息存储至预设大小的存储块中,且通过链表机制管理存储块,避免用户在分配任务堆栈容量时需要考虑上下文容量的问题,用户只需要按照任务在执行过程中需要保存的临时数据的大小为任务分配堆栈容量即可,使得任务堆栈容量的分配更为准确,降低了操作系统使用任务堆栈时发生堆栈溢出的风险。
Description
技术领域
本申请涉及嵌入式系统技术领域,特别是涉及一种实时操作系统中的上下文信息管理方法及系统。
背景技术
目前,嵌入式电子行业多采用嵌入式实时操作系统(以下简称操作系统)来开发和设计不同用途的嵌入式控制器。操作系统的核心功能是任务调度,即根据任务优先级管理系统中所有任务的状态转换和执行顺序。操作系统进行调度时,将这一时刻所有处于就绪状态的任务依据优先级进行仲裁,优先级最高的任务将进入到运行状态开始执行。同一时间操作系统只能有一个任务处于运行状态。操作系统在进行调度时,如果已经有任务处于运行状态,那么处于运行状态的任务也将参与任务调度。若这一时刻处于就绪状态的任务中有优先级高于当前处于运行状态的任务,当前处于运行状态的任务将被高优先级的任务抢占,返回到就绪状态中,高优先级的任务则进入到运行状态开始执行。被抢占的任务直到下一次变为系统中优先级最高的任务时,才会从就绪状态返回到运行状态,从之前被抢占的位置继续执行。在任务发生抢占的过程中,由于被抢占的任务无法继续运行,所以需要保存被抢占的任务继续运行所需要的上下文信息。
任务运行过程中的临时数据和任务切换过程中的上下文信息都是保存在堆栈中,因此,需要用户在分配任务堆栈的容量时,既要了解保存任务执行过程中的临时数据需要多少堆栈空间,同时要了解保存任务的上下文信息需要多少堆栈空间。对于前者,用户在任务中添加应用程序时比较容易统计,后者由于与芯片类型和操作系统本身的软件实现强相关,用户很难对其做出正确预估,在这种情况下,用户在使用操作系统时,容易造成由于对任务堆栈的容量分配不足导致发生任务堆栈溢出。堆栈溢出是指需要在堆栈中保存的内容总量大于堆栈总的容量。当任务堆栈发生溢出时,超出堆栈总容量的上下文信息就无法正常保存和重新装载了。
因此,如何降低操作系统在使用任务堆栈时发生堆栈溢出的风险成为亟待解决的问题。
发明内容
为解决上述技术问题,本申请实施例提供一种上下文信息管理方法及系统,以降低操作系统在使用任务堆栈时发生堆栈溢出的风险。
技术方案如下:
一种上下文信息管理方法,所述上下文信息的存储区域被平均划分为若干存储块,所述存储块的大小依据任务的上下文信息的数据量确定,其中,所有未被上下文信息占用的存储块构成第一链表,所有被上下文信息占用的存储块构成第二链表;所述方法包括:
当需要保存上下文信息时,将所述上下文信息存储至所述第一链表表头的存储块中;
将存储所述上下文信息的第一链表表头的存储块挂载至所述第二链表的表头;
记录存储所述上下文信息的存储块的地址。
上述方法,优选的,还包括:
当需要装载上下文信息时,依据待装载上下文信息所在的存储块的地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
从查找到的存储块中读取上下文信息,并将读取的上下文信息装载到操作系统中;
将上下文信息被读取后的存储块挂载到所述第一链表的表头。
上述方法,优选的,所述存储块被划分为若干子存储块,所述子存储块的个数大于或等于所述上下文信息的类型数;
所述将上下文信息存储至所述第一链表的表头的存储块中包括:
按照预设的各类上下文信息的生成位置与子存储块的对应关系,确定与所述各类上下文信息的生成位置所对应的子存储块;
将所述各类上下文信息存储至所确定的相应的子存储块中。
上述方法,优选的,还包括:
当需要装载上下文信息时,依据待装载上下文信息的存储地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
从查找到的存储块中读取各类上下文信息;
按照预设的各类上下文信息的生成位置与子存储块的对应关系,将读取的各类上下文信息装载至所述各类上下文信息的生成位置;
将上下文信息被读取后的存储块挂载至所述第一链表的表头。
一种上下文信息管理系统,所述上下文信息的存储区域被平均划分为若干存储块,所述存储块的大小依据任务的上下文信息的数据量确定,其中,所有未被上下文信息占用的存储块构成第一链表,所有被上下文信息占用的存储块构成第二链表;所述系统包括:
存储模块,用于当需要保存上下文信息时,将所述上下文信息存储至所述第一链表表头的存储块中;
第一挂载模块,用于将存储所述上下文信息的第一链表表头的存储块挂载至所述第二链表的表头;
上述系统,优选的,还包括:
第一查找模块,用于当需要装载上下文信息时,依据待装载上下文信息所在的存储块的地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
第一读取模块,用于从查找到的存储块中读取上下文信息;
第一装载模块,用于将读取的上下文信息装载到操作系统中;
第二挂载模块,用于将上下文信息被读取后的存储块挂载到所述第一链表的表头。
上述系统,优选的,所述存储块被划分为若干子存储块,所述子存储块的个数大于或等于所述上下文信息的类型数;
所述存储模块包括:
确定单元,用于当需要保存上下文信息时,按照预设的各类上下文信息生成位置与子存储块的对应关系,确定与所述各类上下文信息的生成位置所对应的子存储块;
存储单元,用于将所述各类上下文信息存储至所确定的相应的子存储块中。
上述系统,优选的,还包括:
第二查找模块,用于当需要装载上下文信息时,依据待装载上下文信息所在的存储块的地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
第二读取模块,用于从查找到的存储块中读取各类上下文信息;
第二装载模块,用于按照预设的各类上下文信息的生成位置与子存储块的对应关系,将读取的各类上下文信息装载至所述各类上下文信息的生成位置;
第三挂载模块,用于将上下文信息被读取后的存储块挂载至所述第一链表的表头。
一种微处理器内核,集成有如上任意一项所述的上下文信息管理系统。
由以上本申请实施例提供的技术方案可见,本申请提供的一种上下文信息管理方法及系统,预先将上下文信息的存储区域划分为若干存储块,所述存储块的大小依据任务的上下文信息的数据量确定,所述存储块用于存储上下文信息,其中,未被上下文信息占用的存储块构成第一链表,被上下文信息占用的存储块构成第二链表,在需要保存上下文信息时,将上下文信息存储至第一链表表头的存储块中,并将第一链表表头的存储块挂载至第二链表的表头,记录存储所述上下文信息的存储块的地址。由此可知,本申请实施例提供的上下文信息管理方法及系统,不使用堆栈存储上下文信息,而是将上下文信息存储至预设大小的存储块中,而所述存储块的大小是根据任务的上下文信息确定的,避免用户在分配任务堆栈容量时需要考虑上下文信息容量的问题,用户只需要按照任务在执行过程中需要保存的临时数据的大小为任务分配堆栈容量即可,使得任务堆栈容量的分配更为准确,降低了操作系统使用任务堆栈时发生堆栈溢出的风险。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种上下文信息管理方法的流程图;
图2为本申请实施例提供的另一种上下文信息管理方法的流程图;
图3为本申请实施例提供的将上下文信息存储至第一链表的表头的存储
块中的实现流程图;
图4为本申请实施例提供的预先确定的各类上下文信息的生成位置与子
存储块的对应关系的一种示意图;
图5为本申请实施例提供的又一种上下文信息管理方法的流程图;
图6为本申请实施例提供的一种上下文信息管理系统的结构示意图;
图7为本申请实施例提供的另一种上下文信息管理系统的结构示意图;
图8为本申请实施例提供的又一种上下文信息管理系统的结构示意图;
图9为本申请实施例提供的又一种上下文信息管理系统的结构示意图;
图10为本申请实施例提供的以链表形式管理上下文存储区域的示意图;
图11为本申请实施例提供的在图10所示示例的基础上,保存任务A的
上下文信息后,以链表形式管理上下文存储区域的示意图;
图12为本申请实施例提供的在图11所示示例的基础上,保存任务B的上
下文信息后,以链表形式管理上下文存储区域的示意图;
图13为本申请实施例提供的在图12所示示例的基础上,任务A的上下
文信息被重新装载后,以链表形式管理上下文存储区域的示意图;
图14为本申请实施例提供的使用RAM内存空间的实际情况;
图15为本申请实施例提供的使用图14所示RAM内存空间进行上下文管
理的操作过程的示意图。
为了图示的简单和清楚,以上附图示出了结构的普通形式,并且为了避免不必要的模糊本发明,可以省略已知特征和技术的描述和细节。另外,附图中的单元不必要按照比例绘制。例如,可以相对于其他单元放大图中的一些单元的尺寸,从而帮助更好的理解本发明的实施例。不同附图中的相同标号表示相同的单元。
说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的单元或过程,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示的或否则描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可以包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案。下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
为了更好的理解本发明,首先对本申请涉及到的一些概念进行说明:
在嵌入式实时操作系统中,任务在执行过程中,需要使用微控制器的RAM(Random Access Memory,随机存储器)内存空间来保存临时数据。为了保证不同任务在使用RAM内存空间时的有序性,操作系统会为每个任务划分独立的RAM内存空间,称为堆栈。
操作系统中每个任务执行时,均使用自己独立的任务堆栈来保存各类临时数据。堆栈除了保存任务执行过程中的临时数据之外,另外一个重要功能是保存当前任务的上下文信息。在操作系统进行任务调度时,如果当前正处于运行状态的任务被抢占,在该任务即将退出运行状态时,当前任务的状态信息以及当时操作系统的全局状态信息将保存到当前任务的堆栈之中,这些信息称为该任务的上下文信息。上下文信息通常包括:通用SP指针(StackPointer,系统当前的堆栈指针),PC指针(Programming Counter,系统当前程序运行位置)、操作系统全局中断状态、返回地址以及通用寄存器的值五类。一旦被抢占的任务再次返回运行状态恢复执行,之前被保存的上下文信息将被重新装载到操作系统中,那么操作系统就能恢复到该任务被抢占之前的状态,确保该任务能够从被抢占的位置按照被抢占之前的状态继续执行。在进行上下文保存时,上下文信息中的各个信息需要逐个进行保存;在重新装载上下文时,以上内容需要逐个进行还原。
本申请的基本思想是不使用堆栈,而是在RAM空间中为所有任务划分一块共用存储区域存储上下文信息。
本申请实施例中,预先将上下文信息的存储区域平均划分为若干预设大小的存储块,一个存储块可以存储一个任务的上下文信息,所述存储块的大小依据任务的上下文信息的数据量确定。
其中,所有未被上下文信息占用的存储块构成第一链表,所有被上下文信息占用的存储块构成第二链表;
请参看图1,图1为本申请实施例提供的一种上下文信息管理方法的流程图,包括:
步骤S101:当需要保存上下文信息时,将所述上下文信息存储至所述第一链表表头的存储块中;
在操作系统中,如果第一任务运行过程中,有优先级高于第一任务的第二任务被激活而处于就绪状态,或者是有中断发生,那么,第一任务就会被第二任务或者是中断抢占,此时,就需要保存第一任务的上下文信息。
在需要保存上下文信息时,将上下文信息保存至第一链表的表头的存储块中。其中,所述第一链表的指针所指向的存储块即为第一链表表头的存储块。
由于本申请中不使用堆栈存储上下文信息,因此在将上下文信息从通用寄存器中读取出来写入存储块中时,可以不按照上下文信息的读取顺序将上下文信息存储至存储块中;也就是说,现有技术中,由于使用堆栈,因此,在将上下文信息从通用寄存器中读取出来写入堆栈中时,需要按照读取的先后顺序依次将上下文信息存储至堆栈中,而本申请实施例中,由于不使用堆栈,因此,可以将后读取的上下文信息先存储至存储块中,即可以异步存储。
步骤S102:将存储所述上下文信息的第一链表的表头的存储块挂载至所述第二链表的表头;
将需要保存的上下文信息保存至第一链表的表头的存储块中后,将该第一链表的表头的存储块从第一链表卸载,挂载至第二链表的表头。
步骤S103:记录存储所述上下文信息的存储块的地址。
为了被抢占的任务返回运行状态恢复执行,需要装载该上下文信息时,能够准确找到该上下文信息,在将需要保存的上下文信息保存至存储块中后,记录该上下文信息的存储位置,即存储该上下文信息的存储块的地址。
本申请提供的一种上下文信息管理方法,预先将上下文信息的存储区域划分为若干存储块,所述存储块用于存储上下文信息,其中,未被上下文信息占用的存储块构成第一链表,被上下文信息占用的存储块构成第二链表,在需要保存上下文信息时,将上下文信息存储至第一链表表头的存储块中,并将第一链表表头的存储块挂载至第二链表的表头,记录存储所述上下文信息的存储块的地址,由此可知,本申请实施例提供的上下文信息管理方法及系统,不使用堆栈存储上下文信息,而是预先为上下文信息分配了存储空间,将上下文信息存储至预设大小的存储块中,且通过链表机制管理存储块,避免用户在分配任务堆栈容量时需要考虑上下文容量的问题,用户只需要按照任务在执行过程中需要保存的临时数据的大小为任务分配堆栈容量即可,使得任务堆栈容量的分配更为准确,降低了操作系统使用任务堆栈时发生堆栈溢出的风险。
上述实施例,优选的,当被抢占的任务返回运行状态恢复执行,需要装载该上下文信息,基于此,在图1所示实施例的基础上,本申请实施例提供的另一种上下文信息管理方法的流程图如图2所示,可以包括:
步骤S201:当需要装载上下文信息时,依据待装载上下文信息所在的存储块的地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
由于在保存上下文信息时,已经记录了存储该上下文信息的存储块的地址,因此,当需要装载上下文信息时,可以根据待装载该上下文信息的存储块的地址快速在第二链表中查找到存储所述上下文信息的存储块。
步骤S202:从查找到的存储块中读取上下文信息,并将读取的上下文信息装载到操作系统中;
同理,由于没有使用堆栈,在读取上下文信息时,可以不按照存储时的顺序从存储块中读取上下文信息,即可以不遵循堆栈后进先出的工作方式。
步骤S203:将上下文信息被读取后的存储块挂载到所述第一链表的表头。
将上下文信息装载到系统中后,存储块就恢复空闲状态,即未被上下文信息占用的状态,将该空闲的存储块挂载至第一链表的表头。
上述实施例,优选的,各个存储块可以被平均划分为若干个子存储块;所述子存储块的个数大于或等于所述上下文信息的类型数;例如,上下文信息通常包括五类:通用SP指针,PC指针、操作系统全局中断状态、返回地址以及通用寄存器的值,因此,所述每个存储块应该平均划分为至少五个子存储块。
相应的,所述将上下文信息存储至所述第一链表的表头的存储块中的实现流程如图3所示,可以包括:
步骤S301:按照预设的各类上下文信息的生成位置与子存储块的对应关系,确定与所述各类上下文信息的生成位置所对应的子存储块;
当存储块被平均划分为若干个子存储块时,可以预先确定各类上下文信息的生成位置与子存储块的对应关系,即将各类上下文信息存储至相应的子存储块中。
请参看图4,图4为本申请实施例提供的预先确定的各类上下文信息的生成位置与子存储块的对应关系示意图;
在图4所示示例中,存储块被平均划分成了5个子存储块,上下文信息的生成位置是通用寄存器,每一个通用寄存器存储一类上下文信息,其中,各类上下文信息的生成位置与子存储块的对应关系为:第一子存储块和第一通用寄存器相对应,第二子存储块和第二通用寄存器相对应,第三子存储块和第三通用寄存器相对应,第四子存储块和第四通用寄存器相对应,第五子存储块和第五子存储器相对应。
需要说明的是图4所示示例只示出了存储块的一种划分方式,还可以有其它划分方式,例如划分为8个子存储块或16个子存储块等。
另外,所述各类上下文信息的生成位置与子存储块的对应关系还可以为其它对应关系,例如,第一子存储块和第二通用寄存器相对应,第二子存储块和第一通用寄存器相对应,第三子存储块和第三通用寄存器相对应,第四子存储块和第四通用寄存器相对应,第五子存储块和第五子存储器相对应,等等,这里不做具体限定。
由于上下文信息在生成时,通常是存储在通用寄存器中的,因此,所述上下文信息的生成位置可以是指上下文信息生成时,存储所述上下文信息的通用寄存器。
步骤S302:将所述各类上下文信息存储至所确定的相应的子存储块中。
在图3所示实施例的基础上,又一种上下文信息管理方法的流程图如图5所示,可以包括:
步骤S501:当需要装载上下文信息时,依据待装载上下文信息的存储地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
步骤S501的实现过程可参看步骤S201,这里不再赘述。
步骤S502:从查找到的存储块中读取各类上下文信息;
本申请实施例中,存储块被划分为若干子存储块,即上下文信息存储在子存储块中,所以,在查找到存储所述待装载上下文信息的存储块后,从存储上下文信息的各个子存储块中读取上下文信息,在读取上下文信息时,读取的顺序可以与该上下文信息的存储顺序不相关,例如,在存储上下文信息时,上下文信息存储的先后顺序可以是:第一类上下文信息,第二类上下文信息,第三类上下文信息,第四类上下文信息和第五类上下文信息,而在读取上下文信息时,可以先读取上述五类上下文信息中的任意一类,然后在从未读取的上下文信息中任意读取一类,直至上下文信息全部读取完成,即,在读取上下文信息时,其读取顺序是不做具体限定的。当然,上下文信息的存储顺序也不做具体限定,可以是任意顺序。
步骤S503:按照预设的各类上下文信息的生成位置与子存储块的对应关系,将读取的各类上下文信息装载至所述各类上下文信息的生成位置;
本申请实施例中,为了提高上下文信息的保存速度和装载速度,预先设定上下文信息的生成位置与子存储块的对应关系,由于上下文信息的生成位置是固定的,因此,本申请实施例中,上下文信息存储在存储块的哪个子存储块中也是固定的,在存储上下文信息时,将上下文信息根据生成位置与子存储块的对应关系,将上下文信息存储至相应的子存储块中;同理,在装载上下文信息时,将上下文信息根据生成位置与子存储块的对应关系,将上下文信息装载至相应的生成位置,在保证上下文信息装载正确的基础上提高了上下文信息的装载速度。
步骤S504:将上下文信息被读取后的存储块挂载至所述第一链表的表头。
本申请实施例中,存储块被划分为若干子存储块,预先设定各类上下文信息的生成位置与子存储块的对应关系,根据上下文信息的生成位置与子存储块的对应关系存储上下文信息或装载上下文信息,在保证上下文信息装载正确的基础上提高了上下文信息的装载速度。
与方法实施例相对应,本申请实施例还提供一种上下文信息管理系统,其中,上下文信息的存储区域被平均划分为若干预设大小的存储块,其中,所有未被上下文信息占用的存储块构成第一链表,所有被上下文信息占用的存储块构成第二链表;本申请实施例提供的一种上下文信息管理系统的结构示意图如图6所示,可以包括:
存储模块601,第一挂载模块602和记录模块603;其中,存储模块601用于当需要保存上下文信息时,将所述上下文信息存储至所述第一链表表头的存储块中;
第一挂载模块602用于将存储所述上下文信息的第一链表表头的存储块挂载至所述第二链表的表头;
记录模块603用于记录存储所述上下文信息的存储块的地址。
本申请提供的一种上下文信息管理系统,预先将上下文信息的存储区域划分为若干存储块,所述存储块用于存储上下文信息,其中,未被上下文信息占用的存储块构成第一链表,被上下文信息占用的存储块构成第二链表,存储模块在需要保存上下文信息时,将上下文信息存储至第一链表表头的存储块中,第一挂载模块将第一链表表头的存储块挂载至第二链表的表头,记录模块记录存储所述上下文信息的存储块的地址,由此可知,本申请实施例提供的上下文信息管理方法及系统,不使用堆栈存储上下文信息,而是将上下文信息存储至预设大小的存储块中,且通过链表机制管理存储块,避免用户在分配任务堆栈容量时需要考虑上下文容量的问题,用户只需要按照任务在执行过程中需要保存的临时数据的大小为任务分配堆栈容量即可,使得任务堆栈容量的分配更为准确,降低了操作系统使用任务堆栈时发生堆栈溢出的风险。
在图6所示实施例的基础上,本申请实施例提供的另一种上下文信息管理系统的结构示意图如图7所示,还包括:
第一查找模块701,第一读取模块702,第一装载模块703和第二挂载模块704;其中,
第一查找模块701用于当需要装载上下文信息时,依据待装载上下文信息所在的存储块的地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
第一读取模块702用于从查找到的存储块中读取上下文信息;
第一装载模块703用于将读取的上下文信息装载到操作系统中;
第二挂载模块704用于将上下文信息被读取后的存储块挂载到所述第一链表的表头。
上述实施例,优选的,所述存储块被划分为若干子存储块,所述子存储块的个数大于或等于所述上下文信息的类型数,基于此,在图6所示实施例的基础上,本申请实施例提供的又一种上下文信息管理系统的结构示意图如图8所示,所述存储模块601可以包括:
确定单元801和存储单元802;其中,
确定单元801用于当需要保存上下文信息时,按照预设的各类上下文信息生成位置与子存储块的对应关系,确定与所述各类上下文信息的生成位置所对应的子存储块;
存储单元802用于将所述各类上下文信息存储至所确定的相应的子存储块中。
本申请实施例中,存储块被划分为若干子存储块,即上下文信息存储在子存储块中,所以,在查找到存储所述待装载上下文信息的存储块后,从存储上下文信息的各个子存储块中读取上下文信息,在读取上下文信息时,读取的顺序可以与该上下文信息的存储顺序不相关,例如,在存储上下文信息时,上下文信息存储的先后顺序可以是:第一类上下文信息,第二类上下文信息,第三类上下文信息,第四类上下文信息和第五类上下文信息,而在读取上下文信息时,可以先读取上述五类上下文信息中的任意一类,然后在从未读取的上下文信息中任意读取一类,直至上下文信息全部读取完成,即,在读取上下文信息时,其读取顺序是不做具体限定的。当然,上下文信息的存储顺序也不做具体限定,可以是任意顺序。
在图8所示实施例的基础上,本申请实施例提供的又一种上下文信息管理系统的结构示意图如图9所示,还可以包括:
第二查找模块901,第二读取模块902,第二装载模块903和第三挂载模块904;其中,
第二查找模块901用于当需要装载上下文信息时,依据待装载上下文信息所在的存储块的地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
第二读取模块902用于从查找到的存储块中读取各类上下文信息;
第二装载模块903用于按照预设的各类上下文信息的生成位置与子存储块的对应关系,将读取的各类上下文信息装载至所述各类上下文信息的生成位置;
第三挂载模块904用于将上下文信息被读取后的存储块挂载至所述第一链表的表头。
本申请实施例还提供一种微处理器内核,其集成有如上所述的上下文信息管理系统。
下面结合具体实例对本申请的实施例进行说明:
本实例中,存储块的大小为64Byte,用户可以通过指定存储块的数量来配置整个上下文存储区域的大小。
在实时操作系统启动时,将所有空闲的(即未被上下文信息占用的)存储块构成第一链表,在操作系统运行过程中,将所有已经被上下文信息占用的存储块构成第二链表;其中,第一链表的指针通过第一寄存器进行操作,所述第一寄存器用于记录所述第一链表的表头的存储块的地址;第二链表的指针通过第二寄存器进行操作,所述第二寄存器用于记录所述第二链表的表头的存储块的地址。
请参见图10,图10为本申请实施例提供的以链表形式管理上下文存储区域的示意图;其中,链表的每一个节点为一个存储块,每个节点存储两部分内容:一部分为数据,即上下文信息;另一部分为指针,用于存储该节点所链接的下一个节点的地址。
图10中,Block n(n=1,2,3,4……)表示第n个存储块;Address n+1为第n个存储块所属的节点中存储的节点指针,用于指示与第n个存储块所属的节点相链接的第n+1个节点的存储块的地址。需要说明的是,本实例中,“n”用于区别不同存储块,而不必用于描述特定的顺序或先后次序。
图10中,当前第一寄存器中存放着Block3的地址,假设现在任务A被抢占,需要存储任务A的上下文信息,上下文信息管理系统则根据第一寄存器的值,找到存储块Block3,将任务A的上下文信息存储至Block3中,同时,还会保存第二寄存器的值,即在当前使用的Block3记录上一个被占用的存储块的地址,如图10所示,Block2中记录有上一个被使用的Block1的地址,这样就保证了所有被使用的存储块能够按照被使用的先后顺序形成一条前续上下文列表。
上下文信息管理系统将任务A的上下文信息存储至Block3中后,将第一寄存器的值修改为下一个空闲的存储块的地址,这一过程相当于在空闲上下文列表的表头拆除一个存储块。参考图10中的示例,一旦Block3被用于保存上下文,Block3将从第一链表的表头被拆除,第一寄存器的值被修改为Block4的地址。
上下文信息管理系统将任务A的上下文信息存储至Block3中后,第二寄存器的值被更新为这个最近被使用的存储块的地址,这一过程相当于在第二链表的表头插入一个存储块。参考图10中的示例,Block3从第一链表中被拆除后,被挂载到第二链表的表头,第二寄存器的值被更新为Block3的地址,同时,由于Block3链接的存储块变为Block2,所以,Block3中的指针变更为Block2的地址。
存储上下文信息后,操作系统会为任务A记录当前第二寄存器的值,当任务A需要恢复执行时,操作系统根据记录的第二寄存器的值,在第二链表中找到保存着任务A的上下文信息的存储块,然后从中提取上下文信息重新装载到操作系统。
在图10所示示例的基础上,保存任务A的上下文信息后,链表的示意图变更为图11所示示意图;
在图11所示示例的基础上,假设当前任务A的优先级最高,需要重新执行任务A,那么,上下文信息管理系统会根据保存任务A的上下文信息的存储块的地址在第二链表中找到保存任务A的上下文信息的存储块,本示例中为Block3,在找到Block3后,上下文信息管理系统就会从Block3中逐项取出上下文信息装载到操作系统中。
将上下文信息装载到操作系统中后,上下文信息管理系统会将Block3从第二链表中拆除,挂载至第一链表的表头,并将Block3的地址更新到第一寄存器中,即将第一寄存器的值更新为Block3的地址,并将Block3的指针更新为Block4的地址;
之后,上下文信息管理系统会将第二寄存器的值修改为Block2的地址。
在图11所示示例的基础上,任务A的上下文被重新装载后,链表的示意图变更为图10所示的示意图。
在图11所示示例的基础上,假设又有任务B被抢占,需要存储任务B的上下文信息,上下文信息管理系统则根据第一寄存器的值,找到存储块Block4,将任务B的上下文信息存储至Block4中,同时,还会在Block4中保存第二寄存器的值,即在当前使用的Block4记录上一个被占用的存储块Block3的地址,如图11所示,Block2中记录有上一个被使用的Block1的地址,Block3中记录有上一个被使用的Block2的地址,这样就保证了所有被使用的存储块能够按照被使用的先后顺序形成一条前续上下文列表。
上下文信息管理系统将任务B的上下文信息存储至Block4中后,将第一寄存器的值修改为下一个空闲的存储块Block5的地址,这一过程相当于在空闲上下文列表的表头拆除一个存储块。参考图11中的示例,一旦Block4被用于保存上下文,Block4将从第一链表的表头被拆除,第一寄存器的值被修改为Block5的地址。
上下文信息管理系统将任务B的上下文信息存储至Block4中后,第二寄存器的值被更新为这个最近被使用的存储块Block4的地址,这一过程相当于在第二链表的表头插入一个存储块。参考图11中的示例,Block4从第一链表中被拆除后,被挂载到第二链表的表头,第二寄存器的值被更新为Block4的地址,同时,由于Block4链接的存储块变为Block3,所以,Block4中的指针变更为Block3的地址。
存储上下文信息后,操作系统会为任务B记录当前第二寄存器的值,当任务B需要恢复执行时,操作系统根据记录的第二寄存器的值,在第二链表中找到保存着任务B的上下文信息的存储块,然后从中提取上下文信息重新装载到操作系统。
在图11所示示例的基础上,保存任务B的上下文信息后,链表的示意图变更为图12所示示意图;
在图12所示示例的基础上,假设当前任务A的优先级最高,需要重新执行任务A,那么,上下文信息管理系统会根据保存任务A的上下文信息的存储块的地址在第二链表中找到保存任务A的上下文信息的存储块,本示例中为Block3,在找到Block3后,上下文信息管理系统就会从Block3中逐项取出上下文信息装载到操作系统中。
将上下文信息装载到操作系统中后,上下文信息管理系统会将Block3从第二链表中拆除,挂载至第一链表的表头,并将Block3的地址更新到第一寄存器中,即将第一寄存器的值更新为Block3的地址,并将Block3的指针更新为Block5的地址;
之后,上下文信息管理系统会将第二寄存器的值修改为Block2的地址。
在图12所示示例的基础上,任务A的上下文被重新装载后,链表的示意图变更为图13所示的示意图。
完成装载后,操作系统就会从当前PC指针寄存器所指向的位置上继续执行。由于上下文信息中包含PC指针寄存器的值,该值被装载后,已经指向了将要恢复执行的任务之前被中断的位置上,所以,操作系统会在这个位置上继续执行。
请参看图14和图15,图14中示出了本发明中使用RAM内存空间的实际情况;图15示出了操作系统在进行任务切换时,使用图14所示RAM内存空间进行上下文管理的操作过程。
低优先级任务A在执行过程中,操作系统发生一次调度,高优先级任务B抢占了低优先级任务A,A的上下文信息保存到上下文存储区域中当前第一个空闲的存储块中,即图15中所示的Block2中,同时Block2的地址被操作系统记录。任务B开始执行。
B执行完毕后,操作系统从之前记录的Block2的地址上读取任务A的上下文信息,重新装载到系统中,同时Block2恢复成空闲的状态。此后,任务A从之前被抢占的文职继续执行。
需要说明的是,本申请实施例中仅以任务抢占引起操作系统发生任务切换为例,对于中断打断任务造成操作系统保存上下文的处理操作与任务抢占相同,这里不再赘述。
另外,为了进一步提高上下文信息保存或装载的速度,本申请实施例提供的上下文信息管理系统可以集成在微处理器内核(以下简称内核)中,由硬件来实现。众所周知,在嵌入式系统中,一个微处理器是由一个内核加上一些外部设备共同构成的。不同种类的微处理器使用的内核种类、以及使用的外部设备种类都可能各不相同。所述微处理器和微处理器的内核都是硬件。实时操作系统是在微处理器上运行的软件,不是硬件。
当所述上下文信息管理系统的功能由内核来实现时,所述内核还提供供操作系统调用的,指示内核执行所述上下文信息管理方法的快捷指令,所述快捷指令包括:指示所述内核保存上下文信息的第一快捷指令,以及指示所述内核装载上下文信息的第二快捷指令。其中,第一快捷指令作为软件中断,具有操作系统的最高优先级,使用第一快捷指令作为操作系统的任务切换函数能够保证任务切换函数在执行过程中不被其它任何任务或中断打断。
具体的,以图10为例,当任务A被中断需要存储上下文信息时,操作系统调用第一快捷指令,触发所述内核从第一寄存器中取得处于空闲状态的存储块的地址,即Block3的地址,将当任务A的上下文信息保存到Block3中;之后,内核会将Block3的地址更新到第二寄存器中,即将第二寄存器的值更新为Block3的地址;然后,内核会将第一寄存器的值修改为下一个空闲的存储块的地址,图10所示示例中,内核会将第一寄存器的值修改为Block4的地址;最后,内核将PC指针寄存器的值修改为第一快捷指令所对应的中断服务函数的起始地址值,即记录任务A的中断位置。
当任务A需要回复执行时,操作系统将为任务A保存的存储块的地址装载至第二寄存器中,然后调用第二快捷指令,触发所述内核从所述第二寄存器中的地址所指向的存储块中取出上下文信息装载到操作系统中。以图10为例,当前第二寄存器指向Block2,那么,内核,就从Block2中逐项取出上下文信息重新装载到操作系统中。之后,内核会将Block2从第二链表中拆下来,挂载到第一链表的表头,并将Block2的地址更新到第一寄存器中,即将第一寄存器的值更新为Block2的地址,并将Block2中的指针更新为Block3的地址,然后,第二寄存器的值就会更新为Block1的地址。内核完成上述操作后,操作系统就从当前PC指针寄存器所指向的位置上继续执行。
与纯软件方法管理上下文信息相比,由于软件操作在编译过程中被解析为多条机器指令,操作系统在执行时需要逐条执行,而本申请实施例中,当将上下文管理方法集成在内核中,由硬件来实现时,由于操作系统只需要调用两条快捷指令即可实现上下文信息的管理,因此,将本申请实施例提供的上下文信息管理系统集成在内核中时,提高了上下文信息的保存和装载的速度。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。以上所述仅是本申请的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (9)
1.一种上下文信息管理方法,其特征在于,所述上下文信息的存储区域被平均划分为若干存储块,所述存储块的大小依据任务的上下文信息的数据量确定,其中,所有未被上下文信息占用的存储块构成第一链表,所有被上下文信息占用的存储块构成第二链表;所述方法包括:
当需要保存上下文信息时,将所述上下文信息存储至所述第一链表表头的存储块中;
将存储所述上下文信息的第一链表表头的存储块挂载至所述第二链表的表头;
记录存储所述上下文信息的存储块的地址。
2.根据权利要求1所述的方法,其特征在于,还包括:
当需要装载上下文信息时,依据待装载上下文信息所在的存储块的地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
从查找到的存储块中读取上下文信息,并将读取的上下文信息装载到操作系统中;
将上下文信息被读取后的存储块挂载到所述第一链表的表头。
3.根据权利要求1所述的方法,其特征在于,所述存储块被划分为若干子存储块,所述子存储块的个数大于或等于所述上下文信息的类型数;
所述将上下文信息存储至所述第一链表的表头的存储块中包括:
按照预设的各类上下文信息的生成位置与子存储块的对应关系,确定与所述各类上下文信息的生成位置所对应的子存储块;
将所述各类上下文信息存储至所确定的相应的子存储块中。
4.根据权利要求3所述的方法,其特征在于,还包括:
当需要装载上下文信息时,依据待装载上下文信息的存储地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
从查找到的存储块中读取各类上下文信息;
按照预设的各类上下文信息的生成位置与子存储块的对应关系,将读取的各类上下文信息装载至所述各类上下文信息的生成位置;
将上下文信息被读取后的存储块挂载至所述第一链表的表头。
5.一种上下文信息管理系统,其特征在于,所述上下文信息的存储区域被平均划分为若干存储块,所述存储块的大小依据任务的上下文信息的数据量确定,其中,所有未被上下文信息占用的存储块构成第一链表,所有被上下文信息占用的存储块构成第二链表;所述系统包括:
存储模块,用于当需要保存上下文信息时,将所述上下文信息存储至所述第一链表表头的存储块中;
第一挂载模块,用于将存储所述上下文信息的第一链表表头的存储块挂载至所述第二链表的表头;
记录模块,用于记录存储所述上下文信息的存储块的地址。
6.根据权利要求5所述的系统,其特征在于,还包括:
第一查找模块,用于当需要装载上下文信息时,依据待装载上下文信息所在的存储块的地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
第一读取模块,用于从查找到的存储块中读取上下文信息;
第一装载模块,用于将读取的上下文信息装载到操作系统中;
第二挂载模块,用于将上下文信息被读取后的存储块挂载到所述第一链表的表头。
7.根据权利要求5所述的系统,其特征在于,所述存储块被划分为若干子存储块,所述子存储块的个数大于或等于所述上下文信息的类型数;
所述存储模块包括:
确定单元,用于当需要保存上下文信息时,按照预设的各类上下文信息生成位置与子存储块的对应关系,确定与所述各类上下文信息的生成位置所对应的子存储块;
存储单元,用于将所述各类上下文信息存储至所确定的相应的子存储块中。
8.根据权利要求7所述的系统,其特征在于,还包括:
第二查找模块,用于当需要装载上下文信息时,依据待装载上下文信息所在的存储块的地址,在所述第二链表中查找存储所述待装载上下文信息的存储块;
第二读取模块,用于从查找到的存储块中读取各类上下文信息;
第二装载模块,用于按照预设的各类上下文信息的生成位置与子存储块的对应关系,将读取的各类上下文信息装载至所述各类上下文信息的生成位置;
第三挂载模块,用于将上下文信息被读取后的存储块挂载至所述第一链表的表头。
9.一种微处理器内核,其特征在于,集成有如权利要求5-8任意一项所述的上下文信息管理系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310589625.1A CN103593606B (zh) | 2013-11-20 | 2013-11-20 | 上下文信息管理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310589625.1A CN103593606B (zh) | 2013-11-20 | 2013-11-20 | 上下文信息管理方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103593606A true CN103593606A (zh) | 2014-02-19 |
CN103593606B CN103593606B (zh) | 2016-06-01 |
Family
ID=50083740
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310589625.1A Active CN103593606B (zh) | 2013-11-20 | 2013-11-20 | 上下文信息管理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103593606B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105094991A (zh) * | 2015-08-21 | 2015-11-25 | 北京经纬恒润科技有限公司 | 一种堆栈容量的设置方法及系统 |
CN106776354A (zh) * | 2016-11-11 | 2017-05-31 | 深圳创维数字技术有限公司 | 一种动态堆栈内存管理方法和装置 |
CN110633132A (zh) * | 2018-06-21 | 2019-12-31 | 瑞萨电子株式会社 | 存储器模块 |
CN114116204A (zh) * | 2021-11-02 | 2022-03-01 | 郑州市中心医院 | 一种基于传感器的磨牙症监测方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1658704A (zh) * | 2005-03-25 | 2005-08-24 | 北京北方烽火科技有限公司 | 一种gmlc中多目标定位时用户上下文的管理方法 |
US20110066795A1 (en) * | 2009-09-15 | 2011-03-17 | Via Technologies, Inc. | Stream context cache system |
-
2013
- 2013-11-20 CN CN201310589625.1A patent/CN103593606B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1658704A (zh) * | 2005-03-25 | 2005-08-24 | 北京北方烽火科技有限公司 | 一种gmlc中多目标定位时用户上下文的管理方法 |
US20110066795A1 (en) * | 2009-09-15 | 2011-03-17 | Via Technologies, Inc. | Stream context cache system |
Non-Patent Citations (1)
Title |
---|
罗炜: "嵌入式实时操作系统关键技术的研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 12, 15 December 2006 (2006-12-15) * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105094991A (zh) * | 2015-08-21 | 2015-11-25 | 北京经纬恒润科技有限公司 | 一种堆栈容量的设置方法及系统 |
CN106776354A (zh) * | 2016-11-11 | 2017-05-31 | 深圳创维数字技术有限公司 | 一种动态堆栈内存管理方法和装置 |
CN110633132A (zh) * | 2018-06-21 | 2019-12-31 | 瑞萨电子株式会社 | 存储器模块 |
CN114116204A (zh) * | 2021-11-02 | 2022-03-01 | 郑州市中心医院 | 一种基于传感器的磨牙症监测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103593606B (zh) | 2016-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8959515B2 (en) | Task scheduling policy for limited memory systems | |
EP3583504B1 (en) | Resource reclamation method and apparatus | |
CA2610180C (en) | Managing memory pages | |
US8473964B2 (en) | Transparent user mode scheduling on traditional threading systems | |
CN109857677B (zh) | 内核栈的分配方法及装置 | |
KR20110048531A (ko) | 가상처리장치의 인터럽트 제어 | |
TW201301029A (zh) | 具有增強型應用程式元資料之記憶體管理器 | |
WO2007099483A2 (en) | Method and apparatus for dynamic resizing of cache partitions based on the execution phase of tasks | |
US9547520B1 (en) | Virtual machine load balancing | |
CN103593606B (zh) | 上下文信息管理方法及系统 | |
US12067413B2 (en) | Apparatus for determining resource migration schedule | |
KR20070090649A (ko) | 멀티 코어 시스템에서 협력적 스케줄링을 제공하는 장치 및방법 | |
US20080098398A1 (en) | Efficient Switching Between Prioritized Tasks | |
CN107977275B (zh) | 基于消息队列的任务处理方法及相关设备 | |
CN112219196A (zh) | 表示用于无暂停垃圾收集的激活帧的方法和装置 | |
CN116107728B (zh) | 一种任务执行方法、装置、存储介质及电子设备 | |
CN112631510A (zh) | 堆栈区域扩充的方法、装置及硬件平台 | |
CN107480071B (zh) | 缓存数据迁移方法及装置 | |
JP2006031203A (ja) | 車載情報端末 | |
JP2019160155A (ja) | 情報処理装置、情報処理方法、及びプログラム | |
US9619277B2 (en) | Computer with plurality of processors sharing process queue, and process dispatch processing method | |
KR101378058B1 (ko) | 임베디드 시스템에서의 동적 메모리 관리방법 | |
CN110959152B (zh) | 访问控制装置 | |
JP5948416B2 (ja) | 情報処理装置、情報保存処理プログラム及び情報保存処理方法 | |
CN112000471B (zh) | 内存优化方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 4 / F, building 1, No.14 Jiuxianqiao Road, Chaoyang District, Beijing 100020 Patentee after: Beijing Jingwei Hirain Technologies Co.,Inc. Address before: 8 / F, block B, No. 11, Anxiang Beili, Chaoyang District, Beijing 100101 Patentee before: Beijing Jingwei HiRain Technologies Co.,Ltd. |
|
CP03 | Change of name, title or address |