一种基于多进程的异常处理方法与流程

文档序号:32944834发布日期:2023-01-14 10:19阅读:42来源:国知局
一种基于多进程的异常处理方法与流程

1.本发明涉及计算机技术领域,特别是一种基于多进程的异常处理方法。


背景技术:

2.随着计算机技术的发展,芯片设计水平的提高以及应用需求的提升,多核系统越来越广泛的被应用到产品中。目前的多核异构系统一般包括大核和小核等多个处理器核心;而共享内存技术,是一种在多核处理器之间进行数据交互的通信方式之一,使多核处理器之间能够协同完成某一特定的功能而设计,存取数据快,实时性强。
3.中国发明专利cn103559079a公开的共享内存的数据存取方法没有与当前软件环境场景所使用的某一进程相适应,不适用于多个进程或多个处理器同时访问同一内存的软件环境,而且,各个数据缓冲区出现数据溢出后,对应的处理器无法有效处理这一异常,也可能所有相关进程所使用的内存块都被操作系统直接调用系统函数来清空,则导致多个处理器或多个进程之间不能进行稳定的数据交互。


技术实现要素:

4.本技术公开一种基于多进程的内存管理方法,具体的技术方案如下:一种基于多进程的异常处理方法,异常处理方法包括:目标存储器出现数据异常的情况下,若第二目标进程和第一目标进程没有全部退出,则当前退出的进程所在的处理器通过信息共享内存通知当前没有退出的进程所在的处理器,让当前没有退出的进程停止对目标存储器中对应分配的内存段访问,并保持当前没有退出的进程在目标存储器中分配到的内存段不变,直至已退出的进程重启,重启后的进程重新对退出之前分配的内存段进行访问,重启后的进程所在的处理器通过信息共享内存通知所述当前没有退出的进程所在的处理器,让所述当前没有退出的进程对所述目标存储器中对应分配的内存段访问;其中,信息共享内存是在目标存储器内,第一处理器与第二处理器之间进行参数交互的共享内存。
5.进一步地,若第一目标进程退出,则第一处理器通过信息共享内存通知第二处理器,让第二目标进程停止对第二访问内存段访问,并保持第二访问内存段内缓存的数据不变,并保持第二访问内存段内设置的占用标记不变,并保持第二访问内存段的首地址不变,直至第一目标进程重启,第一目标进程依据其标识信息重新对退出之前绑定的第一访问内存段进行访问,第一处理器通过信息共享内存通知第二处理器,让第二目标进程继续对所述第二访问内存段访问;其中,第一目标进程的标识信息是用于表示对应绑定的第一访问内存段的首地址,该对应绑定的第一访问内存段是该第一目标进程所需访问的第一访问内存段;第一目标进程的标识信息是在第一处理器的调度作用下从中间层封装的动态库的接口中获取,中间层是设置在第一处理器所运行的操作系统中。
6.进一步地,若第二目标进程退出,则第二处理器通过信息共享内存通知第一处理器,让第一目标进程停止对其绑定的第一访问内存段访问,并且保持第一目标进程对应绑
定的第一访问内存段缓存的数据不变,并保持第一目标进程对应绑定的第一访问内存段的首地址不变,并保持第一目标进程对应绑定的第一访问内存段的内存容量不变,直至第二目标进程重启,第二目标进程从所述第二访问内存段的首地址开始对所述第二访问内存段进行访问,第二处理通过信息共享内存通知第一处理器,让第一目标进程继续对其绑定的第一访问内存段访问;其中,第二访问内存段内存在地址位置被数据占用,则在该被数据占用的地址位置中设置占用标记。
7.进一步地,目标存储器出现数据异常的情况下,若第二目标进程和第一目标进程都退出,则第一处理器接收到第一内存释放请求或第一释放参数,则第一处理器执行内存释放操作,第一处理器通过信息共享内存通知第二处理器,让所述第二处理器停止对第二访问内存段进行读写操作;第二处理器接收到第二内存释放请求或第二释放参数,则第二处理器执行内存释放操作,第二处理器通过信息共享内存通知第一处理器,让所述第一处理器停止对第一访问内存段进行读写操作;在所述目标存储器中,第一访问内存段的首地址通过地址偏移得到第二访问内存段的首地址,以使得第二访问内存段与第一访问内存段之间存在地址映射关系。
8.进一步地,在第二目标进程和第一目标进程都退出的情况下,在所述第一处理器和所述第二处理器都完成内存释放操作后,第一目标进程和/或第二目标进程由退出变为重启时,存在以下情况:若退出的第一目标进程恢复为访问所述目标存储器,则控制第一目标进程执行内存申请操作,让第一处理器对恢复后的第一目标进程绑定的内存段进行操作;和/或,若退出的第二目标进程恢复为访问所述目标存储器,则控制第二目标进程执行内存申请操作,让第二处理器对恢复后的进程所需访问的内存段进行读写操作。
9.进一步地,第一处理器是大核结构的处理器,第二处理器是小核结构的处理器;或者,第一处理器被配置为运行多进程的操作系统,第二处理器被配置为运行单进程的操作系统或不运行操作系统;其中,第一处理器用于运行至少一个第一目标进程,第二处理器用于运行一个第二目标进程。
10.进一步地,目标存储器出现数据异常情况包括:第一处理器将第一目标进程所需写入的数据写入到对应绑定的第一访问内存段之外的内存空间、和/或第二处理器将第二目标进程所需写入的数据写入到访问限制内存段;或者,第一目标进程所申请的内存空间的容量大于目标存储器的实际存储容量,或第二目标进程所申请的内存空间的容量大于目标存储器的实际存储容量;其中,第一目标进程所申请的内存空间是满足第一内存申请请求的分配空间或满足第一访问参数的分配空间;第二目标进程所申请的内存空间是满足第二内存申请请求的分配空间或满足第二访问参数的分配空间;或者,基于内存申请请求在目标存储器分配到第一访问内存段或第二访问内存段后,目标存储器没有给出响应。
11.进一步地,所述异常处理方法还包括:步骤s1、若第一处理器接收到第一内存申请请求或信息共享内存的第一访问参数,以调度至少两个第一目标进程开始申请内存,则在目标存储器内,按照地址空间连续分配的原则为第一目标进程分配第一访问内存段,再将第一目标进程的标识信息与对应分配的第一访问内存段绑定在一起;然后确定第一目标进程完成内存申请操作,且确定第一处理器完成内存申请操作;并控制第一处理器至少将已绑定的第一访问内存段所存在的首地址和内存容量都通过信息共享内存传输给其余处理器;其中,步骤s1是表示第一目标进程执行内存申请操作;第一目标进程在目标存储器内绑
定到第一访问内存段后,第一目标进程对第一访问内存段访问时,所述第一处理器对第一目标进程所绑定到的第一访问内存段进行读写操作;步骤s2、在第二处理器确定第一目标进程完成内存申请操作的情况下,若接收到第二内存申请请求或信息共享内存的第二访问参数,则在目标存储器内,按照地址空间连续分配的原则为第二目标进程分配第二访问内存段,再为第二访问内存段中的被数据占用的内存段设置占用标记,并在目标存储器的未分配的内存空间中设置访问限制内存段,以将第二目标进程在目标存储器中的有效访问范围限制在第二访问内存段内;然后确定第二目标进程完成内存申请操作,且确定第二处理器完成内存申请操作;其中,步骤s2是表示第二目标进程执行内存申请操作;第二目标进程在目标存储器内分配到第二访问内存段后,第二目标进程对第二访问内存段访问时,所述第二处理器对第二目标进程所分配到的第二访问内存段进行读写操作。
12.进一步地,所述异常处理方法还包括:步骤s3、在所述第一处理器接收到第一内存释放请求或所述信息共享内存的第一释放参数时,通过所述信息共享内存通知所述第二处理器;步骤s4、在所述第一处理器接收到第一内存释放请求或所述信息共享内存的第一释放参数时,通过第一目标进程的标识信息来在所述目标存储器中搜索对应绑定的第一访问内存段,再解除第一目标进程的标识信息与对应绑定的第一访问内存段的绑定关系,然后确定第一目标进程完成内存释放操作,且确定第一处理器完成内存释放操作,并通过所述信息共享内存将第一目标进程完成内存释放操作的信息传输给第二处理器;其中,该第一访问内存段没有被解除与对应绑定的第一目标进程的标识信息的绑定关系时,不被除了已绑定的第一目标进程之外的其它第一目标进程访问;第二访问内存段的地址值与第一访问内存段的地址值不同;步骤s4是表示第一处理器执行内存释放操作;其中,执行步骤s1后,最新获得的第一访问内存段的首地址以及该第一访问内存段的内存容量都被转换到第一内存释放请求或所述信息共享内存的第一释放参数当中。
13.进一步地,所述异常处理方法还包括:步骤s5、在所述第二处理器接收到第二内存释放请求或所述信息共享内存的第二释放参数时,从所述第二访问内存段的首地址开始,依次搜索被数据占用的内存段,并将每个搜索到的被数据占用的内存段的占用标记清除,以恢复为允许所述第二处理器调度的其它进程访问;同时将访问限制内存段恢复为允许第二目标进程访问;然后确定第二目标进程完成内存释放操作,且确定第二处理器完成内存释放操作,再通过所述信息共享内存将第二目标进程完成内存释放操作的信息传输给第一处理器;其中,所述第二访问内存段没有被清除相关地址区间中的占用标记时,只允许分配到所述第二访问内存段的第二目标进程访问;步骤s5是表示第二处理器执行内存释放操作;其中,执行步骤s2后,最新获得的第二访问内存段的首地址、被数据占用的内存段的内存容量以及访问限制内存段的内存容量都被转换到第二内存释放请求或所述信息共享内存的第二释放参数当中。
14.进一步地,在步骤s1中,所述将第一目标进程的标识信息与对应分配的第一访问内存段绑定在一起的方法包括:在第一内存申请请求或第一访问参数的控制下,将第一处理器所调度的第一目标进程的标识信息设置为该第一目标进程当前访问的第一访问内存段的索引值以通过第一目标进程的标识信息定位到所需访问的第一访问内存段,并配置其中一个标识信息对应分配的第一访问内存段不允许其它标识信息的第一目标进程访问,形成该第一目标进程的标识信息与当前访问的第一访问内存段的首地址之间的映射关系,则
确定将第一目标进程的标识信息与对应分配的第一访问内存段绑定在一起,并将第一目标进程的标识信息对应绑定的第一访问内存段的首地址反馈给中间层,为应用软件程序提供第一目标进程的操作地址信息;其中,第一目标进程的标识信息是在第一处理器的调度作用下从中间层封装的动态库的接口中获取,中间层是设置在第一处理器所运行的操作系统中。
15.进一步地,所述地址空间连续分配的原则包括:从目标存储器的首地址开始,搜索位于一块连续空闲内存空间的开始位置的地址,再将第一次搜索到的位于一块连续空闲内存空间的开始位置的地址设置为入口地址;检测入口地址所在的连续空闲内存空间是否存在满足内存申请请求的分配空间或满足访问参数需求的分配空间;其中,内存申请请求或访问参数包括预先设置的入口地址、以及该预先设置的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量;当检测到入口地址所在的连续空闲内存空间中存在满足内存申请请求的分配空间时,将该分配空间设置为供一个进程访问的空闲内存段,确定当前检测到的入口地址是满足内存申请请求的分配空间的入口地址,并修改下一连续空闲内存空间的开始位置的地址以便于在下一连续空闲内存空间中分配出供另一个进程访问的空闲内存段;当检测到入口地址所在的连续空闲内存空间中存在满足访问参数需求的分配空间时,将该分配空间设置为供一个进程访问的空闲内存段,确定当前检测到的入口地址是满足访问参数需求的分配空间的入口地址,并修改下一连续空闲内存空间的开始位置的地址以便于在下一连续空闲内存空间中分配出供另一个进程访问的空闲内存段;当入口地址所在的连续空闲内存空间中不存在满足内存申请请求的分配空间和满足访问参数需求的分配空间时,将所述入口地址调整到下一连续空闲内存空间中的开始位置的地址,再判断调整后的入口地址所在的连续空闲内存空间是否存在满足内存申请请求的分配空间或满足访问参数需求的分配空间,直至搜索到满足内存申请请求的分配空间或满足访问参数需求的分配空间;其中,下一连续空闲内存空间中的开始位置是预先记录在调整前的入口地址所在的连续空闲内存空间中;其中,供一个进程访问的空闲内存段的首地址、以及供该进程访问的空闲内存段的内存容量都被缓存在所述信息共享内存中。
16.进一步地,每当按照所述地址空间连续分配的原则分配第一访问内存段时,确定该第一访问内存段是满足第一内存申请请求的分配空间或满足第一访问参数的分配空间,第一访问内存段的首地址是当前调整出来的入口地址,其中,第一访问内存段在分配出来时是属于连续空闲内存空间;每当按照所述地址空间连续分配的原则为第二目标进程分配第二访问内存段时,确定该第二访问内存段是满足该第二内存申请请求的分配空间或满足第二访问参数的分配空间,第二访问内存段的首地址是当前调整出来的所述入口地址,其中,第二访问内存段在分配出来时是属于连续空闲内存空间。
17.进一步地,在按照地址空间连续分配的原则分配第一访问内存段之前,当满足第一内存申请请求的入口地址或满足第一访问参数需求的入口地址处于第一预设首地址范围内,且该处于第一预设首地址范围内的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第一预设目标容量范围内时,确定第一目标进程访问目标存储器所需的参数合法;在按照地址空间连续分配的原则为第二目标进程分配第二访问内存段之前,当满足第二内存申请请求的入口地址或满足第二访问参数需求的入口地址处于第二预设首地址范围内,且该处于第二预设首地址范围内的入口地址所在的连续空闲内存空间中
所需的分配空间的内存容量是处于第二预设目标容量范围内时,确定第二目标进程访问目标存储器所需的参数合法。
18.进一步地,在步骤s4中,在通过第一目标进程的标识信息来在所述目标存储器中搜索对应绑定的第一访问内存段之前,当第一内存释放请求或第一释放参数当中包括的入口地址处于第一预设首地址范围内,且该处于第一预设首地址范围内的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第一预设目标容量范围内时,确定第一目标进程在目标存储器中释放内存所需的参数合法;在步骤s5中,在从第二访问内存段的首地址开始依次搜索被数据占用的内存段之前,当第二内存释放请求或第二释放参数当中包括的入口地址处于第二预设首地址范围内,且该处于第二预设首地址范围内的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量处于第二预设目标容量范围内时,确定第二目标进程在目标存储器中释放内存所需的参数合法。
19.进一步地,在步骤s2中,分配好第二访问内存段后,在第二目标进程所需访问的第二访问内存段内,从第二访问内存段的首地址开始,每当检测到一个内存段被数据填充,则将当前检测的内存段设置为被数据占用的内存段以使得第二访问内存段不是连续空闲内存空间,并为当前检测的内存段设置占用标记,直至遍历完第二访问内存段内所有地址位置,所有设置出的占用标记用于表示第二访问内存段中的空闲指示信息,以指示第二访问内存段是否存在空闲的内存空间;其中,每个被数据占用的内存段允许同一第二目标进程重复访问,但不允许除了该第二目标进程之外的进程访问;并将目标存储器中除了第二访问内存段之外的内存段都设置为不允许第二目标进程访问,以防止在第二目标进程访问的过程中出现地址越界。
20.本技术的技术效果在于:目标存储器出现数据异常的情况下,若多个进程没有全部退出,则当前退出的进程所在的处理器通过信息共享内存通知当前没有退出的进程所在的处理器,让当前没有退出的进程停止对目标存储器中对应分配的内存段访问,并保持当前没有退出的进程在目标存储器中分配到的内存段不变,直至已退出的进程重启,重启后的进程重新对退出之前分配的内存段进行访问,重启后的进程所在的处理器通过信息共享内存通知所述当前没有退出的进程所在的处理器,让所述当前没有退出的进程对所述目标存储器中对应分配的内存段访问,从而既能保留当前没有退出的进程所分配的内存不变,又能利用当前退出的进程在退出之前申请的内存块所依据的地址空间连续分配原则或标识信息索引效果来恢复恢复当前退出的进程在退出之前所分配到的内存,而且是建立在信息共享内存对两种进程所在的处理器交互信息的基础上进行,提升第二处理器和第一处理器通在进程退出和重启阶段的数据交互的稳定性。因此,引入异常恢复机制来提升稳定性,即进程重启后,仍然可以恢复出原来访问过的内存,减少第一处理器与第二处理器之间的数据交互的影响。
21.在此基础上,本技术控制两种不同类型处理器共享一个目标存储器,既支持多进程访问,也支持单进程访问;并在访问过程中,在对应类型的处理器中使用封装接口申请对应进程所需的空闲内存段和作出地址映射以便于读写操作对应的内存段、或在对应类型的处理器中直接申请对应进程所需的空闲内存段和作出数据占用标记和访问限制;本技术通过基于多进程的内存管理方法,使各个第一目标进程访问到对应绑定的第一访问内存段,第二目标进程访问到对应标记出的第二访问内存段,而且可以通过中间层封装的接口调度
多个第一目标进程绑定到对应分配到的第一访问内存段,提高系统的兼容性和使用场景的适应性;第一处理器和第二处理器会通过目标存储器中的同一段共享内存对内存申请、内存释放、读写操作的地址信息、异常处理、重启恢复进行交互;能够在处理器间的交互、以及目标进程所绑定或标记的内存段中,避开两个处理器在同一内存段内同时读写数据,解决了不同类型处理器之间的冲突问题,解决在多个进程无法同时使用共享内存的问题,适配裸机与不同嵌入式操作系统等软件环境,兼容到各种嵌入式操作系统、非嵌入式操作系统、以及无操作系统的软件环境,也兼容到单核处理器与多核处理器的应用场景。
附图说明
22.图1是本发明的一种实施例公开内存申请操作的流程示意图。
23.图2是本发明的一种实施例公开内存释放操作的流程示意图。
24.图3是本发明的一种实施例公开基于多进程的异常处理方法的流程示意图。
具体实施方式
25.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
26.另外,本技术中“第一目标进程访问第一访问内存段”、“第一目标进程读写第一访问内存段”、“第一处理器操作第一访问内存段”、“第一处理器访问第一访问内存段”等读写访问内存的术语描述在本文中常被可互换使用。同理地,“第二目标进程访问第二访问内存段”、“第二目标进程读写第二访问内存段”、“第二处理器操作第二访问内存段”、“第二处理器访问第二访问内存段”等读写访问内存的术语描述在本文中常被可互换使用。本技术中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
27.作为一种实施例,在第一目标进程访问第一访问内存段的过程中,或在第二目标进程访问第二访问内存段的过程中,或第一目标进程申请内存后,或第二目标进程申请内存后,目标存储器会出现数据异常情况,可能导致第一目标进程和/或第二目标进程异常退出,此时本技术需要保留下当前没退出的进程所使用的内存块不变,也利用当前退出的进程在退出之前申请的内存块所依据的地址空间连续分配原则恢复出原来申请/分配出的内存块,便于当前退出的进程在恢复重启后可以继续访问该内存块,尤其是在两个处理器或两种操作系统交互的场景中,可以保证同一目标存储器对多个进程或两个处理器进行数据交互的稳定性,其中,无论是进程退出还是进程重启,都会使用到系统调用函数。因此,在本实施例中,目标存储器出现数据异常情况以终止相应进程去访问目标存储器时,先判断第二目标进程和第一目标进程是否都退出,以确定各个进程的运行状态,其中,第一处理器用于运行至少一个第一目标进程,第二处理器用于运行一个第二目标进程;第一处理器和第二处理器都配置为支持对所述目标存储器进行读写操作。在本实施例中,第一处理器是大核结构的处理器,第二处理器是小核结构的处理器,其中,大核结构的处理器拥有自己独立
的资源,包括外挂的ddr内存、sram存储器等,大核结构可以是单核或者多核结构;小核结构的处理器也有自己的独立资源,包含ram存储器等,一般为单核结构;小核一般是通用mcu级别的处理核心,内存资源一般是有限的。或者,第一处理器被配置为运行多进程的操作系统,第二处理器被配置为运行单进程的操作系统或不运行操作系统,比如,第一处理器所执行的内存申请操作就是在linux系统下进行,第二处理器执行的内存申请操作适用于非linux系统或者无操作系统的软件环境中。
28.在本实施例中,目标存储器出现数据异常的情况下,若第二目标进程和第一目标进程没有全部退出,则当前退出的进程所在的处理器将进程退出的消息通过信息共享内存通知当前没有退出的进程所在的处理器,让当前没有退出的进程停止对目标存储器中对应分配的内存段访问,以使得用于调度当前没有退出的进程的处理器停止操作所述目标存储器中对应分配到的内存段,避免当前没退出的进程的访问操作会对已退出的进程所需访问的内存段(来源于所分配的内存段)缓存的数据造成破坏;并保持当前没退出的进程在目标存储器中分配到的内存段不变,便于暂停操作的进程在已退出的进程重启后快速定位到在先分配到的内存段;直至已退出的进程重启,重启后的进程重新对退出之前分配的内存段进行访问,重启后的进程恢复为访问在目标存储器中原先分配到的内存段,可以是继续对原先所需访问的内存段进行读写操作,也可以是重新执行内存申请操作分配到相同的内存段后再进行访问;重启后的进程所在的处理器将进程重启的消息通过信息共享内存通知所述当前没有退出的进程所在的处理器,让当前没有退出的进程继续对所述目标存储器中对应分配的内存段访问,同时,从而引入异常恢复机制来提升稳定性,即进程重启后,仍然可以恢复访问原来的内存,这样就提升目标存储器在多进程的软件环境下进行数据交互的稳定性。
29.作为一种实施例,若第一目标进程退出,具体可以是多个第一目标进程退出且只剩下第二目标进程在执行,则第一处理器可以将第一目标进程退出的消息通过信息共享内存通知第二处理器,其中,当前退出的进程所在的处理器是第一处理器,当前没有退出的进程所在的处理器是第二处理器;让第二目标进程停止对第二访问内存段访问,并保持第二访问内存段内缓存的数据不变,并保持第二访问内存段内设置的占用标记不变,并保持第二访问内存段的首地址不变;直至第一目标进程重启,恢复重启后的第一目标进程依据其标识信息重新对退出之前绑定的第一访问内存段进行访问以实现第一处理器对第一目标进程所需访问的内存段进行读写操作,其中,第一目标进程重启后,会重新执行内存申请操作,则当前重新分配并绑定到标识信息中的第一访问内存段等效于退出之前绑定的第一访问内存段;第一目标进程所需访问的内存段是依据其标识信息索引定位到的,由于其标识信息不变,所以索引定位到的内存段仍然是退出之前分配到第一访问内存段;第一目标进程重启的同时,第一处理器通过信息共享内存通知第二处理器,让第二目标进程继续对所述第二访问内存段访问以实现第二处理器对第二目标进程所需访问的内存段进行读写操作,可以从原来停止操作的地址开始继续进行读写操作。
30.需要说明的是,第一目标进程的标识信息是用于表示对应绑定的第一访问内存段的首地址,该对应绑定的第一访问内存段是该第一目标进程所需访问的第一访问内存段;第一目标进程的标识信息是在第一处理器的调度作用下从中间层封装的动态库的接口中获取,中间层是设置在第一处理器所运行的操作系统中。优选地,第一目标进程的标识信息
与所需绑定的第一访问内存段的首地址存在固定的数值转换关系,当一个标识信息表示一个第一目标进程的身份标识符时,该第一目标进程所需绑定的第一访问内存段的首地址是唯一的,则该第一目标进程所需访问的第一访问内存段是唯一的,避免不同的第一目标进程访问同一第一访问内存段,导致重复读写同一第一访问内存段的数据。
31.作为另一种实施例,若第二目标进程退出,则第二处理器可以将第二目标进程退出的消息通过信息共享内存通知给第一处理器,让第一目标进程停止对其绑定的第一访问内存段访问,其中,当前退出的进程所在的处理器是第二处理器,当前没有退出的进程所在的处理器是第一处理器,第二目标进程退出后一般对其所分配的第二访问内存段进行内存释放操作,以释放其占用的内存空间,其中,第二访问内存段内存在地址位置被数据占用,则在该被数据占用的地址位置中设置占用标记,则释放第二访问内存段就是清除所有的占用标记;并且保持第一目标进程对应绑定的第一访问内存段缓存的数据不变,并保持第一目标进程对应绑定的第一访问内存段的首地址不变,并保持第一目标进程对应绑定的第一访问内存段的内存容量不变。在第二目标进程退出后到重启前的期间,第二访问内存段内的占用标记会被清除。直至第二目标进程重启,第二目标进程从所述第二访问内存段的首地址开始对所述第二访问内存段进行访问,并允许从所述目标存储器的首地址开始重新搜索第二访问内存段的起始地址(等效于可以重新执行内存申请操作),其中,当前从所述目标存储器的首地址开始重新搜索第二访问内存段的起始地址等于退出之前搜索到的第二访问内存段的起始地址,而且所需分配的第二访问内存段的内存容量是相同,所以,即使重新执行一次内存申请操作,第二处理器也能够获得退出之前所分配到的第二访问内存段。此时,第二处理器将第二目标进程重启的消息通过信息共享内存通知给第一处理器,让第一目标进程继续对其绑定的第一访问内存段访问,以实现第一处理器对第一目标进程中止访问的内存段进行读写操作,可以从标识信息原来索引到的首地址(也可以是停止操作的地址)开始继续进行读写操作。
32.作为一种实施例,所述目标存储器出现数据异常的情况下,若第二目标进程和第一目标进程都退出,则操作系统向第一处理器发出第一内存释放请求或向第一处理器传输第一释放参数,第一处理器在接收到第一内存释放请求或第一释放参数之后,则第一处理器执行内存释放操作,并将第一目标进程退出的消息通过信息共享内存通知给第二处理器,让所述第二处理器停止对第二访问内存段进行读写操作。操作系统向第二处理器发出第二内存释放请求或向第二处理器传输第二释放参数,第二处理器在接收到第二内存释放请求或第二释放参数之后,则第二处理器执行内存释放操作,并将第二目标进程退出的消息通过信息共享内存通知给第一处理器,让所述第一处理器停止对第一访问内存段进行读写操作。其中,先执行内存释放操作的处理器可以通过信息共享内存通知后执行内存释放操作的处理器,以达到多处理器之间信息交互的目的。在所述目标存储器中,第一访问内存段的首地址通过地址偏移得到第二访问内存段的首地址,以使得第二访问内存段与第一访问内存段之间存在地址映射关系,则第一访问内存段的地址与第二访问内存段的地址不完全相同。
33.优选地,控制第一处理器执行内存释放操作,但可以不交由第一处理器内设的系统函数清空第一访问内存段缓存的数据,即第一目标进程释放第一访问内存段后没有完全将控制器转交给第一处理器当中的操作系统;并控制第二处理器执行内存释放操作,但可
以不交由第二处理器内设的系统函数清空第二访问内存段缓存的数据,即第二目标进程释放第二访问内存段后没有完全将控制器转交给第二处理器当中的系统调用函数。此时,第一处理器和第二处理器都停止读写操作。本实施例选择在第一处理器和第二处理器都执行内存释放操作的同时,仍能保持原来分配的第二访问内存段中缓存的数据和原来分配的的第一访问内存段中缓存的数据,直至已退出的进程恢复为访问目标存储器。
34.在上述实施例的基础上,所述异常处理方法还包括:在第二目标进程和第一目标进程都退出的情况下,在所述第一处理器和所述第二处理器都完成内存释放操作后,第一目标进程和/或第二目标进程由退出变为重启时,存在以下情况:若退出的第一目标进程恢复为访问所述目标存储器,则控制第一目标进程执行内存申请操作,让第一处理器对恢复后的第一目标进程绑定的内存段进行操作;和/或,若退出的第二目标进程恢复为访问所述目标存储器,则控制第二目标进程执行内存申请操作,让第二处理器对恢复后的进程所需访问的内存段进行读写操作。因而,恢复后的第一目标进程可以在重新分配并绑定到的第一访问内存段中获取到退出之前缓存的数据,可以是同一地址位置处被占用的相同数据或同一进程占用同一内存段;而且恢复后的第二目标进程可以在重新申请并分配到的第二访问内存段中获取到退出之前缓存的数据,可以是同一地址位置处被占用的相同数据。
35.需要说明的是,所述信息共享内存是在目标存储器内,第一处理器与第二处理器之间进行参数交互的共享内存,可以是一段固定的地址和固定的大小的内存块。当一个处理器将指令参数写入信息共享内存当中时,另一个处理器从该信息共享内存中读取出写入的指令参数,则确定一个处理器通过所述信息共享内存将进程对内存操作的指令信息传输给另一个处理器,其中,指令参数包括处理器的进程对信息共享内存所处的存储器的操作信息,具体包括读写的首地址(起始地址)、申请的内存段的容量大小、申请或划分出的内存段的索引(通过引导地址指针来指定到对应的内存段以访问其中的数据)、内存段的索引与内存段的首地址之间的映射关系、各个地址位置的空闲指示信息。
36.在一些实施例中,所述目标存储器出现数据异常情况可以发生在申请内存操作的过程中或读写操作的过程中,具体包括:第一处理器将第一目标进程所需写入的数据写入到对应绑定的第一访问内存段之外的内存空间,以导致第一目标进程异常退出;和/或第二处理器将第二目标进程所需写入的数据写入到所述访问限制内存段,以导致第二目标进程异常退出;此时,可能出现数据溢出的现象或产生地址越界情况。当目标存储器内所分配的内存段出现数据溢出时,向上层应用软件反馈数据异常情况,由上层应用软件程序进行相应处理。
37.或者,第一目标进程所申请的内存空间(对应分配或绑定到的第一访问内存段)的容量大于目标存储器的实际存储容量,以导致第一目标进程异常退出;或第二目标进程所申请的内存空间(对应分配或绑定到的第二访问内存段)的容量大于目标存储器的实际存储容量,以导致第二目标进程异常退出;其中,第一目标进程所申请的内存空间是满足第一内存申请请求的分配空间或满足第一访问参数的分配空间;第二目标进程所申请的内存空间是满足第二内存申请请求的分配空间或满足第二访问参数的分配空间;基于内存申请请求在目标存储器分配到对应的第一访问内存段或第二访问内存段后,目标存储器没有给出响应,具体是没有响应给第一目标进程以导致第一目标进程异常退出,或没有响应给第二目标进程以导致第二目标进程异常退出,使得第一处理器和第
二处理器之间也没有及时进行信息交互。
38.比如,第一处理器接收到第一内存申请请求后,在目标存储器中分配到第一访问内存段,但目标存储器没有响应给第一处理器或第一目标进程,则第一目标进程的标识信息无法索引到对应分配到的第一访问内存段,第一目标进程的标识信息和对应分配到的第一访问内存段的首地址无法绑定在一起,则导致第一目标进程异常退出。
39.作为异常处理的一种实施例,参阅图3可知,所述异常处理方法具体包括如下:步骤s61、所述目标存储器出现数据异常情况以终止相应进程去访问目标存储器;然后执行步骤s62;步骤s62、判断第二目标进程和所有第一目标进程是否都退出,是则执行步骤s63,否则执行步骤s66;步骤s63、第一处理器可以在接收第一内存释放请求后,通过所述信息共享内存通知所述第二处理器停止操作第二访问内存段;同理地,第二处理器可以在接收第二内存释放请求后,并通过所述信息共享内存通知所述第一处理器停止操作第一访问内存段;然后执行步骤s64;这里的操作是对内存段的读写操作。
40.步骤s64、控制第一目标进程进行内存释放操作;并控制第二目标进程进行内存释放操作;然后执行步骤s65;步骤s65、在所述第一处理器和所述第二处理器都完成内存释放操作后,若退出的第一目标进程恢复为访问所述目标存储器,则第一目标进程执行内存申请操作,让第一处理器对恢复后的进程所访问的内存段进行操作;和/或,若退出的第二目标进程恢复为访问所述目标存储器,则第二目标进程执行内存申请操作,让第二处理器对恢复后的进程所访问的内存段进行读写操作。
41.步骤s66、当前退出的进程所在的处理器通过信息共享内存通知当前没有退出的进程所在的处理器,让当前没有退出的进程停止对所述目标存储器中对应分配到的内存段访问,以使得用于调度当前没有退出的进程的处理器停止操作所述目标存储器中对应分配到的内存段,避免当前没退出的进程的访问操作会对已退出的进程所需访问的内存段(来源于所分配的内存段)缓存的数据造成破坏;然后执行步骤s67;步骤s67、保持当前没退出的进程在所述目标存储器中分配到的内存段不变,至少包括已分配到的第一访问内存段及其与第一目标进程的标识信息的绑定关系(地址映射关系)、已分配到的第二访问内存段及其设置的占用标记、具体的地址区间范围、缓存的数据、每个内存段的首地址以及分配到的内存容量;直至已退出的进程恢复为访问目标存储器;然后执行步骤s68;步骤s68、当存在第一目标进程和/或第二目标进程由退出恢复为重新启动(系统的重启,即进程重启)时,重启后的进程重新开始对退出之前分配的内存段进行访问,具体是重新执行内存申请操作并分配到所述退出之前分配的内存段,再开始访问;重启后的进程是第一目标进程时可以依据其标识信息对重新分配出的退出之前绑定的第一访问内存段进行访问,或者重启后的进程是第二目标进程时可以从所述第二访问内存段的首地址开始对重新分配到的所述第二访问内存段进行访问;重启后的进程所在的处理器通过信息共享内存通知当前没有退出的进程所在的处理器,让当前没有退出的进程继续对所述目标存储器中对应分配到的内存段进行访问,以使第一处理器和/或第二处理器对恢复后的进程
所访问的内存段进行读写操作。
42.综上,目标存储器出现数据异常的情况下,若多个进程没有全部退出,则当前退出的进程所在的处理器通过信息共享内存通知当前没有退出的进程所在的处理器,让当前没有退出的进程停止对目标存储器中对应分配的内存段访问,并保持当前没有退出的进程在目标存储器中分配到的内存段不变,直至已退出的进程重启,重启后的进程重新对退出之前分配的内存段进行访问,重启后的进程所在的处理器通过信息共享内存通知所述当前没有退出的进程所在的处理器,让所述当前没有退出的进程对所述目标存储器中对应分配的内存段访问,从而既能保留当前没有退出的进程所分配的内存不变,又能恢复当前退出的进程在退出之前所分配到的内存,而且是建立在信息共享内存对两种进程所在的处理器交互信息的基础上进行,提升第二处理器和第一处理器通在进程退出和重启阶段的数据交互的稳定性。
43.需要说明的是,针对同一存储器在多进程任务和单进程任务的软件运行环境中异常处理的兼容性,本实施例公开的异常处理方法的执行主体是属于内存管理装置,包括共享内存的访问主体或共享内存的控制电路装置;或者,该内存管理方法可以是第一处理器和第二处理器协同执行并能够通过相关指令通知对方,即第一处理器和第二处理器构成的多核处理器系统作为执行主体。优选地,该内存管理方法可以是由支持多进程的第一处理器发起(可以是由所运行加载的操作系统中的应用软件程序或中间层控制),再通过本技术公开的目标存储器通知支持单进程的第二处理器;或者,由第二处理器发起(可以直接由应用软件程序控制),再通过本技术公开的目标存储器通知第一处理器;或者由目标存储器对应的存储控制装置发起,然后由第一处理器和第二处理器先后执行对应的步骤;以使得第一处理器和第二处理器在访问目标存储器的过程中,先后进行申请内存和/或释放内存。
44.作为一种实施例,所述异常处理方法还包括:步骤s1、若第一处理器接收到第一内存申请请求或信息共享内存的第一访问参数,以调度至少两个第一目标进程开始申请内存,则在目标存储器内,按照地址空间连续分配的原则分配第一访问内存段,能够为第一目标进程分配至少一个第一访问内存段,再将第一目标进程的标识信息与对应分配的第一访问内存段绑定在一起;优选地,每个第一目标进程对应一个第一内存申请请求或一个第一访问参数,即一个第一目标进程需要一条指令才能进行一次内存申请,通过这一形式的申请来分配到一个相对应的第一访问内存段,则可以将每个第一目标进程的标识信息配置为该第一目标进程的身份标识符,以区别开其它的第一目标进程;需要说明的是步骤s1是表示第一目标进程执行内存申请操作。因此,在同一操作系统当中,需要数据交互的应用软件运行环境对应的进程和底层驱动算法对应的进程同时读写同一内存时互不干扰。因此,步骤s1能够支持多进程操作目标存储器,提高存储器的利用率。
45.在目标存储器内申请满足第一内存申请请求或第一访问参数需求的内存空间后,才能够在目标存储器内分配到对应的第一访问内存段;虽然第一目标进程所需的内存申请请求或访问参数包括所需申请的第一访问内存段的首地址、以及所需申请的第一访问内存段的内存容量,但不一定与目标存储器中的实际存储空间大小或数据存储状态相符合,所以需要进一步通过按照地址空间连续分配的原则去分配第一访问内存段,才能获得进行实际读写操作的第一访问内存段;其中,第一处理器在访问第一访问内存段之前先在目标存储器中申请内存,具体会根据第一内存申请请求或信息共享内存预先存储的第一访问参数
当中符合应用软件程序要求的指示信息(包括地址信息和申请的内存容量信息),在目标存储器中按照地址空间连续分配的原则分配第一访问内存段,既可以适应操作系统中加载的各个应用软件程序的需求,也适应目标存储器中的硬件存储空间的实际大小。
46.在第一处理器的控制下,在目标存储器内分配到对应的第一访问内存段后,将第一目标进程的标识信息与对应分配的第一访问内存段绑定在一起,形成每个第一目标进程在目标存储器中的地址映射关系,记录为一个标识信息对应一个第一目标进程,且一个标识信息映射到唯一一段内存段,以使每个第一目标进程在第一处理器的调度下,依据标识信息完成对应绑定的第一访问内存段的访问;此时通过内存映射的方式从所有分配出的第一访问内存段当中筛选出满足第一目标进程的第一访问内存段,为每个第一目标进程各分配唯一一个第一访问内存段,也确定第一目标进程完成内存申请操作。然后,优选地,本实施例控制第一处理器将已绑定的第一访问内存段所存在的首地址和内存容量都更新掉第一访问参数当中同类型的参数和第一内存申请请求当中同类型的参数,再通过所述信息共享内存将更新后的第一访问参数和更新后的第一内存申请请求传输给其余处理器,其余处理器包括同一类型的第一处理器或不同类型的处理器;为了第一处理器和第二处理器之间的内存分配信息的正常交互,还将第一目标进程完成内存申请操作的信息转换为指令参数,刷新到信息共享内存,再由信息共享内存传输给第二处理器,以便于执行步骤s2。
47.步骤s2、在第二处理器确定第一目标进程完成内存申请操作的情况下,若接收到第二内存申请请求或信息共享内存的第二访问参数,则在目标存储器内,按照地址空间连续分配的原则为第二目标进程分配第二访问内存段,再为第二访问内存段中的被数据占用的内存段设置占用标记,对分配出的第二访问内存段进行数据读写状态的标记,以表示第二访问内存段中的被数据占用的内存段只允许第二目标进程访问,第二处理器获得单个第二目标进程下访问的内存空间的数据占用状态,并在目标存储器的未分配的内存空间中设置访问限制内存段,以将第二目标进程在目标存储器中的有效访问范围限制在第二访问内存段内,避免第二目标进程读写数据的过程中访问的地址出现越界,保证单进程任务条件的第二处理器读写数据的准确性。需要说明的是,步骤s2是表示第二目标进程执行内存申请操作。
48.在本实施例中,步骤s2是在步骤s1将第一处理器完成内存申请操作的信息通知给第二处理器后才开始执行的,则第二处理器在执行步骤s2时,能够获得每个第一目标进程所分配的第一访问内存段的首地址和每个第一目标进程所需的分配空间的内存容量,会被用于接收合适的第二内存申请请求或信息共享内存的第二访问参数;需要说明的是,第二访问内存段与第一访问内存段之间存在地址映射关系,包括地址偏移关系,即第二访问内存段的地址与第一访问内存段的地址存在一一对应的映射关系,在所述目标存储器中,第一访问内存段的地址通过地址偏移得到第二访问内存段中对应的地址,则第二处理器所接收到的第一目标进程所分配的第一访问内存段的首地址具有参考意义,使第二访问内存段的首地址会根据第一访问内存段的首地址作出适应性的调整,便于多个第一目标进程和第二目标进程对所述目标存储器进行数据互不干扰的访问,提高同一目标存储器对第一处理器所运行的操作系统和第二处理器所运行的操作系统的兼容性。
49.虽然第二目标进程所需的内存申请请求或访问参数包括所需申请的第二访问内存段的首地址、以及所需申请的第二访问内存段的内存容量,但不一定与目标存储器中的
实际存储空间大小或数据存储状态相符合,所以在第二处理器在访问第二访问内存段之前,需要进一步通过按照地址空间连续分配的原则,才能够在目标存储器内分配到实际用于读写操作的第二访问内存段;具体会根据第一内存申请请求或信息共享内存预先存储的第一访问参数当中符合应用软件程序要求的指示信息(包括地址信息和申请的内存容量信息),在目标存储器中按照地址空间连续分配的原则分配到第二访问内存段,从而既可以适应操作系统中加载的单个应用软件程序的需求,也适应目标存储器中的硬件存储空间的实际大小。
50.需要说明的是,进程是在计算机中运行的应用程序实体,其被分配给计算机设备的处理器,并由处理器执行,并使用标识信息来进行身份识别,比如通过应用软件程序给一个进程配置唯一一个标识符id。
51.在本实施例中,目标存储器优选为静态随机存取存储器(static random-access memory,sram),所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持;当存储器的控制系统断电或重启时,保存在sram中的数据将丢失。sram可以配置为共享内存,供第一处理器和第二处理器使用;在第一处理器和第二处理器之间,目标存储器是各个处理器调度的进程间的通信媒介;比如,在本技术中,两个不同进程a1、a2通过共享内存进行通信的意思是同一块物理内存中缓存的指令参数分别被映射到进程a1、a2各自的进程虚拟地址空间,则进程a1可以即时看到进程a2对其占用的内存中数据的更新,反之亦然;其中,进程a1、a2可以分别来源于不同的处理器,也可以是来源于同一处理器;分别向进程a1和a2映射的同一块物理内存是所述目标存储器的信息共享内存。
52.在一些实施例中,第一目标进程在目标存储器内分配到第一访问内存段后(可以理解为在第一处理器接收到第一内存申请请求或所述第一访问参数后),第一目标进程对第一访问内存段访问的过程中,所述第一处理器对第一目标进程所申请到的第一访问内存段进行读写操作。第一内存申请请求可以包括第一目标进程的调度请求信息、第一访问内存段的首地址以及第一访问内存段的内存容量,第一访问内存段是第一目标进程需要访问的进程。第二目标进程在目标存储器内分配到第二访问内存段后(可以理解为在第二处理器接收到第二内存申请请求或所述第二访问参数后),第二目标进程对第二访问内存段访问时,所述第二处理器对第二目标进程所分配到的第二访问内存段进行读写操作;第二内存申请请求可以包括第二目标进程的调度请求信息、第二访问内存段的首地址以及第二访问内存段的内存容量,第二访问内存段是第二目标进程需要访问的进程。
53.本实施例对内存申请请求和访问参数包括的具体内容不做限定,可选的,内存申请请求和访问参数可以包括申请的内存的大小和所申请的内存的首地址。申请的内存可以为大小对齐的内存,也可以为大小不对齐的内存。处理器或进程在内存中读写数据时,都是按照基本单位进行操作的。例如,在32位处理器或32位的操作系统中,每次可以读取4字节(一个字节的大小)。优选地将内存段的起始地址设置为等于基本单位的倍数,申请的内存段可以是等于基本单位的倍数,且所述倍数为2的幂次方。例如,申请的内存的大小可以为4k字节、8k字节、16k字节、32k字节、64k字节、128k字节等,此时,申请的内存大小对齐。又例如,申请的内存的大小可以为6k字节、12k字节、48k字节等,此时,申请的内存大小不对齐。
54.优选地,第一处理器所申请的第一访问内存段可以是:通过系统调用接口或中间层中封装的动态库对外的接口分配出来的内存块,可以是共享内存块,比如在linux系统下
面,第一处理器通过mmap系统调用接口映射一块4096字节的内存大块;其中,每块内存大块与接口调用的标识信息相对应,以形成内存大块的索引,以适应执行多进程任务的第一处理器的内存读写操作。而且,第二处理器所申请的第二访问内存段可以不通过系统调用接口或中间层中封装的动态库对外的接口分配出来,而是直接从目标存储器的首地址开始,搜索一连续空闲内存空间,以适应进行单进程任务的第二处理器。
55.综上,每个第一目标进程访问到对应绑定的第一访问内存段,第二目标进程访问到对应标记出的第二访问内存段,而且可以通过中间层封装的接口调度多个第一目标进程绑定到对应分配到的第一访问内存段,提高系统的兼容性和使用场景的适应性;第一处理器和第二处理器会通过目标存储器中的同一段共享内存对内存申请的地址与容量信息进行交互;能够在处理器间的交互、以及目标进程所绑定或标记的内存段中,避开两个处理器在同一内存段内同时读写数据,解决了不同类型处理器之间的冲突问题,解决在多个进程无法同时使用共享内存的问题,适配裸机与不同嵌入式操作系统等软件环境,兼容到各种嵌入式操作系统、非嵌入式操作系统、以及无操作系统的软件环境,也兼容到单核处理器与多核处理器的应用场景。
56.作为内存申请操作的一种实施例,所述步骤s1包括步骤s11至步骤s13,所述步骤s2包括步骤s21至步骤s23;参阅图1可知,具体如下:步骤s11、若第一处理器接收到第一内存申请请求或信息共享内存的第一访问参数,以调度至少两个第一目标进程开始申请内存,则在目标存储器内,按照地址空间连续分配的原则为第一目标进程分配第一访问内存段,供各个第一目标进程的运行使用。然后执行步骤s12。需要说明的是,第一处理器接收到第一内存申请请求或信息共享内存的第一访问参数的前提可以是至少两个第一目标进程开始打开目标存储器的驱动设备节点,调度这些第一目标进程先后访问目标存储器或同时访问目标存储器,包括访问目标存储器设置的共享内存。第一内存申请请求或第一访问参数包括第一目标进程所需访问的内存空间的地址信息及其容量信息、第一目标进程不需访问的内存空间的地址信息。
57.步骤s12、将第一目标进程的标识信息与对应分配的第一访问内存段绑定在一起;然后执行步骤s13。在步骤s12中,基于第一内存申请请求或第一访问参数,按照各个第一目标进程所需访问的内存段的需求(包括首地址和内存容量大小的需求),将每个第一目标进程的标识信息与对应的第一访问内存段绑定在一起,以使每个第一目标进程在第一处理器调度下完成对应绑定的第一访问内存段的读写操作;在第一处理器内部运行的操作系统中需要将所调度的第一目标进程映射到对应分配的第一访问内存段,则在本实施例中使用第一目标进程的标识信息作为对应映射的第一访问内存段的首地址的索引,相应形成的映射关系是指示第一目标进程的标识信息与第一访问内存段的首地址(起始地址)之间的对应关系,加快依据第一目标进程的标识信息建立映射关系并加快定位到所需绑定的第一访问内存段(即映射到的第一访问内存段);优选地,标识信息与所需绑定的第一访问内存段的首地址存在固定的数值转换关系,当一个标识信息对应一个第一目标进程时,该第一目标进程所需绑定的第一访问内存段的首地址是唯一的,则该第一目标进程所需访问的第一访问内存段是唯一的。
58.在步骤s12中,所述将第一目标进程的标识信息与对应分配的第一访问内存段绑定在一起的方法包括:在第一内存申请请求或第一访问参数的控制下,将第一处理器所调
度的第一目标进程的标识信息设置为该第一目标进程当前访问的第一访问内存段的索引值,以使中间层通过第一目标进程的标识信息定位到所需访问的第一访问内存段,此时,中间层配置所述目标存储器进行内存地址映射操作;并配置其中一个标识信息对应分配(对应绑定)的第一访问内存段不允许其它标识信息的第一目标进程访问,形成该第一目标进程的标识信息与当前访问的第一访问内存段的首地址之间的映射关系,则确定将第一处理器所调度的每个第一目标进程的标识信息与对应分配的第一访问内存段绑定在一起,进而可以确定为真正为每个第一目标进程分配到对应的第一访问内存段;并将当前设置的索引值对应的第一访问内存段的首地址反馈给中间层,为应用软件程序提供第一目标进程的操作地址信息;因此,第一目标进程在访问所述目标存储器时,第一处理器通过该第一目标进程的标识信息对存在映射关系的第一访问内存段进行读写操作,即通过标识信息指定的地址去访问其存储的数据;其中,第一目标进程的标识信息是在第一处理器的调度作用下从中间层封装的动态库的接口中获取;中间层是设置在第一处理器所运行的操作系统中。第一处理器可以通过中间层申请内存,第一内存申请请求可以是来源于中间层及其关联的应用软件程序;各个第一目标进程的地址空间是相互独立的,各个第一目标进程可以同时使用目标存储器读写数据且互不干扰。
59.需要说明的是,在所述步骤s12中,将每个第一目标进程的标识信息与对应分配的第一访问内存段绑定在一起后,从第一访问内存段的首地址开始,每当检测到一个内存段被第一处理器调度的对应绑定的一个第一目标进程占用,则将该内存段设置为被占用的内存段以指示各个第一访问内存段是否空闲,并确定当前设置出的被占用的内存段不允许除了所述对应绑定的一个第一目标进程之外的第一目标进程访问。索引与第一访问内存段的首地址之间存在映射关系;第一目标进程的标识信息作为目标存储器的索引,优选地,可以按照索引在数据结构中的链接顺序,依次查找绑定到第一目标进程的首地址,以便于向目标存储器中连续空闲的内存块读写数据。所述第一访问内存段的地址连续;所述索引可以唯一区分不同的第一访问内存段。
60.优选地,步骤s12还包括:当中间层不配置所述目标存储器进行内存地址映射操作时,通过调用中间层中预先配置的读写函数,对第一目标进程所需访问的第一访问内存段进行读写操作,以实现采用内存拷贝的方式对第一访问内存段进行读写操作,则不需按照前述实施例的方式将每个第一目标进程的标识信息与对应分配的第一访问内存段的首地址绑定在一起以形成映射关系,而是依据预先配置的读写函数内设的参数规则直接定位到所需操作的内存地址;再将在第一访问内存段进行读写操作的首地址反馈给应用软件程序;优选地,第一目标进程所需的内存申请请求或第一访问参数当中包括所需访问的第一访问内存段的首地址、以及所需访问的第一访问内存段的内存容量,以实现为每个第一目标进程分配到第一访问内存段,将作为参数输入给所述预先配置的读写函数,以便于对第一目标进程所需访问的第一访问内存段进行读写操作。
61.步骤s13、确定第一目标进程完成内存申请操作,并控制第一处理器至少将已绑定的第一访问内存段所存在的首地址和内存容量都通过信息共享内存传输给其余处理器;然后执行步骤s21;优选地,第一处理器可以将已分配到的第一访问内存段所存在的首地址和内存容量都更新为信息共享内存的第一访问参数,包括将已绑定的第一访问内存段的首地址及其内存容量都更新为信息共享内存的第一访问参数当中同类型的参数、或第一内存申
请请求中同类型的参数;再通过信息共享内存将第一目标进程完成内存申请操作的信息、更新后的第一访问参数、以及更新后的第一内存申请请求传输给第二处理器。由于第一处理器和第二处理器是不同类型的处理器,所以第一处理器申请完成内存申请操作之后通知第二处理器,保证第一处理器和第二处理器之间的数据正常交互。
62.步骤s21、若接收到第二内存申请请求或信息共享内存的第二访问参数,则在目标存储器内,按照地址空间连续分配的原则为第二目标进程分配第二访问内存段;然后执行步骤s22。其中,步骤s21是在第二处理器确定第一目标进程完成内存申请操作的情况下执行,但是第二处理器是配置为运行单进程,所以第二内存申请请求或信息共享内存的第二访问参数决定在第二处理器中,只为一个第二目标进程分配一个第二访问内存段,则只允许一个第二目标进程访问对应分配出的一个第二访问内存段。
63.步骤s22、为第二访问内存段中的被数据占用的内存段设置占用标记,并在目标存储器的未分配的内存空间中设置访问限制内存段,以将第二目标进程在目标存储器中的有效访问范围限制在第二访问内存段内。然后执行步骤s23。
64.具体地,在步骤s21分配好第二访问内存段后,第二目标进程会对第二访问内存段写入数据、或第二访问内存段在第二目标进程写入数据之前就预存有数据;在第二目标进程所需访问的第二访问内存段内,从第二访问内存段的首地址开始,每当检测到一个内存段被数据填充,可以是被第二目标进程写入的数据填充,则将该内存段设置为被数据占用的内存段以使得第二访问内存段不是连续空闲内存空间,并为该内存段设置占用标记,直至遍历完第二访问内存段内所有地址位置,获得所有设置有占用标记的地址区间,所有设置出的占用标记用于表示第二访问内存段中的空闲指示信息,以指示第二访问内存段是否存在空闲的内存空间;在第二访问内存段中,每个被数据占用的内存段只允许同一第二目标进程重复访问,但不允许除了该第二目标进程之外的进程访问,包括不被第一目标进程和其它的第二目标进程访问;并将目标存储器中除了第二访问内存段之外的内存段都设置为不允许第二目标进程访问,以防止同一第二目标进程在访问第二访问内存段的过程中出现地址越界,在第二处理器中引发错误的读写操作,则第二处理器和第一处理器都获得不正确的数据。其中,第二访问内存段的每个地址与第一访问内存段的每个地址存在一一对应的关系,在一些实施例中,第二目标进程所需的内存申请请求或第二访问参数当中包括所需访问的第二访问内存段的首地址、以及所需访问的第二访问内存段的内存容量,可以是来源于中间层,特别是根据第一处理器传输过来的更新后的第一访问参数以及更新后的第一内存申请请求设置,保证第二访问内存段与第一访问内存段之间存在地址映射关系。
65.步骤s23、确定第二目标进程完成内存申请操作,并控制第二处理器至少将其分配到的第二访问内存段所存在的首地址和内存容量通过目标共享内存传输给第一处理器;具体地,将已分配的第一访问内存段的首地址及其内存容量都更新为信息共享内存的第二访问参数当中同类型的参数、或第二内存申请请求中同类型的参数;再通过信息共享内存将第二目标进程完成内存申请操作的信息、更新后的第二访问参数、以及更新后的第二内存申请请求传输给第一处理器,维持第一处理器和第二处理器之间的数据正常交互。
66.步骤s11至步骤s13对应组成第一处理器的内存申请操作、步骤s21至步骤s23对应组成第二处理器的内存申请操作,第一访问内存段对应第一处理器读写操作,第二访问内存段对应第二处理器读写操作,第一访问内存段的数量可以多于第二访问内存段的数量,
第一访问内存段的申请时间早于第二访问内存段的申请时间,第一访问内存段与第二访问内存段都处于同一目标存储器的不同地址位置但二者存在地址映射关系。对于第一处理器所能调度的第一目标进程当中,将每个第一目标进程的标识信息设置为该第一目标进程当前访问的第一访问内存段的索引值,让每个第一目标进程的标识信息与对应访问的第一访问内存段的首地址之间建立一一对应关系,以使中间层通过第一目标进程的标识信息定位到所需访问的第一访问内存段,实现在目标存储器内按照第一目标进程所需的内存申请请求划分为多个第一访问内存段,并配置每个标识信息下定位出的第一访问内存段之间不允许相互访问,以防止一个进程所访问的内存段中的数据被别的进程改变,减少多个第一目标进程在同一存储器内读写数据出现错误或出现地址越界的问题。在第一处理器的基础上增加一个第二处理器去管理同一个目标存储器,而且在第一处理器完成内存申请操作以后再通知第二处理器去申请其调度的第二目标进程所需的内存,并能够将彼此申请内存的结果通知对方,使得一个处理器可以即时看到另一个处理器对其占用的内存中数据的更新,保证第一处理器和第二处理器之间的数据交互正常进行,互不干扰。
67.在前述步骤s11和步骤s21对应的实施例中,所述地址空间连续分配的原则包括:从目标存储器的首地址开始,搜索位于一块连续空闲内存空间的开始位置的地址,再将第一次搜索到的位于一块连续空闲内存空间的开始位置的地址设置为入口地址;检测入口地址所在的连续空闲内存空间是否存在满足内存申请请求的分配空间或满足访问参数需求的分配空间;其中,内存申请请求或访问参数包括预先设置的入口地址、以及该预先设置的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量。
68.对于检测入口地址所在的连续空闲内存空间是否存在满足内存申请请求的分配空间或满足访问参数需求的分配空间,具体是判断查找到属于连续空闲空间的分配空间大小是否等于内存申请请求或访问参数所需的空间大小,至于入口地址和占用状态(被进程占用状态和被数据占据状态)可以在分配后进行适应性的调整,以使得内存申请请求中规定的入口地址所在的连续空闲内存空间被调整为所述第一访问内存段或第二访问内存段。
69.当检测到入口地址所在的连续空闲内存空间中存在满足内存申请请求的分配空间时,将该分配空间设置为供一个进程访问的空闲内存段,确定当前检测到的入口地址是满足内存申请请求的分配空间的入口地址,并修改下一连续空闲内存空间的开始位置的地址以便于在下一连续空闲内存空间中分配出供另一个进程访问的空闲内存段,其中,当前检测到的入口地址与下一连续空闲内存空间的开始位置的地址之间的地址范围大于或等于所述供一个进程访问的空闲内存段所覆盖的地址范围。
70.当检测到入口地址所在的连续空闲内存空间中存在满足访问参数需求的分配空间时,将该分配空间设置为供一个进程访问的空闲内存段,确定当前检测到的入口地址是满足访问参数需求的分配空间的入口地址,并修改下一连续空闲内存空间的开始位置的地址以便于在下一连续空闲内存空间中分配出供另一个进程访问的空闲内存段;其中,当前检测到的入口地址与下一连续空闲内存空间的开始位置的地址之间的地址范围大于或等于所述供一个进程访问的空闲内存段所覆盖的地址范围。
71.当入口地址所在的连续空闲内存空间中不存在满足内存申请请求的分配空间和满足访问参数需求的分配空间时,将所述入口地址调整到下一连续空闲内存空间中的开始位置的地址,再判断调整后的入口地址所在的连续空闲内存空间是否存在满足内存申请请
求的分配空间或满足访问参数需求的分配空间,直至搜索到满足内存申请请求的分配空间或满足访问参数需求的分配空间,否则确定申请内存失败。需要说明的是,下一连续空闲内存空间中的开始位置是预先记录在调整前的入口地址所在的连续空闲内存空间中;供一个进程访问的空闲内存段的首地址、以及供该进程访问的空闲内存段的内存容量都被缓存在所述信息共享内存中并更新为访问参数当中的一部分和释放参数当中的一部分。
72.在上述实施例的基础上,每当按照所述地址空间连续分配的原则为第一目标进程分配对应的第一访问内存段时,确定该第一访问内存段是满足第一内存申请请求的分配空间或满足第一访问参数的分配空间,第一访问内存段的首地址是当前调整出来的入口地址,其中,能够分配的内存空间则为可分配的内存段,即未被占用的空间,前述的内存申请请求可以是第一内存申请请求,前述的访问参数可以是第一访问参数,因此,第一访问内存段在分配出来时是属于连续空闲内存空间。满足第一内存申请请求的入口地址所在的连续空闲内存空间中所需的分配空间是满足第一内存申请请求的分配空间;满足第一访问参数需求的入口地址所在的连续空闲内存空间中所需的分配空间是满足第一访问参数需求的分配空间。
73.每当按照所述地址空间连续分配的原则为第二目标进程分配对应的第二访问内存段时,确定该第二访问内存段是满足该第二内存申请请求的分配空间或满足第二访问参数的分配空间,第二访问内存段的首地址是当前调整出来的所述入口地址,其中,能够分配的内存空间则为可分配的内存段,即未被占用的空间,前述的内存申请请求可以是第二内存申请请求,前述的访问参数可以是第二访问参数,因此,第二访问内存段在分配出来时是属于连续空闲内存空间。满足第二内存申请请求的入口地址所在的连续空闲内存空间中所需的分配空间是满足第二内存申请请求的分配空间;满足第二访问参数需求的入口地址所在的连续空闲内存空间中所需的分配空间是满足第二访问参数需求的分配空间。
74.优选地,在第一处理器和第二处理器开始操作所述目标存储器之前,所述目标存储器内的整个内存空间为一连续空闲空间,整个内存空间通过多次内存申请和内存释放会产生不同的连续空闲空间。第一处理器接收外部设备发送的第一内存申请请求,根据所述第一内存申请请求可以获得外部设备发送的内存申请数据,获得所述内存申请数据的字节数,对应为所需分配或被绑定(映射到)的第一访问内存段的内存容量。同时,分配的内存空间刚好满足内存申请请求或访问参数需求,不会存在单次申请空间过大的情况,从而提高内存的利用率。也适用于嵌入式linux系统以及高性能处理器。
75.在一些实施例中,前述步骤s11当中还包括:在按照地址空间连续分配的原则为第一目标进程分配对应的第一访问内存段之前,需要判断第一目标进程访问目标存储器所需的参数合法,包括所述入口地址和分配空间的内存容量;具体判断方式包括:当满足第一内存申请请求的入口地址或满足第一访问参数需求的入口地址处于第一预设首地址范围内,且该处于第一预设首地址范围内的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第一预设目标容量范围内时,确定第一目标进程访问目标存储器所需的参数合法,则可以在第一处理器接收到第一内存申请请求或信息共享内存的第一访问参数之后,开始按照所述地址空间连续分配的原则为第一目标进程分配对应的第一访问内存段。
76.具体地,当第一内存申请请求当中包括的入口地址处于第一预设首地址范围内,
且第一内存申请请求当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第一预设目标容量范围内时,确定第一内存申请请求中的参数合法;或者,当第一访问参数当中包括的入口地址处于第一预设首地址范围内,且第一访问参数当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第一预设目标容量范围内时,确定第一访问参数合法。再通过第一目标进程的标识信息来在所述目标存储器中搜索对应绑定到的第一访问内存段。
77.第一预设首地址范围会随着第一内存申请请求所包括的入口地址的变化而变化,而且每个入口地址的向前偏移地址区间及其向后偏移地址区间组成第一预设首地址范围,向前偏移地址区间及其向后偏移地址区间是依据第一处理器的具体架构以及运行的操作系统的复杂度所决定,比如,第一处理器对目标存储器的读写延迟时间较长、或分配内存不稳定时,将向前偏移地址区间及其向后偏移地址区间设置得比较宽,否则设置得较窄;同理地,第一预设目标容量范围在第一处理器对目标存储器的读写延迟时间较长、或分配内存不稳定时设置得比较大,否则设置得比较小。具体地,当第一内存申请请求当中包括的入口地址处于第一预设首地址范围内,且第一内存申请请求当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第一预设目标容量范围内时,确定第一内存申请请求中的参数合法,其中,入口地址所在的连续空闲内存空间中所需的分配空间是入口地址所在的连续空闲内存空间中,满足所述第一内存申请请求的分配空间。或者,当第一访问参数当中包括的入口地址处于第一预设首地址范围内,且第一访问参数当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第一预设目标容量范围内时,确定第一访问参数合法,其中,入口地址所在的连续空闲内存空间中所需的分配空间是入口地址所在的连续空闲内存空间中,满足第一访问参数需求的分配空间。
78.优选地,在应用软件程序的控制下,中间层通过设置所述目标存储器来保存所述入口地址以及对应的分配空间的内存容量,以使得中间层保存每个第一访问内存段的首地址;在步骤s11中,中间层为第一目标进程提供所需的入口地址和对应的分配空间的内存容量,并判断第一目标进程所需的入口地址是否处于第一预设首地址范围内,且判断同一入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是否处于第一预设目标容量范围内。
79.在一些实施例中,前述步骤s21当中还包括:在按照地址空间连续分配的原则为第二目标进程分配对应的第二访问内存段之前,需要判断第二目标进程访问目标存储器所需的参数合法,包括所述入口地址和分配空间的内存容量;具体判断方式包括:当满足第二内存申请请求的入口地址或满足第二访问参数需求的入口地址处于第二预设首地址范围内,且该处于第二预设首地址范围内的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第二预设目标容量范围内时,确定第二目标进程访问目标存储器所需的参数合法,则可以在第二处理器接收到第二内存申请请求或信息共享内存的第二访问参数之后,开始按照所述地址空间连续分配的原则为第二目标进程分配对应的第二访问内存段。
80.第二预设首地址范围会随着第二内存申请请求所包括的入口地址的变化而变化,而且每个入口地址的向前偏移地址区间及其向后偏移地址区间组成第二预设首地址范围,第二处理器对目标存储器的读写延迟时间较长、或分配内存不稳定时,将向前偏移地址区
间及其向后偏移地址区间设置得比较宽,否则设置得较窄。同理地,第二预设目标容量范围在第二处理器对目标存储器的读写延迟时间较长、或分配内存不稳定时设置得比较大,否则设置得比较小。同理地,第二预设目标容量范围在第二处理器对目标存储器的读写延迟时间较长、或分配内存不稳定时设置得比较大,否则设置得比较小。
81.具体地,当第二内存申请请求当中包括的入口地址处于第二预设首地址范围内,且第二内存申请请求当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第二预设目标容量范围内时,确定第二内存申请请求中的参数合法;或者,当第二访问参数当中包括的入口地址处于第二预设首地址范围内,且第二访问参数当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第二预设目标容量范围内时,确定第二访问参数合法。
82.优选地,在应用软件程序的控制下,所述目标存储器为第二目标进程提供所需的入口地址和对应的分配空间的内存容量,并由第二处理器判断第二目标进程所需的入口地址是否处于第二预设首地址范围内,且判断同一入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是否处于第二预设目标容量范围内。
83.需要说明的是,所述中间层在嵌入式操作系统中也称为硬件抽象层(hardwareabstractlayer,hal)或板级支持包(board support package,bsp),它将系统上层软件(应用程序)与底层硬件分离开来,使系统的底层驱动程序与上层无关,上层软件开发人员无需关心底层硬件的具体情况,根据bsp层提供的接口即可进行开发,在多进程运行的操作系统或处理器中降低程序开发复杂度。
84.作为一种实施例,在执行所述步骤s1和所述步骤s2之后,所述内存管理方法还包括:步骤s3、在所述第一处理器接收到内存释放请求时,通过所述目标存储器通知所述第二处理器,以请求所述第二处理器释放内存;然后可以同时执行步骤s4和步骤s5。其中,为了对已分配或已绑定的第一访问内存段进行释放以维持第一处理器的正常运行,在执行所述步骤s1后,最新获得的第一访问内存段的首地址以及该第一访问内存段的内存容量都被转换到第一内存释放请求或所述信息共享内存的第一释放参数当中。至于步骤s3的发起者可以是第一处理器,也可以是第二处理器。
85.步骤s4、在所述第一处理器接收到第一内存释放请求或所述信息共享内存的第一释放参数时,通过第一目标进程的标识信息来在所述目标存储器中搜索对应的第一访问内存段,包括查找第一访问内存段的首地址;再解除第一目标进程的标识信息与对应绑定的第一访问内存段的绑定关系,以使得该第一访问内存段不被原来绑定的第一目标进程继续访问,解除被原来绑定的第一目标进程的占用关系,让该第一访问内存段恢复为支持被任意第一目标进程访问,可以是在重新申请或分配内存的前提下被第一目标进程访问;然后确定第一目标进程完成内存释放操作,在一些实施例中可以恢复为连续空闲空间;第一处理器还通过所述信息共享内存将第一目标进程完成内存释放操作的信息传输给第二处理器;其中,该第一访问内存段没有被解除与对应第一目标进程的标识信息的绑定关系时,不被其它第一目标进程访问;第二访问内存段的地址值与第一访问内存段的地址值不同。其中,步骤s4是表示第一处理器执行内存释放操作。
86.所述内存管理方法还包括:步骤s5、在所述第二处理器接收到内存释放请求时,从所述第二访问内存段的首地址开始,依次搜索被数据占用的内存段,包括搜索所述第二访
问内存段的首地址和分配到的内存容量;再将每个搜索到的被数据占用的内存段的占用标记清除,以恢复为允许任意一个进程访问;具体是解除第二目标进程写入的数据与第二访问内存段的占用关系,以使得该第二访问内存段不被原来第二目标进程占用,该第二访问内存段可以恢复为连续空闲空间,让该第二访问内存段恢复为支持被第二目标进程访问,可以是在重新申请或分配内存的前提下继续被第二目标进程访问;同时将所述访问限制内存段恢复为允许第二目标进程访问,其中,所述访问限制内存段不一定保持为连续空闲空间;然后确定第二目标进程完成内存释放,再通过所述目标存储器将第二目标进程完成内存释放的信息通知第一处理器;其中,为了对已分配的第二访问内存段进行释放以维持第二处理器的正常运行,在执行步骤s2后,最新获得的第二访问内存段的首地址、被数据占用的内存段的内存容量以及为访问限制内存段的内存容量都被转换到第二内存释放请求或所述信息共享内存的第二释放参数当中。其中,步骤s5是表示第二处理器执行内存释放操作。
87.综上,本实施例在第一处理器的基础上增加一个第二处理器去管理一个目标存储器,而且在第一处理器完成内存申请完以后再通知第二处理器去申请其调度的第二目标进程所需的内存,并能够将彼此释放内存的结果通知对方,使得一个处理器可以即时看到另一个处理器对共享内存中数据的更新,保证第一处理器和第二处理器之间的数据交互正常进行,互不干扰;其中,支持多个第一目标进程访问的第一处理器通过中间层封装出的动态库所提供的对外接口使用和释放被进程占用的第一访问内存段,分配的内存段被线程占用后,是不允许别的进程访问,只能被申请该内存段的进程访问,以防止数据不被别的进程改变,保证第一处理器读写到正确的数据。支持单个第二目标进程访问的第二处理器通过标记状态信息来使用和释放被数据占用的第二访问内存段。
88.需要说明的是,第一内存释放请求和第一释放参数可以都包括第一访问内存段的释放请求信息、第一访问内存段的首地址以及第一访问内存段的内存容量;第二内存释放请求和第二释放参数可以都包括第二访问内存段的释放请求信息、第二访问内存段的首地址以及第二访问内存段的内存容量。可选的,内存释放请求和释放参数可以包括释放的内存的大小和所释放的内存的首地址。释放的内存可以为大小对齐的内存,也可以为大小不对齐的内存。处理器或进程在内存中释放内存空间时,都是按照基本单位进行解除内存空间及占用的数据的关系。
89.作为内存释放的一种实施例,所述步骤s4包括步骤s41至步骤s43,所述步骤s5包括步骤s51至步骤s53;参阅图2可知,具体如下:步骤s3、在所述第一处理器接收到第一内存释放请求或所述信息共享内存的第一释放参数时,通过所述信息共享内存通知所述第二处理器;然后触发步骤s51和步骤s41同时执行。
90.步骤s41、在所述第一处理器接收到第一内存释放请求或所述信息共享内存的第一释放参数时,通过第一目标进程的标识信息来在所述目标存储器中搜索对应绑定到的第一访问内存段,然后执行步骤s42。其中,对应绑定到的第一访问内存段是来源于前述实施例的步骤s12中与第一目标进程的标识信息(来源于第一处理器调度出来的第一目标进程)绑定的第一访问内存段,可以是步骤s11分配出来的所有第一访问内存段,也可以是满足第一目标进程的第一访问内存段,可以是步骤s11分配出来的部分第一访问内存段。
91.在在前述步骤s11和步骤s21提及的地址空间连续分配的原则的基础上,执行步骤s3之后,在步骤s4中,在通过第一目标进程的标识信息来在所述目标存储器中搜索对应分配到的第一访问内存段之前,当第一内存释放请求或第一释放参数当中包括的入口地址处于第一预设首地址范围内,且该处于第一预设首地址范围内的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第一预设目标容量范围内时,确定第一目标进程在目标存储器中释放内存所需的参数合法,再通过第一目标进程的标识信息来在所述目标存储器中搜索对应绑定到的第一访问内存段。其中,入口地址所在的连续空闲内存空间中所需的分配空间是第一内存释放请求或第一释放参数所需释放的内存空间,来源于第一目标进程的标识信息对应绑定的第一访问内存段。
92.具体地,当第一内存释放请求当中包括的入口地址处于所述第一预设首地址范围内,且第一内存释放请求当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于所述第一预设目标容量范围内时,确定第一内存释放请求中的参数合法;或者,当第一释放参数当中包括的入口地址处于所述第一预设首地址范围内,且第一释放参数当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于所述第一预设目标容量范围内时,确定第一释放参数合法。再通过第一目标进程的标识信息来在所述目标存储器中搜索对应绑定到的第一访问内存段。所述第一预设首地址范围的定义和所述第一预设目标容量范围的定义都与前述内存申请操作的实施例中的相同。
93.步骤s42、解除第一目标进程的标识信息与对应的第一访问内存段的绑定关系,以使得该第一访问内存段恢复为支持被任意第一目标进程访问或该第一访问内存段不被原来占用的第一目标进程继续访问,则该第一访问内存段可以被重新使用;然后执行步骤s43。
94.在一些实施例中,每当步骤s41通过第一目标进程的标识信息搜索到对应绑定的一个第一访问内存段,步骤s42解除第一目标进程的标识信息与对应的第一访问内存段的绑定关系,使得第一目标进程的标识信息与所需访问的第一访问内存段的首地址不存在映射关系。
95.步骤s43、确定第一目标进程完成内存释放操作,并通过所述信息共享内存将第一目标进程完成内存释放操作的信息传输给第二处理器。
96.因此,为了保证第一处理器的正常运转,对于第一目标进程所需的内存释放操作,第一处理器通过第一目标进程的标识信息定位到所需释放的第一访问内存段的首地址,再进行解绑,让该第一访问内存段可以继续使用。
97.步骤s51、在所述第二处理器接收到第二内存释放请求或所述信息共享内存的第二释放参数时,从所述第二访问内存段的首地址开始,依次搜索被数据占用的内存段(可以是被占用一个地址位置或一段地址区间),并将每个搜索到的被数据占用的内存段的占用标记清除,以恢复为允许所述第二处理器调度的其它进程访问;然后执行步骤s52;其中,该第二访问内存段没有被清除相关地址区间中的占用标记时,只允许申请该第二访问内存段的第二目标进程访问;第二访问内存段的地址值与第一访问内存段的地址值存在映射关系,但不一定完全相同,尤其是二者的首地址不相同。
98.在执行步骤s51中,在从第二访问内存段的首地址开始依次搜索被数据占用的内存段之前,当第二内存释放请求或第二释放参数当中包括的入口地址处于第二预设首地址
范围内,且该处于第二预设首地址范围内的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第二预设目标容量范围内时,确定第二目标进程在目标存储器中释放内存所需的参数合法,再开始搜索被数据占用的内存段和所述访问限制内存段,以便于清除当前搜索到内存段在步骤s2当中设置的信息,包括占用标记。其中,入口地址所在的连续空闲内存空间中所需的分配空间是第二内存释放请求或第二释放参数所需释放的内存空间,来源于按照前述步骤s21分配的第二访问内存段。
99.具体地,当第二内存释放请求当中包括的入口地址处于第二预设首地址范围内,且第二内存释放请求当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第二预设目标容量范围内时,确定第二内存释放请求中的参数合法。或者,当第二释放参数当中包括的入口地址处于第二预设首地址范围内,且第二释放参数当中包括的入口地址所在的连续空闲内存空间中所需的分配空间的内存容量是处于第二预设目标容量范围内时,确定第二释放参数合法。所述第二预设首地址范围的定义和所述第二预设目标容量范围的定义都与前述内存申请操作的实施例中的相同。
100.在步骤s51中,在第二目标进程所需释放的第二访问内存段内,从第二访问内存段的首地址开始,每当检测到一个被数据占用的内存段,时,将该内存段的占用标记清除,从而解除第二目标进程写入的数据与该内存段的占用关系,以使得该内存段不被原来第二目标进程占用,直至遍历完第二访问内存段内所有地址位置,在一些实施例中该第二访问内存段可以恢复为连续空闲空间,以允许其它进程访问而且是单个进程访问。
101.步骤s52、将访问限制内存段恢复为允许第二目标进程访问;然后执行步骤s53。步骤s52将目标存储器中除了第二访问内存段之外的内存段都设置为允许第二目标进程或其它进程随意访问,解除第二处理器对目标存储器的访问限制,所述访问限制内存段不一定保持为连续空闲空间。
102.步骤s53、确定第二目标进程完成内存释放操作,即确定将第二目标进程的标识信息与第二访问内存段解除占用关系和访问限制关系;再通过所述信息共享内存将第二目标进程完成内存释放操作的信息传输给第一处理器,也便于第一处理器调度第一目标进程申请并访问目标存储器内的第一访问内存段、或便于第二处理器调度新的第二目标进程申请并访问目标存储器内的第二访问内存段。
103.通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
104.在本技术所提供的几个实施例中,应该理解到,所揭露的多进程系统中的共享内存管理装置,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
105.对于前述实施方式,为了简单描述,故将其都表述为一系列的动作组合,但是本领
域技术人员应该知悉,本发明实施方式并不受所描述的动作顺序的限制,困为依据本发明实施方式,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施方式均属于优选实施方式,所涉及的动作并不一定是本发明实施方式所必须的。
106.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
107.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
108.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
109.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1