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