G06F9/50 G06F9/54 G06F12/0806
1.一种内存共享方法,其特征在于,应用于同一终端内多处理器之间的数据通信,包 括:
作为数据接收方的第一处理器在操作系统的启动过程中,从系统堆空间申请N个缓存 区,N为非零自然数;
所述第一处理器将所述N个缓存区的地址依次存放到N个区段中,其中,所述区段为共 享内存按预设大小划分的区段;
作为数据发送方的第二处理器将数据依次写入L个所述区段对应的所述缓存区中,其 中,L≤N;
所述第一处理器依次读取所述L个所述区段对应的所述缓存区的数据;
所述第一处理器释放所述L个所述区段对应的所述缓存区。
2.根据权利要求1所述的内存共享方法,其特征在于,所述作为数据接收方的第一处理 器在操作系统的启动过程中,从系统堆空间申请N个缓存区,具体包括:
作为数据接收方的第一处理器在操作系统的启动过程中,根据所述操作系统的内存申 请接口,从系统堆空间申请N个缓存区。
3.根据权利要求1所述的内存共享方法,其特征在于,在所述第一处理器依次读取所述 L个所述区段对应的所述缓存区的数据之后,还包括:
所述第一处理器根据所述操作系统的内存申请接口,从所述系统堆空间重新申请L个 所述缓存区,替换所述L个所述区段对应的所述缓存区。
4.根据权利要求1所述的内存共享方法,其特征在于,所述第一处理器释放所述L个所 述区段对应的所述缓存区,具体包括:
将所述L个所述区段对应的所述缓存区更新为空缓存区;
根据所述操作系统的内存释放接口,释放所述空缓存区。
5.根据权利要求4所述的内存共享方法,其特征在于,在所述将所述L个所述区段对应 的所述缓存区更新为空缓存区之前,还包括:
所述第一处理器判定完成对所述L个所述区段对应的所述缓存区的数据进行的数据处 理。
6.根据权利要求4所述的内存共享方法,其特征在于,在所述释放所述空缓存区之后, 还包括:
所述操作系统将所述空缓存区回收至所述系统堆空间。
7.一种基于多处理器的终端设备,其特征在于,包括:作为数据接收方的第一处理器和 作为数据发送方的第二处理器;
所述第一处理器包括:
申请模块,用于在操作系统的启动过程中,从系统堆空间申请N个缓存区;
存储模块,用于将所述申请模块申请的所述N个缓存区的地址,依次存放到N个区段中, 其中,所述区段为共享内存按预设大小划分的区段;
读取模块,用于依次读取L个所述区段对应的所述缓存区的数据,其中,L≤N;
释放模块,用于释放所述L个所述区段对应的所述缓存区;
所述第二处理器,用于将数据依次写入L个所述区段对应的所述缓存区中。
8.根据权利要求7所述的基于多处理器的终端设备,其特征在于,所述申请模块具体用 于在操作系统的启动过程中,根据所述操作系统的内存申请接口,从系统堆空间申请N个缓 存区。
9.根据权利要求7所述的基于多处理器的终端设备,其特征在于,所述申请模块还用于 当所述读取模块读取完数据后,根据所述操作系统的内存申请接口,从所述系统堆空间重 新申请L个所述缓存区,替换所述L个所述区段对应的所述缓存区。
10.根据权利要求7所述的基于多处理器的终端设备,其特征在于,所述释放模块具体 包括更新子模块与释放子模块;
所述更新子模块,用于将所述L个所述区段对应的所述缓存区更新为空缓存区;
所述释放子模块,用于根据所述操作系统的内存释放接口,释放所述空缓存区。
本发明涉及计算机领域,特别涉及一种内存共享方法与基于多处理器的终端设 备。
多处理器芯片广泛应用于各种嵌入式设备中,处理器与处理器之间的数据通信都 是以共享内存为基础的,此共享内存可以被多个处理器访问并分别实现数据的读写操作, 目前,对数据交互的实时性要求较高的场景中,基本都采用如下的内存管理方式:预先将共 享内存划分为数据区和空闲区两个区域,分别使用队列的方式管理,其中,在数据区,若干 缓存区排列在一起组成数据队列,在空闲区,若干空闲的、没有有效数据的缓存区排列在一 起,组成空闲队列,而且,缓存区由作为发送方的处理器申请,由作为接收方的处理器释放。 具体地说,发送方处理器在系统软件的初始化过程中,申请若干空闲缓存区,并放到空闲队 列中,当发送方处理器发送数据时,按照顺序从空闲队列依次取出若干空闲缓存区,并将发 送数据存放到取出的若干空闲缓存区中,使其变为数据缓存区,然后将这些数据缓存区加 入到数据队列的尾部,等待接收方处理器读取。接收方处理器读取数据时,按顺序从数据队 列取出若干数据缓存区,并对这部分数据进行处理,处理完成后,释放此数据缓存区,此数 据缓存区又变为空闲缓存区,再次被加入到空闲队列中。
然而,在实现发明的过程中,本申请的发明人发现,上述内存管理方式中,空闲队 列与数据队列的管理分别由发送方处理器与接收方处理器单独管理,需要增加较多的互斥 逻辑才能实现共同管理,而且,调试难度也随之增加,一旦内存使用发生错误,需要同时抓 取两个处理器上的数据结构来定位,对调试手段要求较高,特别地,队列缓存区需要预先分 配好,独立于操作系统堆空间,而且,这部分预先规划好大小和边界定义的缓存区,会根据 不同的硬件资源而发生变化,更换产品形态时需要随之调整规划,可移植性差。
本发明实施方式的目的在于提供一种内存共享方法与基于多处理器的终端设备, 使得同一终端的多处理器,在基于共享内存进行数据通信时,采用接收方申请与释放缓存 区的内存管理方式,实现了统一管理,从而降低了调试难度。
为解决上述技术问题,本发明的实施方式提供了一种内存共享方法,包括:
作为数据接收方的第一处理器在操作系统的启动过程中,从系统堆空间申请N个 缓存区;
所述第一处理器将所述N个缓存区的地址依次存放到N个区段中,其中,所述区段 为共享内存按预设大小划分的区段,N为非零自然数;
作为数据发送方的第二处理器将数据依次写入L个所述区段对应的所述缓存区 中,其中,L≤N;
所述第一处理器依次读取所述L个所述区段对应的所述缓存区的数据;
所述第一处理器释放所述L个所述区段对应的所述缓存区。
本发明的实施方式还提供了一种基于多处理器的终端设备,包括:作为数据接收 方的第一处理器和作为数据发送方的第二处理器;
所述第一处理器包括:
申请模块,用于在操作系统的启动过程中,从系统堆空间申请N个缓存区;
存储模块,用于将所述申请模块申请的所述N个缓存区的地址,依次存放到N个区 段中,其中,所述区段为共享内存按预设大小划分的区段;
读取模块,用于依次读取L个所述区段对应的所述缓存区的数据,其中,L≤N;
释放模块,用于释放所述L个所述区段对应的所述缓存区。
所述第二处理器,用于将数据依次写入L个所述区段对应的所述缓存区中。
本发明实施方式相对于现有技术而言,作为数据接收方的第一处理器在操作系统 的启动过程中,从系统堆空间申请N个缓存区,确保了缓存区由接收方从系统堆空间中申 请,第一处理器将N个缓存区的地址依次存放到N个区段中,将缓存区的地址存放于共享内 存,便于双方通过公用的共享内存进行数据通信,作为数据发送方的第二处理器将数据依 次写入L个区段对应的缓存区中,使得发送方通过共享内存把数据写入缓存区中,第一处理 器依次读取L个区段对应的缓存区的数据,然后释放L个区段对应的缓存区,接收方通过共 享内存获取发送方的数据,并在获取数据后释放该缓存区,确保了缓存区由接收方释放,最 终实现同一终端的多处理器,在基于共享内存进行数据通信时,采用接收方申请与释放缓 存区的内存管理方式,实现了统一管理,从而降低了调试难度。
另外,所述作为数据接收方的第一处理器在操作系统的启动过程中,从系统堆空 间申请N个缓存区,具体包括:作为数据接收方的第一处理器在操作系统的启动过程中,根 据所述操作系统的内存申请接口,从系统堆空间申请N个缓存区。接收方根据操作系统的内 存申请接口,从操作系统堆空间申请N个缓存区,使得缓存区的申请不会独立于系统堆空 间,具有更好的移植性。
另外,在所述第一处理器依次读取所述L个所述区段对应的所述缓存区的数据之 后,还包括:所述第一处理器根据所述操作系统的内存申请接口,从所述系统堆空间重新申 请L个所述缓存区,替换所述L个所述区段对应的所述缓存区。从而确保共享内存的循环利 用及数据通信的顺畅。
另外,所述第一处理器释放所述L个所述区段对应的所述缓存区,具体包括:将所 述L个所述区段对应的所述缓存区更新为空缓存区;根据所述操作系统的内存释放接口,释 放所述空缓存区。将第一处理器限定为释放空缓存区,可以防止第一处理器将尚未完成数 据处理的缓存区误释放掉。
另外,在所述将所述L个所述区段对应的所述缓存区更新为空缓存区之前,还包 括:所述第一处理器判定完成对所述L个所述区段对应的所述缓存区的数据进行的数据处 理。从而防止第一处理器将尚未完成数据处理的缓存区更新为空缓存区,增强了第一处理 器释放缓存区的安全性。
图1是根据本发明第一实施方式的一种内存共享方法流程图;
图2是根据本发明第一实施方式的将缓存区的地址存放到共享内存区段的示意 图;
图3是根据本发明第一实施方式的将数据依次写入共享内存区段对应缓存区的示 意图;
图4是根据本发明第一实施方式的依次读取共享内存区段对应缓存区的数据的示 意图;
图5是根据本发明第一实施方式的用新申请缓存区替换共享内存区段对应缓存区 的示意图;
图6是根据本发明第二实施方式的一种内存共享方法流程图;
图7是根据本发明第三实施方式的一种基于多处理器的终端设备的结构示意图;
图8是根据本发明第四实施方式的一种基于多处理器的终端设备结构示意图。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实 施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中, 为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基 于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。
本发明的第一实施方式涉及一种内存共享方法,应用于同一终端内多处理器之间 的数据通信。具体流程如图1所示。
在步骤101中,从系统堆空间申请缓存区。
具体地说,作为数据接收方的第一处理器在操作系统的启动过程中,根据所述操 作系统的内存申请接口,从系统堆空间申请N个缓存区,其中,N为非零自然数,使得缓存区 的申请不会独立于系统堆空间,具有更好的移植性。
在步骤102中,将缓存区的地址存放到相应区段。
具体地说,第一处理器将N个缓存区的地址依次存放到N个区段中,其中,该区段为 共享内存按预设大小划分的区段,如图2所示,图中201、202直至207,分别表示区段1、区段2 直到区段N。需要说明的是,共享内存按预设大小划分的区段的个数大于或等于缓存区的个 数。
在步骤103中,将数据写缓存区。
具体地说,作为数据发送方的第二处理器,根据写指针,将数据依次写入L个区段 对应的缓存区中,其中,L≤N,当第二处理器完成L个区段对应的缓存区的数据的写入后,将 写指针更新为指向L+1区段的写指针,如图3所示,其中,301至305用阴影填充,表示缓存区 已被写入数据,左侧的箭头表示第二处理器将写指针更新为指向L+1区段,306与307表示缓 存区尚未写入数据。
在步骤104中,读取缓存区的数据。
具体地说,第一处理器根据读指针,依次读取L个区段对应的缓存区的数据,当第 一处理器完成对缓存区数据的读取后,将读指针更新为指向L+1区段的读指针,需要说明的 是,第一处理器并不是必须一次性读取完L个区段对应的缓存区的数据,再进行数据处理, 第一处理器可以根据需要,依次读取L个区段中的若干个区段对应的缓存区的数据,例如: 依次读取L个区段中的2个区段对应的缓存区的数据,并将读指针更新为指向区段3的读指 针,如图4所示,图中右侧的箭头表示第一处理器的读指针,左侧的箭头表示第二处理器的 写指针,401与402表示该区段对应的缓存区的数据已被读取,403至405表示该区段对应的 缓存区的数据尚未被读取,406与407表示缓存区尚未写入数据。进一步地,当完成数据处理 后,再根据需要依次读取剩余区段,例如:L-2个区段中的若干个区段对应的缓存区的数据, 例如:再依次读取L-2个区段中的3个区段对应的缓存区的数据。
进一步地,因为当第一处理器依次读取L个区段对应的缓存区的数据之后,该L个 区段变为空区段,不存在与之对应的缓存区,发送方无法将要发送的数据写入共享内存的 空区段,当第一处理器依次读取L个区段对应的缓存区的数据后,接着根据操作系统的内存 申请接口,从系统堆空间重新申请L个缓存区,替换到L个区段对应的缓存区,从而确保共享 内存的循环利用及数据通信的顺畅,如图5所示,其中,为了与图4相对应,图5只给出了依次 读取L个区段中的2个区段对应的缓存区的数据时的示意图,501与502表示该区段对应的缓 存区为重新申请的缓存区,503至505表示该区段对应的缓存区的数据尚未被读取,506与 507表示缓存区尚未写入数据。
在步骤105中,释放缓存区。
具体地说,当第一处理器依次读取L个区段对应的缓存区的数据后,将该L个区段 对应的缓存区更新为空缓存区,再根据操作系统的内存释放接口,释放该空缓存区,其中, 当第一处理器依次读取L个区段中的若干个区段,例如:2个区段,对应的缓存区的数据后, 则将该2个区段对应的缓存区更新为空缓存区,再根据操作系统的内存释放接口,释放该空 缓存区,将第一处理器限定为释放空缓存区,可以防止第一处理器将尚未完成数据处理的 缓存区误释放掉。
进一步地,当第一处理器释放该空缓存区后,操作系统将该空缓存区回收至系统 堆空间。
与现有技术相比,在本实施方式中,作为数据接收方的第一处理器在操作系统的 启动过程中,根据操作系统的内存申请接口,从系统堆空间申请N个缓存区,确保了缓存区 由接收方从系统堆空间中申请,第一处理器将N个缓存区的地址依次存放到N个区段中,便 于双方通过公用的共享内存进行数据通信,作为数据发送方的第二处理器将数据依次写入 L个区段对应的缓存区中,使得发送方通过共享内存把数据写入缓存区中,第一处理器依次 读取L个区段对应的缓存区的数据,并在获取数据后将缓存区更新为空缓存区,然后释放该 空缓存区,将第一处理器限定为释放空缓存区,可以防止第一处理器将尚未完成数据处理 的缓存区误释放掉。最终实现了同一终端的多处理器,在基于共享内存进行数据通信时,采 用接收方申请与释放缓存区的内存管理方式,实现了统一管理,大大降低了开发、管理和调 试的难度,增强了安全性和可移植性。缓存区从系统堆空间申请,直接使用操作系统的内存 申请和释放接口,无需额外划分独立的内存空间,也不需要根据硬件资源的变化而修改实 现。
本发明的第二实施方式涉及一种内存共享方法。第二实施方式在第一实施方式的 基础上进行了进一步改进,主要改进之处在于:在本发明第二实施方式中,在将L个区段对 应的缓存区更新为空缓存区之前,进一步判断是否已经完成对该L个区段对应的缓存区的 数据进行的数据处理,优化了处理流程,具体流程如图6所示。
在步骤601中,从系统堆空间申请缓存区。
在步骤602中,将缓存区的地址存放到相应区段。
在步骤603中,将数据写缓存区。
在步骤604中,读取缓存区的数据。
在步骤605中,是否完成数据的处理,当完成数据的处理时,执行步骤606,否则返 回步骤605。
具体地说,第一处理器判断读取的缓存区的数据是否已完成相应的数据处理,如 果已已完成相应的数据处理,则执行步骤606,释放缓存区,否则返回步骤605。
在步骤606中,释放缓存区。
本实施方式中,当第一处理器完成对L个区段对应的缓存区的数据的处理后,再将 该L个区段对应的缓存区更新为空缓存区,可以防止第一处理器将尚未完成数据处理的缓 存区更新为空缓存区,增强了第一处理器释放缓存区的安全性。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者 对某些步骤进行拆分,分解为多个步骤,只要包含相同的逻辑关系,都在本专利的保护范围 内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法 和流程的核心设计都在该专利的保护范围内。
本发明第三实施方式涉及一种基于多处理器的终端设备,如图7所示,包括:作为 数据接收方的第一处理器71和作为数据发送方的第二处理器72,第一处理器71具体包括: 申请模块710、存储模块711、读取模块712与释放模块713,释放模块713具体包括:更新子模 块7131与释放子模块7132。
申请模块710,用于在操作系统的启动过程中,根据操作系统的内存申请接口,从 系统堆空间申请N个缓存区,N为非零自然数。进一步地,申请模块710还用于,当第一处理器 读取模块712读取完数据后,根据操作系统的内存申请接口,从系统堆空间重新申请L个缓 存区,替换L个区段对应的缓存区。
存储模块711,用于将申请模块710申请的N个缓存区的地址,依次存放到N个区段 中,其中,该区段为共享内存按预设大小划分的区段。
读取模块712,用于依次读取L个区段对应的缓存区的数据。
释放模块713,用于释放L个区段对应的所述缓存区。
更新子模块7131,用于将L个区段对应的缓存区更新为空缓存区。
释放子模块7132,用于根据操作系统的内存释放接口,释放空缓存区。
第二处理器72,用于将数据依次写入L个区段对应的缓存区中。
不难发现,本实施方式为与第一实施方式相对应的系统实施例,本实施方式可与 第一实施方式互相配合实施。第一实施方式中提到的相关技术细节在本实施方式中依然有 效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在 第一实施方式中。
值得一提的是,本实施方式中所涉及到的各模块均为逻辑模块,在实际应用中,一 个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单 元的组合实现。此外,为了突出本发明的创新部分,本实施方式中并没有将与解决本发明所 提出的技术问题关系不太密切的单元引入,但这并不表明本实施方式中不存在其它的单 元。
本发明第四实施方式涉及一种基于多处理器的终端设备。第四实施方式在第三实 施方式的基础上进行了进一步改进,主要改进之处在于:在本发明第四实施方式中,包括: 作为数据接收方的第一处理器71和作为数据发送方的第二处理器72,其中,第一处理器71 具体包括:申请模块710、存储模块711、读取模块712、检测模块714与释放模块713,释放模 块713具体包括:更新子模块7131与释放子模块7132,如图8所示。
申请模块710,用于在操作系统的启动过程中,根据操作系统的内存申请接口,从 系统堆空间申请N个缓存区,N为非零自然数。进一步地,申请模块710还用于,当第一处理器 读取模块712读取完数据后,根据操作系统的内存申请接口,从系统堆空间重新申请L个缓 存区,替换L个区段对应的缓存区。
存储模块711,用于将申请模块710申请的N个缓存区的地址,依次存放到N个区段 中,其中,该区段为共享内存按预设大小划分的区段。
读取模块712,用于依次读取L个区段对应的缓存区的数据。
检测模块714,用于检测读取模块712读取的缓存区的数据是否已完成相应的数据 处理。
释放模块713,用于释放L个区段对应的所述缓存区。
更新子模块7131,用于将L个区段对应的缓存区更新为空缓存区。
释放子模块7132,用于根据操作系统的内存释放接口,释放空缓存区。
第二处理器72,用于将数据依次写入L个区段对应的缓存区中。
由于第二实施方式与本实施方式相互对应,因此本实施方式可与第二实施方式互 相配合实施。第二实施方式中提到的相关技术细节在本实施方式中依然有效,在第二实施 方式中所能达到的技术效果在本实施方式中也同样可以实现,为了减少重复,这里不再赘 述。相应地,本实施方式中提到的相关技术细节也可应用在第二实施方式中。
本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过 程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一 个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的 全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程 序代码的介质。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例, 而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
本文发布于:2023-04-15 04:12:05,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/87042.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |