CN107643943A - 一种任务栈的管理方法及装置 - Google Patents
一种任务栈的管理方法及装置 Download PDFInfo
- Publication number
- CN107643943A CN107643943A CN201610576230.1A CN201610576230A CN107643943A CN 107643943 A CN107643943 A CN 107643943A CN 201610576230 A CN201610576230 A CN 201610576230A CN 107643943 A CN107643943 A CN 107643943A
- Authority
- CN
- China
- Prior art keywords
- task
- address space
- stack
- read
- access rights
- 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.)
- Pending
Links
- 238000007726 management method Methods 0.000 title claims abstract description 26
- 238000000034 method Methods 0.000 claims abstract description 23
- 238000013507 mapping Methods 0.000 claims description 71
- 238000012545 processing Methods 0.000 claims description 14
- 238000013467 fragmentation Methods 0.000 claims description 13
- 238000006062 fragmentation reaction Methods 0.000 claims description 13
- 238000009826 distribution Methods 0.000 claims description 9
- 230000011218 segmentation Effects 0.000 claims description 7
- 230000005856 abnormality Effects 0.000 claims description 6
- 238000001514 detection method Methods 0.000 claims description 5
- 230000001960 triggered effect Effects 0.000 claims description 4
- 230000006870 function Effects 0.000 description 13
- 230000000694 effects Effects 0.000 description 11
- 238000012986 modification Methods 0.000 description 11
- 230000004048 modification Effects 0.000 description 11
- 238000004590 computer program Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 6
- 238000002955 isolation Methods 0.000 description 4
- 230000018109 developmental process Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000011835 investigation Methods 0.000 description 3
- 230000007257 malfunction Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000009413 insulation Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种任务栈的管理方法及装置。本发明方法包括:当任务被调度进入处理器运行时,将所述任务的栈地址空间的访问权限修改为可读写;当任务被切换出处理器时,将所述任务的栈地址空间的访问权限修改为只读。本发明能够提高共享物理地址空间模式下系统的可靠性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种任务栈的管理方法及装置。
背景技术
嵌入式系统一般采用两种模式,一种是多任务物理地址空间隔离,代表包括有Linux进程模型;另一种是多任务共享物理地址空间,代表包括有VxWorks早期版本以及一些简易的实时操作系统(Real Time Operating System,RTOS)。
在物理地址空间隔离模式下,各个任务运行在各自的进程空间中,所有的资源都是相互隔离的,尽管能够保证较高的可靠性,但也同时存在一些不利因素,比如给软件开发带来很大难度,特别是进程间需要共享资源或者通信时这种模式尤其复杂,另外物理地址空间隔离模式下系统性能也会有较大影响,进程切换带来的高速缓冲存储器(cache)、传输后备缓冲器(Translation Lookaside Buffer,TLB)、页表的切换会显著影响系统系能。
在共享物理地址空间模式下,系统中的所有资源都是全局共享的,包括全局变量、堆、任务栈,使得代码开发非常容易,但是弊端是软件的可靠性面临挑战,栈溢出、非法改写是大型软件系统中的疑难问题。
因此,如何提高共享物理地址空间模式下系统的可靠性,是业界所亟待研究和解决的问题。
发明内容
本发明实施例提供一种任务栈的管理方法及装置,用以提高共享物理地址空间模式下系统的可靠性。
本发明的一个实施例提供的任务栈的管理方法,包括:
当任务被调度进入处理器运行时,将所述任务的栈地址空间的访问权限修改为可读写;
当任务被切换出处理器时,将所述任务的栈地址空间的访问权限修改为只读。
可选地,所述将所述任务的栈地址空间的访问权限修改为可读写,包括:
获取所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为可读写;
所述将所述任务的栈地址空间的访问权限修改为只读,包括:
获取所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为只读。
可选地,本发明的一个实施例提供的任务栈的管理方法还包括:
在任务创建时,为任务分配任务栈并设置所述任务的栈地址空间的访问权限为只读。
可选地,所述为任务分配任务栈并设置所述任务的栈地址空间的访问权限为只读,包括:
为任务分配任务栈,建立并保存所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限设置为只读。
可选地,所述为任务分配任务栈,建立并保存将所述任务的栈地址空间到物理地址空间的映射关系,包括:
根据分页机制为任务分配任务栈;其中,所述任务的栈地址空间的首地址、大小为物理页尺寸的整数倍;将所述任务的栈地址空间按照页表映射的方式映射到物理页,并保存所述任务的栈地址空间到物理页的映射关系;或者
根据分段机制为任务分配任务栈;将所述任务的栈地址空间按照段式映射的方式映射到物理地址段,并保存所述任务的栈地址空间到物理地址段的映射关系。
可选地,本发明的一个实施例提供的任务栈的管理方法还包括:
检测是否有任务对访问权限为只读的栈地址空间进行写操作;
若检测到有,则触发异常处理流程,以中止所述任务对所述访问权限为只读的栈地址空间的写操作,并对所述任务的信息进行记录。
本发明的一个实施例提供的任务栈的管理装置,包括:
第一修改模块,用于当任务被调度进入处理器运行时,将所述任务的栈地址空间的访问权限修改为可读写;
第二修改模块,用于当任务被切换出处理器时,将所述任务的栈地址空间的访问权限修改为只读。
可选地,所述第一修改模块,具体用于:
当任务被调度进入处理器运行时,获取所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为可读写;
所述第二修改模块,具体用于:
当任务被切换出处理器时,获取所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为只读。
可选地,本发明的一个实施例提供的任务栈的管理装置还包括:
设置模块,用于在任务创建时,为任务分配任务栈并设置所述任务的栈地址空间的访问权限为只读。
可选地,所述设置模块,具体用于:
为任务分配任务栈,建立并保存所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限设置为只读。
可选地,所述设置模块,具体用于:
根据分页机制为任务分配任务栈;其中,所述任务的栈地址空间的首地址、大小为物理页尺寸的整数倍;将所述任务的栈地址空间按照页表映射的方式映射到物理页,并保存所述任务的栈地址空间到物理页的映射关系;或者
所述设置模块,具体用于:
根据分段机制为任务分配任务栈;将所述任务的栈地址空间按照段式映射的方式映射到物理地址段,并保存所述任务的栈地址空间到物理地址段的映射关系。
可选地,本发明的一个实施例提供的任务栈的管理装置还包括:
检测模块,用于检测是否有任务对访问权限为只读的栈地址空间进行写操作;以及,用于在检测到有所述任务时,触发异常处理流程,以中止所述任务对所述访问权限为只读的栈地址空间的写操作,并对所述任务的信息进行记录。
本发明上述实施例所提供的任务栈的管理方案中,当任务被调度进入处理器运行时,将该任务的栈地址空间的访问权限修改为可读写;当任务被切换出处理器时,将该任务的栈地址空间的访问权限修改为只读。通过本发明上述实施例所提供的技术方案,使得任务在被调度进入运行时,其栈地址空间能够被读写,而当任务被切换出处理器时,其栈地址空间的访问权限为只读,访问权限为只读的栈地址空间不接受来自其它任务的非法写操作,从而能够避免任务的栈地址空间被其它任务非法访问而导致的栈溢出或栈非法改写等可靠性问题,因此能够实现对共享物理地址空间模式下多任务的任务栈之间的一种隔离保护,达到提高共享物理地址空间模式下系统的可靠性的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的一个实施例提供的任务栈的管理方法的流程示意图;
图2为本发明的一个实施例提供的任务栈的管理方法的流程示意图;
图3为本发明的一个实施例提供的任务栈的管理方法在任务创建过程中的示意图;
图4为本发明的一个实施例提供的任务栈的管理方法在任务切换过程中的示意图;
图5为本发明的一个实施例提供的任务栈的管理装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
大型软件系统中,共享物理地址空间(或者也可以理解为共享物理内存空间)的主要目的是共享全局变量、共享内存、降低任务切换的系统开销,所有任务(Task)共享同一物理地址空间,任务之间没有地址保护机制,任务之间可以直接共享变量,不需要内核在不同的地址空间之间复制数据。
尽管共享物理地址空间模式能够为软件开发提供便利,但是在共享物理地址空间模式下,软件的可靠性往往不能得到很好的保障,其中,软件故障大多跟任务栈(Stack)的使用有关,主要为栈溢出和栈非法改写。
其中,堆栈非法改写是指由于软件漏洞(bug)导致的任务栈被其他软件代码误操作后任务的栈结构被破坏,从而引发运行故障;栈溢出后会导致该栈所对应的任务的栈结构被破坏,导致访问非法地址引发运行故障,这种溢出情况目前可以通过编译器的一些编译手段插入一些检查指令来检查与发现,但是栈溢出具有滞后效应以及广泛的牵连性,一个任务的栈大量溢出后则会破坏其它任务的数据,改写其他任务栈,导致其他任务运行故障,这种情况不仅有可能会导致整个系统的崩溃,也使得更难准确定位是哪一个任务导致的故障,比如任务A的栈溢出,由于任务A的栈溢出,将会导致任务B栈中的内容被改写,如果被改写的是任务B的局部变量,则可能造成地址访问异常,如果改写的是任务B的函数调用指针信息,则可能造成指令访问异常,可以看到任务A的栈溢出,带来的现象是任务B异常,因此严重干扰了问题的分析和定位。
为了克服上述在共享地址空间模式下的任务栈使用中所存在栈溢出以及栈非法改写的问题,提供共享物理地址空间模式下系统的可靠性,本发明实施例提出一种任务栈的管理技术方案。
本发明实施例所提供的技术方案中,采取了在任务被调度进入处理器运行时,将该任务的栈地址空间的访问权限修改为可读写,以及在任务被切换出处理器时,将该任务的栈地址空间的访问权限修改为只读的措施。通过上述措施,可以看到,本发明实施例所提供的技术方案使得任务在被调度进入运行时,其栈地址空间能够被读写,而任务被切换出处理器时,其栈地址空间的访问权限为只读,访问权限为只读的栈地址空间不接受来自其它任务的非法写操作,从而能够避免任务的栈地址空间被其它任务非法访问而导致的栈溢出或栈非法改写等可靠性问题,因此能够实现对共享物理地址空间模式下多任务的任务栈之间的一种隔离保护,达到提高共享物理地址空间模式下系统的可靠性的效果。
下面结合附图对本发明实施例进行详细描述。
图1示出了本发明的一些实施例提供的任务栈的管理方法的流程示意图,该流程可由软件编程实现、或者由硬件电路实现、或者由软硬件的结合实现,比如可以通过程序来指令相关的硬件完成,所述程序可以存储于计算机系统的存储器中,由处理器读取存储器中的程序和数据来执行。
为了更清楚地理解图1所示的流程,下面首先对图1所示的流程以及本申请所涉及的一些技术术语进行简要说明,应当理解的是,这些对技术术语的简要说明并不构成对本申请的限定。
任务(task):可以理解为是具有独立功能的无限循环的程序段的一次运行活动。一般地,每个任务都被配置有优先级,由一个无限循环的程序段规定其功能,并相应有一个数据段、堆栈段及一个任务控制块(Task Control Block,TCB)。任务的状态通常可以分为就绪态(ready)、运行态(running)、挂起态(suspended)、阻塞态(Blocked)、睡眠态(sleep)、休眠态(dormant)等。可以认为任务被创建后进入就绪态,被调度进入处理运行时进入运行态。
任务栈(Stack):通常是系统在创建任务时为任务分配的一段连续的虚拟地址空间,任务栈中一般存放有任务的首地址、状态寄存器、栈指针、现场数据等重要信息。
任务的栈地址空间:用于表示任务所分配到的该连续的虚拟地址空间,可以通过映射机制映射到物理地址空间。
任务调度:可以理解为系统为从就绪状态的任务中确定出一个任务到处理器上运行。负责任务调度功能的内核程序可以称为任务调度器,任务调度器主要用于在多任务环境下确定任务执行的顺序,以及在确定任务在获得处理器资源后运行的时间长度。
任务切换:可以理解为原先占据处理器资源的任务被当前调度的任务切换出处理器,当前被调度的任务获取处理器资源,进入处理器运行。任务切换发生在两个任务之间,一个是被换切换出去的任务,另一个是被调度的将要在处理器上运行的任务。任务切换过程中包括保存将被切换出去的任务(或可表达为旧任务、切出任务等)的上下文,并将当前被调度的任务(或可表达为新任务、切入任务等)的栈中所保存的上下文复制到处理器的相关寄存器中。发生任务切换的情况包括有当前处理器上运行的任务运行时间到、优先级更高任务抢占处理器资源、当前处理器上运行的任务进入休眠态或等待某事件发生等。
如图1所示,本发明的一些实施例提供的任务栈的管理方法的流程包括如下步骤:
步骤101:当任务被调度进入处理器运行时,将该任务的栈地址空间的访问权限修改为可读写。
步骤102:当任务被切换出处理器时,将该任务的栈地址空间的访问权限修改为只读。
可以看到,本发明的一些实施例中,如果任务被调度进入处理器运行,或者也可以理解为任务被调度进入运行态,或者也可以理解为发生了任务切换,原先占据处理器资源的任务被当前所调度的任务切换出处理器,当前被调度的任务获取处理器资源,通过步骤101可使得当前被调度的任务的栈地址空间的访问权限被修改为可读写,而通过步骤102可使得被切换出处理器的任务的栈地址空间的访问权限被修改为只读,从而能够使得被调度的任务能够正常的进行对该任务的栈地址空间的读写操作,而被切换出处理器的任务的栈地址空间则能够获得保护,即访问权限为只读的栈地址空间将不接受(或可理解为拒绝)来自其它任务的非法写操作,从而能够避免任务的栈地址空间被其它任务的非法写操作破坏,达到了提高共享物理地址空间模式下系统的可靠性的效果。
由于任务的栈地址空间实际上是系统在创建任务时为任务分配的一段虚拟地址空间,而处理器或内核实际进行操作的是物理地址空间,具体地,在本发明的一些实施例中,在步骤101中将被调度进入处理器运行的任务的栈地址空间的访问权限修改为可读写,具体可通过以下过程实现:
获取该任务的栈地址空间到物理内存空间的映射关系;
根据所获取到的该映射关系,将该任务的栈地址空间对应的物理地址空间的访问权限修改为可读写。
相应地,在本发明的一些实施例中,在步骤102中将被切换出处理器的任务的栈地址空间的访问权限修改为只读,具体可通过以下过程实现:
获取该任务的栈地址空间到物理内存空间的映射关系;
根据所获取到的该映射关系,将该任务的栈地址空间对应的物理地址空间的访问权限修改为只读。
进一步地,本发明的一些可选实施例中,还可以包括在任务创建时,为任务分配任务栈并设置该任务的栈地址空间的访问权限为只读。
可以看到,通过在任务创建时,为任务分配任务栈并设置该任务的栈地址空间的访问权限为只读,可以使得系统创建的任务的栈地址空间的访问权限为只读,从而能够使得被创建进入就绪态的任务的栈地址空间也能够拒绝来自其它任务的非法写操作,进而避免了处于就绪态的任务的栈地址空间被其它任务破坏,达到提高共享物理地址空间模式下系统的可靠性的效果。
具体地,图2示出了本发明的一些实施例提供的任务栈的管理方法的流程示意图。如图2所示,在发明的一些实施例中,具体包括有以下步骤:
在任务创建时,为任务分配任务栈并设置该任务的栈地址空间的访问权限为只读(步骤201);当任务被调度进入处理器运行时,将该任务的栈地址空间的访问权限修改为可读写(步骤202);当任务被切换出处理器时,将该任务的栈地址空间的访问权限修改为只读(步骤203)。
可以看到,通过如图2所示的流程,可以能够使得被创建进入就绪态的任务和被切换出处理器的任务的栈地址空间均能够拒绝来自其它任务的非法写操作,进而达到提高共享物理地址空间模式下系统的可靠性的效果。
进一步地,在本发明的一些可选实施例中,在任务创建时,为任务分配任务栈,建立并保存该任务的栈地址空间到物理地址空间的映射关系;进而可以根据所保存的该映射关系,将任务的栈地址空间对应的物理地址空间的访问权限设置为只读。
相应地,在本发明的一些可选实施例中,通过在任务创建时保存该任务的栈地址空间到物理内存空间的映射关系,在该任务被调度进入处理器运行时,可以获取所保存的该映射关系,从而根据该映射关系,将该任务的栈地址空间对应的物理地址空间的访问权限修改为可读写;在该任务被切换出处理器时,可以是先获取所保存的该映射关系,从而根据该映射关系,将该任务的栈地址空间对应的物理地址空间的访问权限修改为只读。
其中,在嵌入式系统中通常一个系统只有一个物理地址空间,物理地址空间的大小取决于处理器实现的物理地址位数,物理地址是处理器提交到总线上用于访问计算机内存和外设的最终地址。为了物理地址空间能够被有效使用,引入虚拟地址空间的概念,系统对物理地址空间通过采用灵活的管理机制,比如分段机制以及分页机制等,使得在只有一个物理地址空间的情况下,存在多个虚拟地址空间,虚拟地址空间通过一定的映射方式映射到物理地址空间中,多任务各自通过虚拟地址来访问其中的内容。
具体地,在本发明的一些实施例中,在创建任务时可根据分段机制为任务分配任务栈,从而可将任务的栈地址空间按照段式映射的方式映射到物理地址段,并保存任务的栈地址空间到物理地址段的映射关系,进而可以根据所保存的任务的栈地址空间到物理地址段的映射关系,将对任务的栈地址空间的访问权限的设置或修改,具体化为对相应的物理地址段的访问权限的设置或修改。
其中,分段机制是一种基于硬件的内存管理机制,在分段机制中,物理地址空间划分为多个物理地址段(Segment),每个物理地址段有各自的起始地址和长度属性,大小不固定,每个段可以通过段描述符描述,段描述符用以指明段的大小、访问权限和段的特权级、段类型等。
由于物理地址空间在分段机制中被分为若干个物理地址段,进而根据分段机制为任务分配任务栈时,任务的栈地址空间对应与一个物理地址段,从而使得任务的栈地址空间能够按照段式映射的方式映射到物理地址段,进而使得处理器能够通过该映射关系访问栈地址空间所对应的物理地址段。
其中,任务的栈地址空间到物理地址空间的映射关系具体可以通过程序指令及相应的操作创建并保存为段描述符表,段描述符表中可以对应与每个任务的栈地址空间保存该任务栈地址空间对应的物理地址段的段描述符,从而可以通过对该段描述符表的操作来实现对任务的栈地址空间对应的物理地址段的访问权限的设置或修改。
具体地,在本发明的又一些实施例中,在创建任务时可以根据分页机制为任务分配任务栈,从而可以将任务的栈地址空间按照页表映射的方式映射到物理页,并保存任务的栈地址空间到物理页的映射关系,进而可以根据所保存的该任务的栈地址空间到物理页的映射关系,将对任务的栈地址空间的访问权限的设置或修改具体化为对相应的物理页的访问权限的设置或修改。
其中,分页机制是在分段机制基础上,为了解决分段机制对内存使用效率较低的缺点而引入的一种内存管理机制。在分页机制中,物理地址空间分为若干固定大小的物理页(Page),每一页大小具体可以由硬件来决定,或者如果硬件支持多种大小的页,则可以是由系统来决定。在目前,绝大多数系统支持大小为4KB的分页。
由于物理地址空间在分页机制中被分为若干页,进而根据分页机制为任务分配任务栈时,任务的栈地址空间应当满足页对齐条件,即任务的栈地址空间的首地址、大小为物理页尺寸的整数倍,从而使得任务的栈地址空间能够分为若干个虚拟页,按照页表映射的方式映射到物理页,进而使得处理器能够通过该映射关系访问栈地址空间所对应的物理地址空间。
其中,任务的栈地址空间到物理地址空间的映射关系具体可以通过程序指令及相应的操作创建并保存为页表,页表中的每一行可以对应与一个任务栈地址空间的虚拟页,并在该行中包含该虚拟页对应的物理页的地址,以及该物理页的访问权限和该页的缓冲特性等,从而可以通过对该页表的操作来实现对任务的栈地址空间对应的物理页的访问权限的设置或修改。
具体地,在本发明的一些可选实施例中可以通过内存管理单元(MemoryManagement Unit,MMU)来实现上述存储管理机制以及相应的将任务的栈地址空间到物理地址空间的映射等操作,MMU可以设置在处理器内,也可以设置在处理器外。
进一步地,在本发明的一些可选实施例中,还可以进一步包括对任务的非法访问操作的检测过程,从而对任务对栈地址空间的访问操作进行监测,不仅能够防止任务的非法访问造成对系统的破坏,还能够通过记录发生非法访问任务的相关信息来快速确定出现故障的任务,降低后续故障排查定位的困难。
具体地,在本发明的一些可选实施例中,还可以包括:检测是否有任务对访问权限为只读的栈地址空间进行写操作;若检测到有,则触发异常处理流程,以中止该任务对访问权限为只读的栈地址空间的写操作,并对该任务的信息进行记录。
其中,任务的信息可以包括如下信息:任务的任务标识(或名称),寄存器信息和该任务的函数调用信息。其中,寄存器信息可以包括有程序指针,控制寄存器指针,机器状态寄存器指针,栈指针,数据访问寄存器指针等。
进一步地,任务的信息可以记录到不易失闪存或者文件,这样即使任务故障造成系统重启,发生故障的任务的信息不会丢失,从而可以用于问题的分析和故障的定位。
具体地,比如在本发明的一些实施例中,可以通过设置任务异常钩子(Hook)函数来监测是否有任务对访问权限为只读的栈地址空间进行写操作。当一个任务尝试对访问权限为只读的地址空间进行写操作时,将会触发系统产生地址访问异常中断,从而触发自动调用任务异常钩子函数,将任务的标识,异常中断向量,以及当前寄存器指针等作为输入参数传递给任务异常钩子函数,从而实现对地址访问异常中断的监听。
进一步地,在保存了尝试对访问权限为只读的栈地址空间进行写操作的任务的信息后,还可以根据该信息构造告警信息上报到系统,简化后续故障排查与定位的困难。可选地,中止该发生非法写操作的任务后还可以对该任务进行重新启动。
通过上面的描述可以看到,本发明的实施例所提供的任务栈的管理技术方案中,主要采取了在任务被调度进入处理其运行时,将任务的栈地址空间的访问权限修改为可读写,以及在任务被切换出处理器时,将任务的栈地址空间的访问权限修改为只读的措施,以达到提高共享物理地址空间模式下系统的可靠性的效果,并还可以进一步地在任务创建过程中采取将任务的栈地址空间的访问权限设置为只读的措施。为了更清楚的说明本发明的实施例所提供的任务栈的管理技术方案,下面将分别对本发明的一些实施例所提供的任务栈的管理技术方案在任务创建过程和任务切换过程中的应用进行详细描述。
图3示出了本发明的一些实施例所提供的任务栈的管理方法在任务创建过程中的示意图。
如图3所示,本发明的一些实施例所提供的任务栈的管理技术方案中,在任务创建过程中主要包括有:创建任务(步骤301);创建任务关键资源(步骤302);分配任务栈(步骤303);记录任务的栈地址空间到物理地址空间的映射关系(步骤304);设置任务的栈地址空间的访问权限为只读(步骤305)。
具体地,步骤301中可以通过调用任务创建函数来创建任务,比如调用系统提供的一些应用程序编程接口(Application Programming Interface,API)函数。比如,通过调用任务创建函数可以动态地创建一个具有优先级、任务的标识以及任务代码的起始地址的任务,步骤302中创建任务关键资源主要是包括在任务的创建过程中为任务分配任务控制块TCB,以及对TCB的初始化等。其中,TCB的大小可以根据具体的环境以及处理器的类型来确定。
具体地,步骤303中可以从操作系统的系统内存中为任务分配任务栈需要的内存空间。现有技术中,实时操作系统的系统内存一般包含静态数据区和动态数据区。在一些实时操作系统中,比如VxWorks中,用于任务栈的内存空间,既可以从静态数据区内分配,又可以从动态数据区用于栈的区域中分配。而在又一些实时操作系统中,用于任务栈的内存空间只能从静态数据区中分配。
其中,步骤303中为任务分配任务栈时,在分页机制下,任务的栈地址空间大小应当满足页对齐条件,即任务的栈地址空间的首地址以及大小均为物理页尺寸的整数倍。
其中,步骤304具体可以是在为步骤303执行完成后,自动为任务栈建立并默认保存任务的栈地址空间到物理地址空间的映射关系,步骤305则可以是自动将任务的栈地址空间到物理地址空间的访问权限设置为只读。
通过上述图3所示例性示出的任务创建过程,任务创建完成后,即可以认为任务具备运行的能力,进入就绪状态,从而可以将任务插入就绪任务列表或队列中,等待任务调度器的调度,同时任务的栈地址空间的访问权限被设置为只读,任务的栈地址空间将只能被所属任务访问,其他任务访问则成为非法访问,从而能够从系统层面对非法访问进行拦截保护,提高了系统的可靠性。
图4示出了本发明的一些实施例所提供的任务栈的管理方法在任务切换过程中的示意图。
如图4所示,本发明的一些实施例所提供的任务栈的管理技术方案中,在任务切换过程中主要包括有:获取切入任务的栈信息(步骤401);修改切入任务的栈地址空间的访问权限为可读写(步骤402);获取切出任务的栈信息(步骤403);修改切出任务的栈地址空间的访问权限为只读(步骤404)。
具体地,步骤401中获取切入任务的栈信息主要包括获取切入任务的栈地址空间到物理地址空间的映射关系,其中,该映射关系可以是在该任务在如图3所示的任务创建过程中所保存的。从而在步骤402中,根据该映射关系,将切入任务的栈地址空间所对应的物理地址空间的访问权限修改为可读写。相应地,步骤403中获取切出任务的栈信息主要包括获取切出任务的栈地址空间到物理地址空间的映射关系,从而在步骤404中,将切出任务的栈地址空间所对应的物理地址空间的访问权限修改为只读。或者更形象地,在共享物理地址空间模式下,任务所能访问的地址空间为可以理解为系统地址空间,从而通过上述步骤,能够将切入任务的栈地址空间添加进入系统地址空间,并将切出任务的栈地址空间从系统地址空间中移除。
通过以上描述可以看出,在本发明实施例中提供的任务栈的管理技术方案中,当任务被调度进入处理器运行时,将该任务的栈地址空间的访问权限修改为可读写;当任务被切换出处理器时,将该任务的栈地址空间的访问权限修改为只读。从而使得任务在被调度进入运行时,其栈地址空间能够被读写,而当任务被切换出处理器时,其栈地址空间的访问权限为只读,因此能够避免任务的栈地址空间被其它任务非法访问而导致多种可靠性问题,达到提高共享物理地址空间模式下系统的可靠性的效果。
进一步地,在本发明实施例中提供的任务栈的管理技术方案中,还可以在任务创建时,为任务分配任务栈并设置任务的栈地址空间的访问权限为只读,从而使得创建的任务的栈地址空间的访问权限为只读,从而能够使得被创建进入就绪态的任务的栈地址空间也能够拒绝来自其它任务的非法写操作,进而避免了处于就绪态的任务的栈地址空间被其它任务破坏,进一步地达到提高共享物理地址空间模式下系统的可靠性的效果。
可以看到,通过本发明上述实施例所提供的技术方案,能够使得创建的任务以及被切换出处理器的任务的栈地址空间的访问权限均处于只读的状态,从而实现对共享物理地址空间模式下多任务的任务栈之间的一种隔离保护,达到提高共享物理地址空间模式下系统的可靠性的效果。
同时,在本发明的一些实施例中还可以进一步地包括对尝试对访问权限为只读的栈地址空间进行写操作的任务的检测和相应的对发生上述操作的任务的信息的记录,从而能够通过所记录的相关信息快速定位出现故障的任务,降低后续故障排查定位的困难。
基于相同的技术构思,本发明实施例还提供一种任务栈的管理装置,该装置可执行本发明的上述任务栈的管理方法实施例。可选地,该装置可以具体实现为软件、或者硬件电路、或者软硬件的结合,比如该装置可以实现为计算机程序产品,所述计算机程序产品可以存储于计算机系统的存储器中,由处理器读取存储器中的程序和数据来执行。
图5示出了本发明的一些实施例提供的任务栈的管理装置。
如图5所示,本发明的一些实施例提供的任务栈的管理装置包括:
第一修改模块501,用于当任务被调度进入处理器运行时,将所述任务的栈地址空间的访问权限修改为可读写;
第二修改模块502,用于当任务被切换出处理器时,将所述任务的栈地址空间的访问权限修改为只读。
在本发明的一些可选实施例中,所述第一修改模块501,具体用于:
当任务被调度进入处理器运行时,获取所述任务的栈地址空间到物理地址空间的映射关系;根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为可读写。
在本发明的一些可选实施例中,所述第二修改模块502,具体用于:
当任务被切换出处理器时,获取所述任务的栈地址空间到物理地址空间的映射关系;根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为只读。
在本发明的一些可选实施例中,还包括有:
设置模块503,用于在任务创建时,为任务分配任务栈并设置所述任务的栈地址空间的访问权限为只读。
在本发明的一些可选实施例中,设置模块503,具体用于:
为任务分配任务栈,建立并保存所述任务的栈地址空间到物理地址空间的映射关系;根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限设置为只读。
本发明的一些可选实施例中,设置模块503可以根据分页机制为任务分配任务栈;其中,所述任务栈的地址空间的首地址、大小为物理页尺寸的整数倍;进而可以将所述任务的栈地址空间按照页表映射的方式映射到物理页,并保存所述任务的栈地址空间到物理页的映射关系。
本发明的又一些可选实施例中,设置模块503可以根据分段机制为任务分配任务栈;进而可以将所述任务的栈地址空间按照段式映射的方式映射到物理地址段,并保存所述任务的栈地址空间到物理地址段的映射关系。
进一步地,本发明的一些可选实施例中,还可以包括:
检测模块,用于检测是否有任务对访问权限为只读的栈地址空间进行写操作;以及,用于在检测到有所述任务时,触发异常处理流程,以中止所述任务对所述访问权限为只读的栈地址空间的写操作,并对所述任务的信息进行记录。
基于相同的技术构思,本发明的一个实施例还提供了一种计算机系统,该计算机系统可具体包括本发明前述实施例所提供的任务栈的管理装置,可执行本发明前述实施例所揭示的任务栈的管理方法的流程。
在本发明的一些实施例提供的计算机系统中,实现本发明的上述实施例所提供的任务栈的管理方法中的全部或部分步骤,具体可以是通过程序来指令相关的硬件完成,所述的程序可以存储于计算机系统的存储器中,由处理器读取存储器中的程序和数据,在任务创建时,为任务分配任务栈并设置任务的栈地址空间的访问权限为只读,以及在任务切换时,将被调度进入处理器运行的任务的栈地址空间的访问权限修改为可读写,将被切换出处理器的任务的栈地址空间的访问权限修改为只读。
具体地,本发明的一些实施例所提供的计算机系统,具体可以是个人电脑、移动通信终端、通信系统中的单板等。
本发明可以实现为方法、装置、系统或实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码,程序代码可以储存在存储器单元中,并且由处理器执行。存储器单元可以在处理器内或者在处理器外实现。具体可以实现为完全的硬件、也可以完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (12)
1.一种任务栈的管理方法,其特征在于,该方法包括:
当任务被调度进入处理器运行时,将所述任务的栈地址空间的访问权限修改为可读写;
当任务被切换出处理器时,将所述任务的栈地址空间的访问权限修改为只读。
2.如权利要求1所述的方法,其特征在于,所述将所述任务的栈地址空间的访问权限修改为可读写,包括:
获取所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为可读写;
所述将所述任务的栈地址空间的访问权限修改为只读,包括:
获取所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为只读。
3.如权利要求1所述的方法,其特征在于,还包括:
在任务创建时,为任务分配任务栈并设置所述任务的栈地址空间的访问权限为只读。
4.如权利要求3所述的方法,其特征在于,所述为任务分配任务栈并设置所述任务的栈地址空间的访问权限为只读,包括:
为任务分配任务栈,建立并保存所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限设置为只读。
5.如权利要求4所述的方法,其特征在于,所述为任务分配任务栈,建立并保存将所述任务的栈地址空间到物理地址空间的映射关系,包括:
根据分页机制为任务分配任务栈;其中,所述任务的栈地址空间的首地址、大小为物理页尺寸的整数倍;将所述任务的栈地址空间按照页表映射的方式映射到物理页,并保存所述任务的栈地址空间到物理页的映射关系;或者
根据分段机制为任务分配任务栈;将所述任务的栈地址空间按照段式映射的方式映射到物理地址段,并保存所述任务的栈地址空间到物理地址段的映射关系。
6.如权利要求1至5中任一项所述的方法,其特征在于,还包括:
检测是否有任务对访问权限为只读的栈地址空间进行写操作;
若检测到有,则触发异常处理流程,以中止所述任务对所述访问权限为只读的栈地址空间的写操作,并对所述任务的信息进行记录。
7.一种任务栈的管理装置,其特征在于,该装置包括:
第一修改模块,用于当任务被调度进入处理器运行时,将所述任务的栈地址空间的访问权限修改为可读写;
第二修改模块,用于当任务被切换出处理器时,将所述任务的栈地址空间的访问权限修改为只读。
8.如权利要求7所述的装置,其特征在于,所述第一修改模块,具体用于:
当任务被调度进入处理器运行时,获取所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为可读写;
所述第二修改模块,具体用于:
当任务被切换出处理器时,获取所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限修改为只读。
9.如权利要求7所述的装置,其特征在于,还包括:
设置模块,用于在任务创建时,为任务分配任务栈并设置所述任务的栈地址空间的访问权限为只读。
10.如权利要求9所述的装置,其特征在于,所述设置模块,具体用于:
为任务分配任务栈,建立并保存所述任务的栈地址空间到物理地址空间的映射关系;
根据所述映射关系,将所述任务的栈地址空间对应的物理地址空间的访问权限设置为只读。
11.如权利要求10所述的装置,其特征在于,所述设置模块,具体用于:
根据分页机制为任务分配任务栈;其中,所述任务的栈地址空间的首地址、大小为物理页尺寸的整数倍;将所述任务的栈地址空间按照页表映射的方式映射到物理页,并保存所述任务的栈地址空间到物理页的映射关系;或者
所述设置模块,具体用于:
根据分段机制为任务分配任务栈;将所述任务的栈地址空间按照段式映射的方式映射到物理地址段,并保存所述任务的栈地址空间到物理地址段的映射关系。
12.如权利要求7至11中任一项所述的装置,其特征在于,还包括:
检测模块,用于检测是否有任务对访问权限为只读的栈地址空间进行写操作;以及,用于在检测到有所述任务时,触发异常处理流程,以中止所述任务对所述访问权限为只读的栈地址空间的写操作,并对所述任务的信息进行记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610576230.1A CN107643943A (zh) | 2016-07-20 | 2016-07-20 | 一种任务栈的管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610576230.1A CN107643943A (zh) | 2016-07-20 | 2016-07-20 | 一种任务栈的管理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107643943A true CN107643943A (zh) | 2018-01-30 |
Family
ID=61108066
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610576230.1A Pending CN107643943A (zh) | 2016-07-20 | 2016-07-20 | 一种任务栈的管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107643943A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104062A (zh) * | 2019-11-22 | 2020-05-05 | 中科寒武纪科技股份有限公司 | 存储管理方法、装置和存储介质 |
CN113377466A (zh) * | 2021-06-29 | 2021-09-10 | 展讯通信(天津)有限公司 | 算法执行方法、装置和电子设备 |
CN116431315A (zh) * | 2023-06-07 | 2023-07-14 | 成都登临科技有限公司 | 批处理任务的处理方法、装置、电子设备及存储介质 |
CN117591333A (zh) * | 2024-01-17 | 2024-02-23 | 深圳市国电科技通信有限公司 | 线程栈溢出检测方法、装置、系统、芯片和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101174224A (zh) * | 2007-11-28 | 2008-05-07 | 中兴通讯股份有限公司 | 一种基于VxWorks操作系统的内存管理方法 |
CN101853209A (zh) * | 2010-04-29 | 2010-10-06 | 中国人民解放军国防科学技术大学 | 无线传感器网络节点内存管理方法 |
CN103440176A (zh) * | 2013-09-13 | 2013-12-11 | 北京经纬恒润科技有限公司 | 一种实时操作系统中内存的保护方法及装置 |
-
2016
- 2016-07-20 CN CN201610576230.1A patent/CN107643943A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101174224A (zh) * | 2007-11-28 | 2008-05-07 | 中兴通讯股份有限公司 | 一种基于VxWorks操作系统的内存管理方法 |
CN101853209A (zh) * | 2010-04-29 | 2010-10-06 | 中国人民解放军国防科学技术大学 | 无线传感器网络节点内存管理方法 |
CN103440176A (zh) * | 2013-09-13 | 2013-12-11 | 北京经纬恒润科技有限公司 | 一种实时操作系统中内存的保护方法及装置 |
Non-Patent Citations (2)
Title |
---|
胡杨: "Rtems嵌入式操作系统的移植", 《软件》 * |
郭玉东 等: "《Linux原理与结构》", 31 March 2012, 西安电子科技大学出版社 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104062A (zh) * | 2019-11-22 | 2020-05-05 | 中科寒武纪科技股份有限公司 | 存储管理方法、装置和存储介质 |
CN113377466A (zh) * | 2021-06-29 | 2021-09-10 | 展讯通信(天津)有限公司 | 算法执行方法、装置和电子设备 |
CN116431315A (zh) * | 2023-06-07 | 2023-07-14 | 成都登临科技有限公司 | 批处理任务的处理方法、装置、电子设备及存储介质 |
CN116431315B (zh) * | 2023-06-07 | 2023-08-29 | 成都登临科技有限公司 | 批处理任务的处理方法、装置、电子设备及存储介质 |
CN117591333A (zh) * | 2024-01-17 | 2024-02-23 | 深圳市国电科技通信有限公司 | 线程栈溢出检测方法、装置、系统、芯片和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11841939B2 (en) | Technologies for object-oriented memory management with extended segmentation | |
US9037873B2 (en) | Method and system for preventing tampering with software agent in a virtual machine | |
EP1966706B1 (en) | Identifier associated with memory locations for managing memory accesses | |
CN109558211A (zh) | 保护可信应用与普通应用的交互完整性和保密性的方法 | |
CN109858288B (zh) | 实现虚拟机安全隔离的方法与装置 | |
US20080244155A1 (en) | Methods and apparatus to protect dynamic memory regions allocated to programming agents | |
EP1939754A2 (en) | Providing protected access to critical memory regions | |
US20110202739A1 (en) | Restricting memory areas for an instruction read in dependence upon a hardware mode and a security flag | |
US7529916B2 (en) | Data processing apparatus and method for controlling access to registers | |
KR20170067740A (ko) | 운영 체제 공격으로부터 애플리케이션 기밀사항을 보호하는 기법 | |
CN109923546A (zh) | 虚拟机安全性应用程序的事件过滤 | |
US10102139B2 (en) | Memory management for address translation including detecting and handling a translation error condition | |
EP3365794B1 (en) | Techniques for protecting memory pages of a virtual computing instance | |
US10120738B2 (en) | Hypervisor techniques for performing non-faulting reads in virtual machines | |
US10061918B2 (en) | System, apparatus and method for filtering memory access logging in a processor | |
CN106970823A (zh) | 高效的基于嵌套虚拟化的虚拟机安全保护方法及系统 | |
CN107643943A (zh) | 一种任务栈的管理方法及装置 | |
EP3274896B1 (en) | Configuration of a memory controller for copy-on-write with a resource controller | |
CN104714834B (zh) | 一种空间确定的任务调度方法 | |
US10430223B2 (en) | Selective monitoring of writes to protected memory pages through page table switching | |
US10592267B2 (en) | Tree structure for storing monitored memory page data | |
WO2025066813A1 (zh) | 一种内存访问方法、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180130 |
|
RJ01 | Rejection of invention patent application after publication |