CN116302617B - 共享内存的方法、通信方法、嵌入式***以及电子设备 - Google Patents
共享内存的方法、通信方法、嵌入式***以及电子设备 Download PDFInfo
- Publication number
- CN116302617B CN116302617B CN202310536667.2A CN202310536667A CN116302617B CN 116302617 B CN116302617 B CN 116302617B CN 202310536667 A CN202310536667 A CN 202310536667A CN 116302617 B CN116302617 B CN 116302617B
- Authority
- CN
- China
- Prior art keywords
- memory
- target
- processor
- storage area
- operating system
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 128
- 238000004891 communication Methods 0.000 title claims abstract description 54
- 238000013507 mapping Methods 0.000 claims description 117
- 238000013500 data storage Methods 0.000 claims description 61
- 238000007726 management method Methods 0.000 claims description 44
- 238000012545 processing Methods 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 21
- 230000008569 process Effects 0.000 description 20
- 238000010586 diagram Methods 0.000 description 16
- 230000004044 response Effects 0.000 description 11
- 230000005540 biological transmission Effects 0.000 description 8
- 230000000694 effects Effects 0.000 description 8
- 230000003993 interaction Effects 0.000 description 7
- 230000002093 peripheral effect Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 238000013468 resource allocation Methods 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000007613 environmental effect Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
申请实施例提供了一种共享内存的方法、通信方法、嵌入式***以及电子设备,其中,该方法包括:接收内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁。通过本申请,解决了多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***的问题。
Description
技术领域
本申请实施例涉及计算机领域,具体而言,涉及一种共享内存的方法、通信方法、嵌入式***以及电子设备。
背景技术
随着半导体行业的快速发展以及集成工艺的不断进步,在云计算、大数据、人工智能和工业互联网等领域选用的处理器逐渐由单核演变成多核,使用的操作***也逐渐由一个操作***演变成了多个操作***。
多核多操作***之间需要提供核间通信的方式来实现数据的同步和交互,同时保证通讯的实时性。
在相关技术中,核间通信进行共享内存的分配时存在着灵活性差、使用效率低的问题、同时算法的实现依赖操作***。
针对上述相关技术中多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种共享内存的方法、通信方法、嵌入式***以及电子设备,以至少解决相关技术中多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***的问题。
根据本申请的一个实施例,提供了一种共享内存的方法,包括:接收内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁。
在一个示例性实施例中,内存中包括元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储有映射表,映射表用于记录数据存储区的被占用状态,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间包括:从元数据存储区中读取映射表中的记录,并根据映射表中的记录判断数据存储区中是否存在目标内存空间。
在一个示例性实施例中,数据存储区由多个内存页构成,映射表中包含多条记录,每条记录用于记录一个内存页的被占用状态,从元数据存储区中读取映射表中的记录,并根据映射表中的记录判断数据存储区中是否存在目标内存空间包括:确定内存申请指令申请的内存页的预设数量;从映射表的初始位置依次扫描每条记录;在扫描到连续的预设数量的目标记录的情况下,确定内存中存在目标内存空间,其中,目标记录指示内存页处于空闲状态。
在一个示例性实施例中,在从映射表的初始位置依次扫描每条记录之后,该方法还包括:在扫描完毕映射表中的所有记录,且不存在连续的预设数量的目标记录的情况下,确定内存中不存在目标内存空间。
在一个示例性实施例中,通过计数器对扫描到的目标记录的数量进行记录,在从映射表的初始位置依次扫描每条记录的过程中,在当前扫描到目标记录的情况下,控制计数器加一,在当前扫描到非目标记录的情况下,控制计数器清零,其中,非目标记录指示内存页处于被占用状态。
在一个示例性实施例中,在初始位置为映射表中的最后一个位置的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端包括:确定连续的预设数量的目标记录中最后扫描到的目标记录,将最后扫描到的目标记录指示的内存页的首地址反馈至发送端。
在一个示例性实施例中,初始位置为映射表中的第一个位置,将目标内存空间的地址信息反馈给内存申请指令的发送端包括:确定连续的预设数量的目标记录中首个扫描到的目标记录,将首个扫描到的目标记录指示的内存页的首地址反馈至发送端。
在一个示例性实施例中,在从映射表的初始位置依次扫描每条记录的过程中,通过预设变量存储扫描到的连续的目标记录中的首个目标记录。
在一个示例性实施例中,在对处理器的内存执行加锁操作之前,该方法还包括:判断内存当前是否处于被加锁状态,其中,被加锁状态表征内存处于被申请使用的状态;在内存当前未处于被加锁状态的情况下,对内存执行加锁操作。
在一个示例性实施例中,在判断内存当前是否处于被加锁状态之后,该方法还包括:在内存当前处于被加锁状态的情况下,确定对内存的加锁失败;在对内存的加锁失败的情况下,在预设时长后再次申请对处理器的内存进行加锁,直至对内存加锁成功,或者,直至申请加锁的次数大于预设次数。
在一个示例性实施例中,在读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间之后,该方法还包括:在内存中不存在空闲的目标内存空间的情况下,释放对内存的加锁。
在一个示例性实施例中,内存中包括元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储有内存管理信息,判断内存当前是否处于被加锁状态包括:读取元数据存储区存储的内存管理信息,判断内存管理信息是否包含预设信息,其中,预设信息表征内存处于被加锁状态;在内存管理信息包含预设信息的情况下,确定内存当前未处于被加锁状态;在内存管理信息不包含预设信息的情况下,确定内存当前处于被加锁状态。
在一个示例性实施例中,内存管理信息包括第一字段信息和第二字段信息,第一字段信息用于描述内存是否处于被加锁状态,第二字段用于描述内存是否初始化完成,在接收内存申请指令之前,该方法还包括:初始化数据存储区存储的第一字段信息和第二字段信息。
在一个示例性实施例中,更新内存的被占用状态包括:将映射表中记录的目标内存空间对应的内存页的状态变更为被占用状态。
根据本申请的另一个实施例,提供了一种通信方法,包括:接收第一操作***的内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至第一操作***,更新内存的被占用状态,并释放对内存的加锁;响应第一操作***的存储操作,将目标数据存储至目标内存空间,并将目标内存空间的地址信息发送至第二操作***;接收第二操作***基于地址信息发送的获取指令,将目标内存空间存储的目标数据发送至第二操作***。
在一个示例性实施例中,在第一操作***使用物理地址作进行数据读写操作,第二操作***使用虚拟地址作进行数据读写操作的情况下,第二操作***将目标内存空间的地址信息转换为虚拟地址,并采用虚拟地址访问内存,从目标内存空间读取目标数据。
在一个示例性实施例中,内存中包括元数据存储区和数据存储区,数据存储区由多个内存页构成,每条内存页用于存储业务数据,元数据存储区存储有映射表,映射表中包含多条记录,每条记录用于记录一个内存页的被占用状态,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间包括:确定内存申请指令申请的内存页的预设数量;从映射表的初始位置依次扫描每条记录;在扫描到连续的预设数量的目标记录的情况下,确定内存中存在目标内存空间,其中,目标记录指示内存页处于空闲状态。
在一个示例性实施例中,在初始位置为映射表中的最后一个位置的情况下,将目标内存空间的地址信息反馈至第一操作***包括:确定连续的预设数量的目标记录中最后扫描到的目标记录,将最后扫描到的目标记录指示的内存页的首地址反馈至第一操作***。
根据本申请的另一个实施例,提供了一种嵌入式***,包括:芯片,其中,芯片包括处理器,处理器的内存中设置有元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储用于记录数据存储区的被占用状态以及被加锁状态;多个操作***,运行在处理器上,通过上述共享内存的方法使用处理器的内存。
在一个示例性实施例中,数据存储区由多个内存页构成,内存页用于存储业务数据,元数据存储区存储有映射表和内存管理信息,映射表中有多条记录,每条记录用于记录一个内存页的被占用状态,管理信息用于描述内存是否处于被加锁状态。
根据本申请的另一个实施例,提供了一种共享内存的装置,包括:第一接收单元,用于接收内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;第一读取单元,用于在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;第一反馈单元,用于在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁。
根据本申请的另一个实施例,提供了一种通信装置,包括:第二接收单元,用于接收第一操作***的内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;第二读取单元,用于在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;第二反馈单元,用于在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至第一操作***,更新内存的被占用状态,并释放对内存的加锁;响应单元,用于响应第一操作***的存储操作,将目标数据存储至目标内存空间,并将目标内存空间的地址信息发送至第二操作***;第三接收单元,用于接收第二操作***基于地址信息发送的获取指令,将目标内存空间存储的目标数据发送至第二操作***。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,其中,计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种芯片,其中,芯片包括可编程逻辑电路以及可执行指令中的至少之一,芯片在电子设备中运行,用于实现上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种BMC芯片,其中,包括:存储单元以及与存储单元连接的处理单元,存储单元用于存储程序,处理单元用于运行程序,以执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种主板,其中,包括:至少一个处理器;至少一个存储器,用于存储至少一个程序;当至少一个程序被至少一个处理器执行,使得至少一个处理器实现上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种服务器,其中,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一项方法实施例中的步骤。
通过本申请,操作***在需要使用处理器的内存时申请对内存进行加锁,并在加锁成功后读取内存的被占用状态,根据内存的被占用状态动态确定使用所需的目标内存空间,在使用完成后释放掉,因此,可以解决多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***的问题,达到提高共享内存灵活性以及使用效率,并降低对操作***的依赖的效果。
附图说明
图1是本申请实施例的一种移动终端的硬件结构框图;
图2是根据本申请实施例的嵌入式***的示意图;
图3是根据本申请实施例的可选的嵌入式***的示意图一;
图4是根据本申请实施例的可选的嵌入式***的示意图二;
图5是根据本申请实施例的共享内存的方法的流程图;
图6是根据本申请实施例的共享内存的方法中映射表和内存页的关系示意图;
图7是根据本申请实施例的通信方法的流程图;
图8是根据本申请实施例的可选的共享内存的方法的示意图;
图9是根据本申请实施例的共享内存的装置的示意图;
图10是根据本申请实施例的通信装置的示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本申请实施例的一种移动终端的硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的共享内存的方法、通信方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种嵌入式***,可以运行于上述移动终端,图2是本实施例的嵌入式***的示意图,如图2所示,该嵌入式***可以包括:
芯片和至少两个操作***,其中,芯片包括处理器1102、硬件控制器1104、第一总线1106和第二总线1108,其中,第一总线1106的带宽高于第二总线1108带宽,且第一总线1106被配置为多主多从模式,第二总线1108被配置为一主多从模式;至少两个操作***基于处理器1102运行;至少两个操作***通过第一总线1106进行通信;至少两个操作***通过第二总线1108实现对硬件控制器的控制。
其中,上述芯片可以是BMC芯片;上述处理器可以是多核处理器,上述硬件控制器可以用于控制连接到对应的对外接口的外部设备。
BMC芯片通过第一总线与第二总线实现片内ARM核、存储单元及控制器硬件资源间的互连。ARM核心与各控制器通过第二总线互连,实现核心与各控制器间的交互。同时,ARM核心间连接至第一总线(比如:可以通过AXI(Advanced eXtensible Interface,高级可扩展接口)桥(Bridge)连接),核心间的通信通过第一总线实现。
上述第一总线被配置为多主多从模式,其可以是处理器的多个处理器内核之间进行通信所使用的总线,例如,AHB(Advanced High Performance Bus,高级高性能总线),上述第二总线被配置为一主多从模式,其可以是处理器对硬件控制器之间控制所使用的总线,例如,APB(Advanced Peripheral Bus,***总线),第一总线的带宽高于第二总线带宽。
在一个示例性实施例中,AHB被配置为多主(master)多从(slave)模式,Master会首先向仲裁发送发文请求,仲裁决定合适让master获取总线访问的权限,master获取权限之后会将数据与控制信号发送到仲裁器,仲裁器通过地址解析判断对应的slave通路,然后将请求发送到对应的目的端。同样响应的数据会通过Decoder解析,然后返回给对应的master。通过这种多路复用的机制实现多对多的访问。
在一个示例性实施例中,APB被配置为一主多从模式,APB挂在AHB总线***下,通过AHB-APB Bridge将事务在AHB总线***之间进行转化,此时Bridgre即为APB的master,其他的***设备均为slave。数据请求只能由Master发向slave,slave收到请求后返回相应的响应数据给master,此过程可以实现一对多的访问,且访问不涉及AHB总线中的仲裁和Decoder解析操作。
嵌入式***可以包括至少两个操作***,至少两个操作***基于处理器运行,而处理器的处理资源被动态分配给至少两个操作***,处理器的处理资源包括处理器核心,至少两个操作***通过第一总线进行通信,至少两个操作***通过第二总线实现对硬件控制器的控制。
第一操作***可以是具有明确固定的时间约束的操作***,所有处理过程(任务调度)需要在固定的时间约束内完成,否则***会出错,其可以是实时操作***(Real TimeOperating System,简称RTOS),例如,FreeRTOS、RTLinux等,还可以是其他嵌入式***中的实时操作***。第二操作***不具备该特征,第二操作***一般采用公平任务调度算法,线程/进程数量增加时,就需要分享CPU时间,任务调试具有不确定性,可称为非实时操作***,例如,contiki、HeliOS、Linux(全称GNU/Linux,是一套可自由传播的类Unix操作***)等,还可以是其他嵌入式***中的非实时操作***,其中,Linux***是一个基于POSIX(Portable Operating System Interface,可移植操作***接口)的多用户、多任务、支持多线程和多CPU的操作***。
在一个示例性实施例中,硬件控制器可以包括一种或多种,可以包括但不限于以下至少之一的芯片外设对应的控制器:I2C,USB(Universal Serial Bus,通用串行总线),UART,ADC(Analog to Digital Converter,模拟数字转换器),JTAG(Joint Test ActionGroup,联合测试工作组),RTC(Real_Time Clock,实时时钟),GPIO(General PurposeInput/Output,通用输入输出),WDT(Watch Dog Timer,看门狗),虚拟UART(VirtualUART),超级I/O(Super I/O),SGPIO(Serial General Purpose Input/Output,串行通用输入输出),PWM(Pulse Width Modulation,脉冲宽度调制),FanTach(风扇调速),Timer(时钟),PECI(Platform Environment Control Interface,平台环境式控制接口),邮箱(MailBox),还可以包括其他类型的控制器。对外接口可以包括一种或多种,可以包括但不限于与上述任一控制器对应的对外接口。
通过上述嵌入式***,第一操作***和第二操作***基于处理器运行,并通过不同功能的总线实现操作***间的通信和硬件控制器的控制。由于第一操作***和第二操作***均是基于同一个处理器运行,避免了硬件器件的增加和部署,降低了***成本,并且合理利用处理器资源支持***之间的运行,因此,可以解决操作***的运行效率较低的技术问题,达到了提高操作***的运行效率的技术效果。
根据本申请实施例的另一个方面,还提供了一种嵌入式***,上述嵌入式***可以运行于上述BMC芯片上,图3是本实施例的可选的嵌入式***的示意图一,如图3所示,上述嵌入式***可以包括:
第一操作***和第二操作***,第一操作***和第二操作***运行于处理器上,第一操作***的响应速度高于第二操作***;
业务管理模块,用于根据资源动态分配规则将一组待分配业务分配给对应的操作***,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率;
资源动态分配模块,用于确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;
资源自适应调度模块,用于根据与每个待分配业务对应的操作***以及资源分配结果,将处理器的处理资源分配给第一操作***和第二操作***。
在本实施例中,第一操作***和第二操作***可以与前述实施例中类似,在此不做赘述,业务管理模块、资源动态分配模块和资源自适应调度模块可以是运行在第一操作***或者第二操作***下的软件模组,通过进行上述模块划分,可以方便进行不同功能模块的开发与维护,同时,对于资源动态分配规则,通过对资源动态分配规则进行灵活设置,提高资源分配的灵活性。
通过上述嵌入式***,该嵌入式***包括:第一操作***和第二操作***,第一操作***和第二操作***运行于处理器上,第一操作***的响应速度高于第二操作***;业务管理模块,用于根据资源动态分配规则将一组待分配业务分配给对应的操作***,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率;资源动态分配模块,用于确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;资源自适应调度模块,用于根据与每个待分配业务对应的操作***以及资源分配结果,将处理器的处理资源分配给第一操作***和第二操作***,解决了相关技术中存在由于多核处理器多数的处理资源处于空闲状态导致的核心资源的整体利用率较低的问题,提高了处理资源的利用率。
需要说明的是,嵌入式***运行的过程中,可以先启动操作***,然后不同的操作***进行业务数据的交互。
在一个示例性实施例中,在操作***包括第一操作***和第二操作***的情况下,可以但不限于采用以下方式启动第一操作***和第二操作***:引导所述第一操作***启动;引导所述第二操作***启动。
可选地,在本实施例中,第一操作***和第二操作***可以但不限于先后启动,第一操作***可以但不限于比第二操作***启动更快,第一操作***也可以但不限于比第二操作***启动所需的条件更简单,在第一操作***先启动后可以运行能够满足第二操作***启动所需的条件,或者能够加快第二操作***启动的业务,从而使得多***能够更加高效快速地启动并运行业务。
比如:引导第一操作***启动后可以由第一操作***运行能够控制芯片环境参数达到第二操作***启动要求的业务(比如:风扇运行,参数控制等业务),使得芯片环境参数迅速达成第二操作***启动运行的环境,提高操作***的启动效率和运行效率。
可选地,在本实施例中,第一操作***可以但不限于由第一操作***的引导程序引导启动,第二操作***可以但不限于由第二操作***的引导程序引导启动。或者,二者可以由同一个引导程序先后引导启动。
在一个示例性实施例中,可以但不限于采用以下方式引导所述第一操作***启动:所述芯片启动上电,通过所述处理器唤醒所述处理器中为所述第一操作***分配的第一处理器核心;通过所述第一处理器核心执行所述第一操作***的引导程序引导所述第一操作***启动。
在一个示例性实施例中,交互的过程可以但不限于采用存储空间和中断请求配合传输的方式来实现,操作***之间通过存储空间来传递数据,通过中断请求来进行相互之间指令的通知。比如:获取第一操作***基于处理器运行的过程中产生的业务数据;将业务数据存储至处理器上的存储空间;向第二操作***发送中断请求,其中,中断请求用于请求第二操作***从存储空间读取业务数据,第二操作***用于响应中断请求从存储空间读取业务数据。
可选地,在本实施例中,第一操作***基于处理器运行的过程中产生的业务数据被存储在处理器上的存储空间中,通过中断请求通知第二操作***,由第二操作***从存储空间中读取出业务数据,从而实现业务数据的交互。
可选地,在本实施例中,操作***之间交互的业务数据可以但不限于是操作***运行操作业务过程中任何需要在***间进行传输的数据。比如:业务的过程数据,业务的结果数据等等。
可选地,在本实施例中,处理器上的存储空间中可以但不限于为操作***之间的交互过程配置专用的存储位置,可以称为共享内存。第一操作***所对应的共享内存的信息(比如:存储地址)可以携带在用于请求第二操作***从存储空间读取业务数据的中断请求中,第二操作***响应中断请求到其指示的共享内存上读取业务数据。
在本实施例中,各个中断请求可以但不限于通过软件协议的方式在***间进行传输,或者也可以通过硬件模块进行传递。以硬件模块mailbox的形式传输中断请求为例,第一操作***和第二操作***之间可以建立mailbox通道,业务数据通过存储空间读写,中断请求通过mailbox通道传输。
第一操作***在运行过程中产生业务数据并判定该业务数据是第二操作***需要的或者是需要发送给第二操作***的。此时,第一操作***将业务数据存储至存储空间中,并向第二操作***发送中断请求,第二操作***响应该中断请求从存储空间中读取业务数据,并进行后续的处理。
在本实施例中提供了一种可选的嵌入式***,图4是根据本申请实施例的可选的嵌入式***的示意图二,如图4所示,***包括:
芯片,其中,芯片包括处理器401,处理器401的内存中设置有元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储用于记录数据存储区的被占用状态以及被加锁状态。
在本申请实施例提供的嵌入式***中,数据存储区由多个内存页构成,内存页用于存储业务数据,元数据存储区存储有映射表和内存管理信息,映射表中有多条记录,每条记录用于记录一个内存页的被占用状态,管理信息用于描述内存是否处于被加锁状态。
多个操作***402,运行在处理器401上,通过共享内存的方法使用处理器401的内存。
具体地,处理器401中搭载了多个操作***402,操作***402可以包括实时操作***和非实时操作***当多个操作***402为完成某些功能需要协同的处理任务时,需要通过核间通信实现,而核间通信则需要占用处理器401中的内存空间,处理器401向操作***402提供内存空间。
具体的,由于在多个操作***402进行核间通信时,需要利用数据进行传递,进而需要利用处理器401中的内存空间进行存储数据和数据获取的操作,在进行核间通信时,用于发送数据的操作***先读取内存中元数据存储区的内存管理信息,当内存管理信息指示内存为被加锁的情况下,对内存执行加锁操作,并更新内存管理信息。在一个示例性实施例中,在对处理器401的元数据存储区的映射表进行扫描,若存在多个连续空闲内存页的情况下,操作***402向该连续空闲内存页中存入待发送的数据,更新映射表中该连续空闲内存页的记录,将相应的内存页的状态更新为被占用状态,并释放加锁。
需要说明的是,申请内存的时候,加锁的过程是不能是被打断的,如果是同一***有多个任务同时申请加锁的时候,高优先级的任务会优先获得申请内存的权利,如果是不同***不同任务之间同时申请加锁,按照先后顺序获得申请内存的权利。
通过上述嵌入式***,该嵌入式***包括:芯片,其中,芯片包括处理器401,处理器401的内存中设置有元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储用于记录数据存储区的被占用状态以及被加锁状态;多个操作***402,运行在处理器401上,通过共享内存的方法使用处理器401的内存,解决多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***402的问题,达到提高共享内存灵活性以及使用效率,并降低对操作***402的依赖的效果。
在本实施例中提供了一种运行于嵌入式***的共享内存的方法,图5是根据本申请实施例的共享内存的方法的流程图,如图5所示,该方法包括如下步骤:
步骤S501,接收内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存。
具体地,内存申请指令是运行在处理器上的操作***发出的申请使用处理器的内存的指令,需要说明的是,为防止多个操作***同时申请使用处理器的内存时导致申请冲突,因此,在操作***发送内存申请指令时,先对处理器的内存执行加锁操作,当加锁成功后才可以申请使用内存,加锁操作是指内存申请的排他操作,在当前操作***加锁成功之后,若没有释放加锁,其他服务器没有申请使用处理器内存的权限。
在本申请实施例提供的共享内存的方法中,在对处理器的内存执行加锁操作之前,该方法还包括:判断内存当前是否处于被加锁状态,其中,被加锁状态表征内存处于被申请使用的状态;在内存当前未处于被加锁状态的情况下,对内存执行加锁操作。
具体的,由于多个***或多个任务在同时申请使用内存时会导致申请冲突,处理器的内存在同一时间段内只能被一个***或任务进行加锁,因此,在检测到当前内存未处于被加锁状态的情况下,当前操作***才能对内存执行加锁操作。
具体的,通过判断内存中存储的预设变量是否为预设值来判断内存是否处于被加锁状态,若预设变量不为预设参值数,则表明内存未处于被加锁状态,没有其他***或任务在申请内存空间,则加锁成功;反之,预设变量为预设参数,则表明在当前时刻内存处于被加锁状态,存在除该操作***之外的其他***或任务在申请内存空间,则加锁失败。
在本申请实施例提供的共享内存的方法中,在判断内存当前是否处于被加锁状态之后,该方法还包括:在内存当前处于被加锁状态的情况下,确定对内存的加锁失败;在对内存的加锁失败的情况下,在预设时长后再次申请对处理器的内存进行加锁,直至对内存加锁成功,或者,直至申请加锁的次数大于预设次数。
具体的,若对内存进行加锁操作时存在加锁失败的情况下,通过预设时长的等待后再次申请内存的加锁,直至加锁成功,例如,预设时长可以为100微秒。
在一个示例性实施例中,若申请加锁失败,并且重复申请的次数超出了预设次数,表明当前时长中处理器中的内存处于不可分配状态,则停止申请操作。例如,预设次数可以为3次,在申请加锁的次数大于3次的情况下,可以向发送申请的操作***返回当前内存不可用的消息。
步骤S502,在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小。
在申请加锁成功后,操作***对处理器中的内存进行申请,具体的,扫描用于记录内存被占用状态的信息,判断是否存在目标内存空间,也即,判断处理器中是否存在处于未被占用状态的、连续的可以满足内存使用需求的内存空间,满足内存使用需求是指内存空间的大小大于等于操作***申请的内存大小。
需要说明的是,申请内存的时候还可以使用不连续的内存空间,可以在非一个最小内存块后的后面增加一个指针,指向下一个申请获得的最小内存块,同时,在数据读写的时候,根据存储地址和指针实现数据跨数据块的数据读写。本实施例不限定目标内存空间的形式。
步骤S503,在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁。
发送端是指发送内存申请指令的操作***,需要说明的是,由于操作***在核间通信时,通过使用共享内存发送和接收数据,并在收发数据的过程中使用申请的内存返回的地址进行数据的存取,因此需要确定已申请的内存空间的地址信息。
具体的,在处理器的内存空间中存在可供操作***使用的目标内存空间后,将该目标连续空间的地址信息发送给该操作***,操作***根据地址信息将需要传输的数据存储到相应的内存空间中。
在一个示例性实施例中,根据操作***的数据写入情况更新处理器的内存空间的占用状态,也即,将目标内存空间由未占用状态变为被占用状态,并释放在动态申请内存之前的加锁操作,以使其他操作***可以申请使用处理器的内存空间。
通过上述步骤:接收内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁,解决了多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***的问题,达到提高共享内存灵活性以及使用效率,并降低对操作***的依赖的效果。
在本申请实施例提供的共享内存的方法中,内存中包括元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储有映射表,映射表用于记录数据存储区的被占用状态,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间包括:从元数据存储区中读取映射表中的记录,并根据映射表中的记录判断数据存储区中是否存在目标内存空间。
通过查询映射表中的记录的方式查询内存的被占用状态,具体的,获取处理器中存储的元数据存储区,并识别元数据存储区中的映射表,通过遍历映射表中的记录,读取数据存储区的被占用状态,判断数据存储区中是否存在连续的、处于空闲状态的、满足内存使用需求的内存空间。
在本申请实施例提供的共享内存的方法中,数据存储区由多个内存页构成,映射表中包含多条记录,每条记录用于记录一个内存页的被占用状态,从元数据存储区中读取映射表中的记录,并根据映射表中的记录判断数据存储区中是否存在目标内存空间包括:确定内存申请指令申请的内存页的预设数量;从映射表的初始位置依次扫描每条记录;在扫描到连续的预设数量的目标记录的情况下,确定内存中存在目标内存空间,其中,目标记录指示内存页处于空闲状态。
需要说明的是,数据存储区按照相同的内存大小划分为多个分配单元,将每一个分配单元记作一个内存页,例如,数据存储区的内存空间为A字节,划分的分配单元为B字节,则该数据存储区共包含A/B个内存页,映射表中的记录也即内存页记录,每条内存页记录用于记录一个内存页的被占用状态,映射表中的内存页记录和数据存储区中的内存页的数量相同。
图6是根据本申请实施例的共享内存的方法中映射表和内存页的关系示意图,如图6所示,数据存储区即为动态分配内存块区,元数据存储区包括动态分配内存映射表区,其中,映射表区按照数据存储区划分内存页的数量划分相同数量的记录,并将该记录记作内存页记录,并将所有内存页记录组合为映射表,映射表中所有内存页记录与数据存储区的所有内存页存在一一对应关系,每一内存页记录中表示对应的内存页的分配状态,也即内存页是否被占用。
具体的,由于操作***进行协同的业务数据需要占用处理器中连续的内存页,因此,首先需要确定内存申请指令中的内存页的预设数量,由于每一内存页的内存空间相同,因此可以通过所需内存的空间大小计算出需要的连续内存页的预设数量,记作numb。
在一个示例性实施例中,在获取到处理器的元数据存储区中的映射表后,从映射表中的索引位置遍历内存页记录,索引位置可以为映射表的起始位置,从映射表的起始位置开始,依次查询映射表的每条内存页记录,确定是否存在连续的记录空闲内存页的大于等于numb的内存页记录,在存在符合上述条件的内存页记录的情况下,通过内存页记录与内存页的对应关系,确定处理器中存在目标内存空间。
在本申请实施例提供的共享内存的方法中,在从映射表的初始位置依次扫描每条记录之后,该方法还包括:在扫描完毕映射表中的所有记录,且不存在连续的预设数量的目标记录的情况下,确定内存中不存在目标内存空间。
具体地,从映射表的起始位置开始,查询映射表的内存页记录确定是否存在连续、并且内存页数量大于等于numb的空间,若扫描完毕整个映射表后仍未发现存在连续的、预设数量的空闲内存页,则表明不存在目标内存空间。
在本申请实施例提供的共享内存的方法中,通过计数器对扫描到的目标记录的数量进行记录,在从映射表的初始位置依次扫描每条记录的过程中,在当前扫描到目标记录的情况下,控制计数器加一,在当前扫描到非目标记录的情况下,控制计数器清零,其中,非目标记录指示内存页处于被占用状态。
具体地,通过利用计数器的数值与所需内存页数量的大小关系判断是否存在连续的预设数量的目标记录,也即是否存在目标内存空间,具体的,将计数器的计数记作cntr,若扫描到的一页内存页为空,则将cntr进行加1操作,若扫描到的内存页不为空,则将累加的连续、空闲状态的内存页的数量cntr清零,继续从该内存页后一个地址处开始寻找连续的空的内存页;直到cntr等于numb,表示已找到了满足内存需求的连续、处于空闲状态的内存页;如果在扫描完整个映射表的过程,cntr小于numb,则表明本次动态申请内存失败,不存在目标内存空间。
在本申请实施例提供的共享内存的方法中,在初始位置为映射表中的最后一个位置的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端包括:确定连续的预设数量的目标记录中最后扫描到的目标记录,将最后扫描到的目标记录指示的内存页的首地址反馈至发送端。
具体的,当对映射表进行扫描时,扫描方式可以选择从映射表的第一个位置扫描或者从映射表的最后一个位置开始扫描,当扫描方式为从映射表的最后一个位置扫描时,在计数器显示的数值cntr大于等于预设数量numb时,将扫描到的最后一个内存页记录对应的内存页的首地址,并再内存页记录中将这些内存页的状态置为非空,将首地址作为本次内存申请指令的整个连续内存页的首地址。
在一个示例性实施例中,将该地址反馈至发出内存申请指令的操作***,由操作***根据地址信息对内存进行数据写入操作。
在本申请实施例提供的共享内存的方法中,初始位置为映射表中的第一个位置,将目标内存空间的地址信息反馈给内存申请指令的发送端包括:确定连续的预设数量的目标记录中首个扫描到的目标记录,将首个扫描到的目标记录指示的内存页的首地址反馈至发送端。
具体的,当扫描方式为从映射表的第一个位置扫描时,在计数器显示的数值cntr大于等于预设数量numb的情况下,将扫描到的第一个内存页记录的地址作为首地址,将其发送到发出内存申请指令的操作***中,由操作***根据地址信息对内存进行数据写入操作。
在本申请实施例提供的共享内存的方法中,在从映射表的初始位置依次扫描每条记录的过程中,通过预设变量存储扫描到的连续的目标记录中的首个目标记录。
具体的,预设变量是指映射表中用于存储初始位置的地址信息的变量,并将其记作offset,每扫描到一个空闲、连续的内存页时,计数器显示的数值cntr进行加1操作,在计数器显示的数值cntr大于等于预设数量numb的情况下,将offset当前存储的地址信息作为首个目标记录的地址。
在本申请实施例提供的共享内存的方法中,在读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间之后,该方法还包括:在内存中不存在空闲的目标内存空间的情况下,释放对内存的加锁。
具体的,在对映射表中的内存页记录进行扫描后。检测到不包含预设数量的、连续、空闲的内存页,也即不包含目标内存空间时,表明处理器的内存中没有足够的空间内存页供该操作***使用,本次动态申请内存失败,释放对内存的加锁。
在本申请实施例提供的共享内存的方法中,内存中包括元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储有内存管理信息,判断内存当前是否处于被加锁状态包括:读取元数据存储区存储的内存管理信息,判断内存管理信息是否包含预设信息,其中,预设信息表征内存处于被加锁状态;在内存管理信息包含预设信息的情况下,确定内存当前未处于被加锁状态;在内存管理信息不包含预设信息的情况下,确定内存当前处于被加锁状态。
对于判断处理器的内存是否处于被加锁状态,需要利用元数据存储区中的内存管理信息进行判断,具体的,在获取到元数据存储区的内存管理信息时,利用根据判断内存管理信息中是否包含预设信息,其中,预设信息是用于表征内存是否处于被加锁状态;若内存管理信息中未包含预设信息,则表明当前内存处于未被加锁状态,反之则处于被加锁状态。
在本申请实施例提供的共享内存的方法中,内存管理信息包括第一字段信息和第二字段信息,第一字段信息用于描述内存是否处于被加锁状态,第二字段用于描述内存是否初始化完成,在接收内存申请指令之前,该方法还包括:初始化数据存储区存储的第一字段信息和第二字段信息。
在嵌入式***运行之前,需要将处理器中的元数据存储区以及数据存储区进行初始化操作,具体的,将元数据存储区中的映射表存储的内存页记录进行初始化,并将内存管理信息进行初始化操作。
具体的,内存管理信息由第一字段信息以及第二字段信息组成,也即,第一字段信息表征是否被加锁,第二字段信息用于表征是否初始化完成,在进行申请内存操作前,对内存管理信息进行如下配置:
typedef struct {
uint32_t MemReady;
uint32_t MemLock;
}MallocMemInfo_T;
其中,结构体MallocMemInfo_T的成员变量MemLock(第二字段信息)表示共享内存是否已初始化完成,结构体MallocMemInfo_T的成员变量MemReady(第一字段信息)表征是否被加锁,其中,变量 MemLock为0,表示此时没有***或任务在申请内存,也即未被加锁,MemLock为0xA5A5A5A5表示有***或任务正在申请内存,其他***或者任务等此次申请完成后再申请;变量MemReady为0xA5A5A5A5,表示初始化操作已完成,可以正常动态申请和释放内存。
在本申请实施例提供的共享内存的方法中,更新内存的被占用状态包括:将映射表中记录的目标内存空间对应的内存页的状态变更为被占用状态。
具体的,在操作***需要占用目标内存空间的情况下,通过识别目标内存空间的多个内存页的地址信息,按照内存页与内存页记录的对应关系,更新元数据存储区的映射表区的内存页记录,使其由未占用状态变为被占用状态。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在本实施例中还提供了一种通信方法,图7是根据本申请实施例的可选的通信方法的流程图,如图7所示,该方法包括:
步骤S701,接收第一操作***的内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;
需要说明的是,为防止多个操作***同时申请处理器的内存空间时导致申请失败,因此,第一操作***发送内存申请指令时,向处理器内存申请加锁操作,当申请加锁成功后才可以申请内存。
具体的,通过判断内存中存储的预设变量是否为预设值来确定是否加锁成功,若预设变量不为预设参值数,则表明没有其他***或任务在申请内存空间,则加锁成功;反之,预设变量为预设参数,则表明在当前时刻,存在除该操作***之外的其他***或任务在申请内存空间,则加锁失败。
步骤S702,在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;
具体的,在申请加锁成功时,根据操作***发出的内存申请指令,扫描用于记录内存被占用状态的信息判断是否存在目标内存空间,也即,判断处理器中是否存在处于未被占用状态的、连续的内存空间,在一个示例性实施例中,判断处于未被占用状态的、连续的内存空间的大小是否大于等于操作***申请的内存大小,得到判断结果。
步骤S703,在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至第一操作***,更新内存的被占用状态,并释放对内存的加锁;
具体的,在判断结果指示处理器的内存空间中存在可供操作***使用的目标内存空间后,将该目标连续空间的地址信息发送给该操作***,操作***根据地址信息将需要传输的数据存储到相应的内存空间中。
进一步的,根据操作***的数据写入情况更新处理器的内存空间的占用状态,也即将目标内存空间由未占用状态变为被占用状态,并释放在动态申请内存之前的加锁操作。
步骤S704,响应第一操作***的存储操作,将目标数据存储至目标内存空间,并将目标内存空间的地址信息发送至第二操作***;
具体的,在申请内存成功后,第一操作***将需要传递的目标数据存储值申请的目标内存空间,并向与第一操作***协同的第二操作***发送该目标内存空间的地址信息,通知第二操作***进行数据获取。
步骤S705,接收第二操作***基于地址信息发送的获取指令,将目标内存空间存储的目标数据发送至第二操作***。
具体的,在第二操作***接收到目标内存空间的地址信息后,发出数据的获取指令,嵌入式***接收该指令并将存储在目标内存空间的目标数据发送到第二操作***中。
通过上述步骤:接收第一操作***的内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁;响应第一操作***的存储操作,将目标数据存储至目标内存空间,并将目标内存空间的地址信息发送至第二操作***;接收第二操作***基于地址信息发送的获取指令,将目标内存空间存储的目标数据发送至第二操作***,解决了多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***的问题,达到提高共享内存灵活性以及使用效率,并降低对操作***的依赖的效果。
在一个示例性实施例中,在第一操作***使用物理地址作进行数据读写操作,第二操作***使用虚拟地址作进行数据读写操作的情况下,第二操作***将目标内存空间的地址信息转换为虚拟地址,并采用虚拟地址访问内存,从目标内存空间读取目标数据。
由于在核间通信使用共享内存发送和接收数据时,会使用动态申请内存返回的地址,但是不同的***使用地址***可能不同,例如,实时操作***为第一操作***,非实时操作***为第二操作***,实时操作***中访问共享内存可以直接使用物理地址,非实时操作***中不能直接使用物理地址访问共享内存,则需要使用映射后的虚拟地址,在第二操作***接收到目标内存空间的地址信息后,通过地址信息offset进行转换,将其映射为虚拟地址,并根据虚拟地址进行操作。具体地,非实时操作***下的共享内存虚拟基地址vBase(共享内存真实物理地址假设为0x96000000);实时操作***下共享内存物理基地址pBase(即0x96000000)。
非实时操作***中动态申请的内存返回的地址也是虚拟地址vData,非实时操作***中,Offset = vData – vBase;数据发送从非实时操作***中发送到实时操作***中,实时操作***使用地址pData访问动态申请的共享内存pData = pBase + Offset。
实时操作***中动态申请的内存返回的地址是物理地址pData,实时操作***中Offset = pData– pBase;数据发送从实时操作***中发送到非实时操作***中,非实时操作***使用地址vData访问动态申请的共享内存vData= vBase + Offset。
在一个示例性实施例中,内存中包括元数据存储区和数据存储区,数据存储区由多个内存页构成,每条内存页用于存储业务数据,元数据存储区存储有映射表,映射表中包含多条记录,每条记录用于记录一个内存页的被占用状态,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间包括:确定内存申请指令申请的内存页的预设数量;从映射表的初始位置依次扫描每条记录;在扫描到连续的预设数量的目标记录的情况下,确定内存中存在目标内存空间,其中,目标记录指示内存页处于空闲状态。
具体的,获取处理器中存储的元数据存储区,并识别元数据存储区中的映射表,从映射表中的索引位置开始遍历每一条内存页记录,依次查询映射表的每条内存页记录,确定是否存在连续的记录空闲内存页的大于等于预设数量的内存页记录,在存在符合上述条件的内存页记录的情况下,通过内存页记录与内存页的对应关系,确定处理器中存在目标内存空间,通过内存页记录与内存页的对应关系,确定处理器中存在目标内存空间。
在一个示例性实施例中,在初始位置为映射表中的最后一个位置的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端包括:确定连续的预设数量的目标记录中最后扫描到的目标记录,将最后扫描到的目标记录指示的内存页的首地址反馈至发送端。
具体的,当对映射表进行扫描时,扫描方式可以选择从映射表的第一个位置扫描或者从映射表的最后一个位置开始扫描,当扫描方式为从映射表的最后一个位置扫描时,将扫描到的最后一个内存页记录对应的内存页的首地址,并将这些内存页置为非空,将首地址作为本次内存申请指令的整个连续内存页的首地址。在一个示例性实施例中,将该地址反馈至发出内存申请指令的操作***,由操作***根据地址信息对内存进行数据写入操作。
在本实施例中还提供了一种共享内存的方法,图8是根据本申请实施例的可选的共享内存的方法的示意图,如图8所示,该方法包括:
在操作***发出内存申请指令前,为防止多个操作***同时申请处理器的内存空间时导致申请冲突,需要申请加锁操作,并判断是否加锁成功;在判断结果表示动态申请内存加锁成功的情况下,根据发出的内存申请指令中内存大小计算需要分配的连续内存页的页数,并记作nmemb;若判断结果表示申请加锁失败的情况下,在等待一段时间(可以为100微秒)后重新发出申请,直至申请成功,若申请加锁失败的次数大于预设次数(预设次数可以为三次)的情况下,则退出内存申请。
在一个示例性实施例中,在申请加锁成功后,对处理器的元数据存储区进行初始化操作,并将映射表的最后位置记作offset,并根据申请内存指令中的所需内存的空间大小计算出需要的连续内存页的数量,并将内存页数量记作nmemb,并设置用记录内存页数量的计数器,记作cmemb,然后获取处理器中的元数据存储区的映射表,并从映射表的offset位置开始扫描整个映射表,通过映射表中存储的内存页记录与数据存储区中内存页的对应关系,寻找连续的空的内存页,如果扫描的当前的内存页处于被占用状态,则将offset=offset-cmemb,然后把计数器中累加的连续的空的内存页的数据cmemb清零,继续从新的offset位置重新开始寻找连续的空的内存页;若扫描的内存页为空,也即处于空闲状态时,将计数器的数值cmemb加1,并offset=offset-1,继续判断下一个内存页,直到cmemb等于nmemb,也即计数器数据与所需内存的空间大小相等时,表示扫描到满足要求的连续内存页。
在一个示例性实施例中,将符合要求的内存页在对应的映射表中标记为被占用状态,将最后一个找到的内存页的首地址作为动态申请的整个连续的内存页的首地址,释放动态申请内存的锁,本次动态申请内存成功。
若在扫描整个映射表的过程中,offset的值小于0,则表明没有符合要求的内存页供操作***使用,释放动态申请内存的锁,本次动态申请内存失败。
此外,动态申请了空间之后发现空间不够用时还可以动态调整大小,具体,可以再次发出更新后的内存申请指令,并对内存执行加锁操作,在加锁成功的情况下,若更新后的内存申请指令需要申请的内存空间增大,判断已申请的目标连续内存之后是否存在所需的内存空间,在存在的情况下,申请成功,若更新后的内存申请指令需要申请的内存空间减小,则释放部分内存空间。
本实施例通过划分多个存储区,利用索引位置根据实际需要的空间大小动态申请,使用完成后释放掉,并且动态申请了空间之后发现空间不够用时还可以动态调整大小,可以达到提高共享内存灵活性以及使用效率的效果。
在本实施例中还提供了一种共享内存的装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图9是根据本申请实施例的共享内存的装置的示意图,如图9所示,该装置包括:第一接收单元90、第一读取单元91、第一反馈单元92,其中:
第一接收单元90,用于接收内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;
第一读取单元91,用于在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;
第一反馈单元92,用于在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁。
在本申请实施例提供的共享内存的装置中,第一读取单元91包括:第一读取模块,用于从元数据存储区中读取映射表中的记录,并根据映射表中的记录判断数据存储区中是否存在目标内存空间。
在本申请实施例提供的共享内存的装置中,第一读取单元91包括:第一确定模块,用于确定内存申请指令申请的内存页的预设数量;扫描模块,用于从映射表的初始位置依次扫描每条记录;第二确定模块,用于在扫描到连续的预设数量的目标记录的情况下,确定内存中存在目标内存空间,其中,目标记录指示内存页处于空闲状态。
在本申请实施例提供的共享内存的装置中,该装置还包括:第一确定单元,用于在从映射表的初始位置依次扫描每条记录之后,在扫描完毕映射表中的所有记录,且不存在连续的预设数量的目标记录的情况下,确定内存中不存在目标内存空间。
在本申请实施例提供的共享内存的装置中,记录单元,用于通过计数器对扫描到的目标记录的数量进行记录,在从映射表的初始位置依次扫描每条记录的过程中,在当前扫描到目标记录的情况下,控制计数器加一,在当前扫描到非目标记录的情况下,控制计数器清零,其中,非目标记录指示内存页处于被占用状态。
在本申请实施例提供的共享内存的装置中,第一反馈单元92包括:第三确定模块,用于确定连续的预设数量的目标记录中最后扫描到的目标记录,将最后扫描到的目标记录指示的内存页的首地址反馈至发送端。
在本申请实施例提供的共享内存的装置中,第一反馈单元92包括:第四确定模块,用于确定连续的预设数量的目标记录中首个扫描到的目标记录,将首个扫描到的目标记录指示的内存页的首地址反馈至发送端。
在本申请实施例提供的共享内存的装置中,存储单元,用于在从映射表的初始位置依次扫描每条记录的过程中,通过预设变量存储扫描到的连续的目标记录中的首个目标记录。
在本申请实施例提供的共享内存的装置中,该装置还包括:判断单元,用于在对处理器的内存执行加锁操作之前,判断内存当前是否处于被加锁状态,其中,被加锁状态表征内存处于被申请使用的状态;执行单元,用于在内存当前未处于被加锁状态的情况下,对内存执行加锁操作。
在本申请实施例提供的共享内存的装置中,该装置还包括:第二确定单元,用于判断内存当前是否处于被加锁状态之后,在内存当前处于被加锁状态的情况下,确定对内存的加锁失败;申请单元,用于在对内存的加锁失败的情况下,在预设时长后再次申请对处理器的内存进行加锁,直至对内存加锁成功,或者,直至申请加锁的次数大于预设次数。
在本申请实施例提供的共享内存的装置中,该装置还包括:释放单元,用于在读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间之后,在内存中不存在空闲的目标内存空间的情况下,释放对内存的加锁。
在本申请实施例提供的共享内存的装置中,第一接收单元90包括:第二读取模块,用于读取元数据存储区存储的内存管理信息,判断内存管理信息是否包含预设信息,其中,预设信息表征内存处于被加锁状态;第五确定模块,用于在内存管理信息包含预设信息的情况下,确定内存当前未处于被加锁状态;第六确定模块,用于在内存管理信息不包含预设信息的情况下,确定内存当前处于被加锁状态。
在本申请实施例提供的共享内存的装置中,该装置还包括:清零单元,用于内存管理信息包括第一字段信息和第二字段信息,第一字段信息用于描述内存是否处于被加锁状态,第二字段用于描述内存是否初始化完成,在接收内存申请指令之前,初始化数据存储区存储的第一字段信息和第二字段信息。
在本申请实施例提供的共享内存的装置中,第一读取单元91包括:变更模块,用于将映射表中记录的目标内存空间对应的内存页的状态变更为被占用状态。
根据本申请的另一个实施例,提供了一种通信装置,图10是根据本申请实施例的通信装置的示意图,如图10所示,该装置包括:第二接收单元1000、第二读取单元1001、第二反馈单元1002、响应单元1003、第三接收单元1004,其中,
第二接收单元1000,用于接收第一操作***的内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;
第二读取单元1001,用于在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;
第二反馈单元1002,用于在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至第一操作***,更新内存的被占用状态,并释放对内存的加锁;
响应单元1003,用于响应第一操作***的存储操作,将目标数据存储至目标内存空间,并将目标内存空间的地址信息发送至第二操作***;
第三接收单元1004,用于接收第二操作***基于地址信息发送的获取指令,将目标内存空间存储的目标数据发送至第二操作***。
在本申请实施例提供的通信装置中,在第一操作***使用物理地址作进行数据读写操作,第二操作***使用虚拟地址作进行数据读写操作的情况下,第二操作***将目标内存空间的地址信息转换为虚拟地址,并采用虚拟地址访问内存,从目标内存空间读取目标数据。
在本申请实施例提供的通信装置中,第二读取单元1001包括:第七确定模块,用于确定内存申请指令申请的内存页的预设数量;第二扫描模块,用于从映射表的初始位置依次扫描每条记录;第八确定模块,用于在扫描到连续的预设数量的目标记录的情况下,确定内存中存在目标内存空间,其中,目标记录指示内存页处于空闲状态。
在本申请实施例提供的通信装置中,第二反馈单元1002包括:第九确定模块,用于确定连续的预设数量的目标记录中最后扫描到的目标记录,将最后扫描到的目标记录指示的内存页的首地址反馈至第一操作***。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种芯片,其中,该芯片包括可编程逻辑电路以及可执行指令中的至少之一,该芯片在电子设备中运行,用于实现上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种BMC芯片,其中,该BMC芯片可以包括:存储单元以及与存储单元连接的处理单元。存储单元用于存储程序,而处理单元用于运行该程序,以执行上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种主板,其中,该主板包括:至少一个处理器;至少一个存储器,用于存储至少一个程序;当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种服务器,其中,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信,存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一项方法实施例中的步骤,以达到相同的技术效果。
上述服务器的通信总线可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。通信接口用于上述服务器与其他设备之间的通信。
存储器可以包括RAM(Random Access Memory,随机存取存储器),也可以包括NVM(Non-Volatile Memory,非易失性存储器),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。上述的处理器可以是通用处理器,包括CPU(Central Processing Unit,中央处理器)、NP(Network Processor,网络处理器)等;还可以是DSP(Digital Signal Processing,数字信号处理器)、ASIC(Application SpecificIntegrated Circuit,专用集成电路)、FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
针对服务器而言,服务器至少具有可扩展性高和稳定性高的特性,可扩展性除了硬件上的可扩展性上之外,还包含软件上的可扩展性。
此外,由于服务器需要处理大量的数据用以支撑业务的持续性运行,因此服务器还有一个很重要的特征,即为稳定性高,如果服务器的数据传输不能稳定运行,则无疑会对业务开展造成极大的影响。
本申请的方案利用服务器可扩展性高的特点,引入多个操作***,多个操作***在运行过程中需要进行通信,由于服务器的处理器内存中设置有可以被动态申请的内存空间,且记录有内存空间的被占用状态,多个操作***能够通过加锁的方式动态申请空闲内存空间,对空闲内存空间执行数据读写,实现通信。例如,第一操作***申请对处理器的内存执行加锁操作,以获取足够存储数据的空闲的目标内存空间,在申请成功的情况下,基于目标内存空间的地址信息写入数据,更新内存的被占用状态,并释放对内存的加锁,第二操作***可以在接收到通知的情况下从目标内存空间获取第一操作***存储的数据,从而实现数据交互。同时,由于服务器具有稳定性高的特性,操作***动态申请空闲的内存空间、向内存空间读写数据的稳定性可以得到保证,多个操作系之间的通信的稳定性可以得到保证。综上所述,本申请的方案利用服务器可扩展性高和稳定性高的特定,可以多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***的问题,达到提高共享内存灵活性以及使用效率,并降低对操作***的依赖的效果。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (23)
1.一种共享内存的方法,其特征在于,包括:
接收内存申请指令,并对处理器的内存执行加锁操作,其中,所述内存申请指令用于申请使用所述处理器的内存;
在对所述内存加锁成功的情况下,读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间,其中,所述目标内存空间的大小大于等于所述内存申请指令申请的内存的大小;
在所述内存中存在所述目标内存空间的情况下,将所述目标内存空间的地址信息反馈至所述内存申请指令的发送端,更新所述内存的被占用状态,并释放对所述内存的加锁;
其中,所述内存中包括元数据存储区和数据存储区,所述数据存储区用于存储业务数据,所述元数据存储区存储有映射表,所述映射表用于记录所述数据存储区的被占用状态,读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间包括:
从所述元数据存储区中读取所述映射表中的记录,并根据所述映射表中的记录判断所述数据存储区中是否存在所述目标内存空间;
其中,所述数据存储区由多个内存页构成,所述映射表中包含多条记录,每条记录用于记录一个内存页的被占用状态,从所述元数据存储区中读取所述映射表中的记录,并根据所述映射表中的记录判断所述数据存储区中是否存在所述目标内存空间包括:
确定所述内存申请指令申请的内存页的预设数量;
从所述映射表的初始位置依次扫描每条记录;
在扫描到连续的所述预设数量的目标记录的情况下,确定所述内存中存在所述目标内存空间,其中,所述目标记录指示内存页处于空闲状态。
2.根据权利要求1所述的方法,其特征在于,在从所述映射表的初始位置依次扫描每条记录之后,所述方法还包括:
在扫描完毕所述映射表中的所有记录,且不存在连续的所述预设数量的目标记录的情况下,确定所述内存中不存在所述目标内存空间。
3.根据权利要求1或2所述的方法,其特征在于,通过计数器对扫描到的所述目标记录的数量进行记录,在从所述映射表的初始位置依次扫描每条记录的过程中,在当前扫描到所述目标记录的情况下,控制所述计数器加一,在当前扫描到非目标记录的情况下,控制所述计数器清零,其中,所述非目标记录指示内存页处于被占用状态。
4.根据权利要求1所述的方法,其特征在于,在所述初始位置为所述映射表中的最后一个位置的情况下,将所述目标内存空间的地址信息反馈至所述内存申请指令的发送端包括:
确定连续的所述预设数量的目标记录中最后扫描到的目标记录,将所述最后扫描到的目标记录指示的内存页的首地址反馈至所述发送端。
5.根据权利要求1所述的方法,其特征在于,所述初始位置为所述映射表中的第一个位置,将所述目标内存空间的地址信息反馈给所述内存申请指令的发送端包括:
确定连续的所述预设数量的目标记录中首个扫描到的目标记录,将所述首个扫描到的目标记录指示的内存页的首地址反馈至所述发送端。
6.根据权利要求5所述的方法,其特征在于,在从所述映射表的初始位置依次扫描每条记录的过程中,通过预设变量存储扫描到的连续的目标记录中的首个目标记录。
7.根据权利要求1所述的方法,其特征在于,在对处理器的内存执行加锁操作之前,所述方法还包括:
判断所述内存当前是否处于被加锁状态,其中,所述被加锁状态表征所述内存处于被申请使用的状态;
在所述内存当前未处于被加锁状态的情况下,对所述内存执行加锁操作。
8.根据权利要求7所述的方法,其特征在于,在判断所述内存当前是否处于被加锁状态之后,所述方法还包括:
在所述内存当前处于被加锁状态的情况下,确定对所述内存的加锁失败;
在对所述内存的加锁失败的情况下,在预设时长后再次申请对所述处理器的内存进行加锁,直至对所述内存加锁成功,或者,直至申请加锁的次数大于预设次数。
9.根据权利要求1所述的方法,其特征在于,在读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间之后,所述方法还包括:
在所述内存中不存在空闲的所述目标内存空间的情况下,释放对所述内存的加锁。
10.根据权利要求7所述的方法,其特征在于,所述内存中包括元数据存储区和数据存储区,所述数据存储区用于存储业务数据,所述元数据存储区存储有内存管理信息,判断所述内存当前是否处于被加锁状态包括:
读取所述元数据存储区存储的所述内存管理信息,判断所述内存管理信息是否包含预设信息,其中,所述预设信息表征所述内存处于被加锁状态;
在所述内存管理信息包含所述预设信息的情况下,确定所述内存当前未处于被加锁状态;
在所述内存管理信息不包含所述预设信息的情况下,确定所述内存当前处于被加锁状态。
11.根据权利要求10所述的方法,其特征在于,所述内存管理信息包括第一字段信息和第二字段信息,所述第一字段信息用于描述所述内存是否处于被加锁状态,所述第二字段用于描述所述内存是否初始化完成,在接收内存申请指令之前,所述方法还包括:
初始化所述数据存储区存储的所述第一字段信息和所述第二字段信息。
12.根据权利要求1所述的方法,其特征在于,更新所述内存的被占用状态包括:
将所述映射表中记录的所述目标内存空间对应的内存页的状态变更为被占用状态。
13.一种通信方法,其特征在于,包括:
接收第一操作***的内存申请指令,并对处理器的内存执行加锁操作,其中,所述内存申请指令用于申请使用所述处理器的内存;
在对所述内存加锁成功的情况下,读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间,其中,所述目标内存空间的大小大于等于所述内存申请指令申请的内存的大小;
在所述内存中存在所述目标内存空间的情况下,将所述目标内存空间的地址信息反馈至所述第一操作***,更新所述内存的被占用状态,并释放对所述内存的加锁;
响应所述第一操作***的存储操作,将目标数据存储至所述目标内存空间,并将所述目标内存空间的地址信息发送至第二操作***;
接收所述第二操作***基于所述地址信息发送的获取指令,将所述目标内存空间存储的所述目标数据发送至所述第二操作***;
其中,所述内存中包括元数据存储区和数据存储区,所述数据存储区由多个内存页构成,每条内存页用于存储业务数据,所述元数据存储区存储有映射表,所述映射表中包含多条记录,每条记录用于记录一个内存页的被占用状态,读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间包括:
确定所述内存申请指令申请的内存页的预设数量;
从所述映射表的初始位置依次扫描每条记录;
在扫描到连续的所述预设数量的目标记录的情况下,确定所述内存中存在所述目标内存空间,其中,所述目标记录指示内存页处于空闲状态。
14.根据权利要求13所述的方法,其特征在于,在所述第一操作***使用物理地址作进行数据读写操作,所述第二操作***使用虚拟地址作进行数据读写操作的情况下,所述第二操作***将所述目标内存空间的地址信息转换为虚拟地址,并采用所述虚拟地址访问所述内存,从所述目标内存空间读取所述目标数据。
15.根据权利要求14所述的方法,其特征在于,在所述初始位置为所述映射表中的最后一个位置的情况下,将所述目标内存空间的地址信息反馈至所述第一操作***包括:
确定连续的所述预设数量的目标记录中最后扫描到的目标记录,将所述最后扫描到的目标记录指示的内存页的首地址反馈至所述第一操作***。
16.一种嵌入式***,其特征在于,包括:
芯片,其中,所述芯片包括处理器,所述处理器的内存中设置有元数据存储区和数据存储区,所述数据存储区用于存储业务数据,所述元数据存储区存储用于记录所述数据存储区的被占用状态以及被加锁状态;
多个操作***,运行在所述处理器上,通过权利要求1至12中任意一项所述的共享内存的方法使用所述处理器的内存。
17.根据权利要求16所述的嵌入式***,其特征在于,所述数据存储区由多个内存页构成,内存页用于存储业务数据,所述元数据存储区存储有映射表和内存管理信息,所述映射表中有多条记录,每条记录用于记录一个内存页的被占用状态,所述管理信息用于描述所述内存是否处于被加锁状态。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至12任一项中所述的共享内存的方法,或者所述计算机程序被处理器执行时实现所述权利要求13至15任一项中所述的通信方法。
19.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至12任一项中所述的共享内存的方法,或者所述处理器执行所述计算机程序时实现所述权利要求13至15任一项中所述的通信方法。
20.一种芯片,其特征在于,所述芯片包括可编程逻辑电路以及可执行指令中的至少之一,所述芯片在电子设备中运行,用于实现权利要求1至12任一项中所述的共享内存的方法,或者用于实现权利要求13至15任一项中所述的通信方法。
21.一种BMC芯片,其特征在于,包括:存储单元以及与所述存储单元连接的处理单元,所述存储单元用于存储程序,所述处理单元用于运行所述程序,以执行如权利要求1至12任一项中所述的共享内存的方法,或者执行如权利要求13至15任一项中所述的通信方法。
22.一种主板,其特征在于,包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求1至12任一项中所述的共享内存的方法,或者实现如权利要求13至15任一项中所述的通信方法。
23.一种服务器,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现如权利要求1至12任一项中所述的共享内存的方法,或者实现如权利要求13至15任一项中所述的通信方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310536667.2A CN116302617B (zh) | 2023-05-12 | 2023-05-12 | 共享内存的方法、通信方法、嵌入式***以及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310536667.2A CN116302617B (zh) | 2023-05-12 | 2023-05-12 | 共享内存的方法、通信方法、嵌入式***以及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116302617A CN116302617A (zh) | 2023-06-23 |
CN116302617B true CN116302617B (zh) | 2023-08-04 |
Family
ID=86829082
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310536667.2A Active CN116302617B (zh) | 2023-05-12 | 2023-05-12 | 共享内存的方法、通信方法、嵌入式***以及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116302617B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149472B (zh) * | 2023-10-31 | 2024-02-09 | 苏州元脑智能科技有限公司 | 通信方法、装置、计算机可读存储介质以及电子设备 |
CN117667418A (zh) * | 2023-12-13 | 2024-03-08 | 成都北中网芯科技有限公司 | 一种模拟主机的内存分配管理方法、***及介质 |
CN117724991A (zh) * | 2023-12-21 | 2024-03-19 | 北京凯思昊鹏软件工程技术有限公司 | 嵌入式***的动态内存管理方法、***、终端及存储介质 |
CN117707796B (zh) * | 2024-02-06 | 2024-04-09 | 苏州元脑智能科技有限公司 | 资源管理方法、装置、电子设备以及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893269A (zh) * | 2016-03-31 | 2016-08-24 | 武汉虹信技术服务有限责任公司 | 一种Linux***下内存管理方法 |
CN106021000A (zh) * | 2016-06-02 | 2016-10-12 | 北京百度网讯科技有限公司 | 用于机器人操作***的共享内存管理方法和装置 |
CN106796536A (zh) * | 2016-12-27 | 2017-05-31 | 深圳前海达闼云端智能科技有限公司 | 用于多操作***的内存访问方法、装置和电子设备 |
CN108334435A (zh) * | 2018-01-18 | 2018-07-27 | 杭州迪普科技股份有限公司 | 一种共享内存泄漏的提醒方法及装置 |
CN115509986A (zh) * | 2022-09-28 | 2022-12-23 | 美的集团(上海)有限公司 | 核间通信方法、电子设备及存储介质 |
CN115729702A (zh) * | 2022-11-17 | 2023-03-03 | 中国平安人寿保险股份有限公司 | 应用程序内存配置方法、电子设备、计算机存储介质 |
-
2023
- 2023-05-12 CN CN202310536667.2A patent/CN116302617B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893269A (zh) * | 2016-03-31 | 2016-08-24 | 武汉虹信技术服务有限责任公司 | 一种Linux***下内存管理方法 |
CN106021000A (zh) * | 2016-06-02 | 2016-10-12 | 北京百度网讯科技有限公司 | 用于机器人操作***的共享内存管理方法和装置 |
CN106796536A (zh) * | 2016-12-27 | 2017-05-31 | 深圳前海达闼云端智能科技有限公司 | 用于多操作***的内存访问方法、装置和电子设备 |
CN108334435A (zh) * | 2018-01-18 | 2018-07-27 | 杭州迪普科技股份有限公司 | 一种共享内存泄漏的提醒方法及装置 |
CN115509986A (zh) * | 2022-09-28 | 2022-12-23 | 美的集团(上海)有限公司 | 核间通信方法、电子设备及存储介质 |
CN115729702A (zh) * | 2022-11-17 | 2023-03-03 | 中国平安人寿保险股份有限公司 | 应用程序内存配置方法、电子设备、计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116302617A (zh) | 2023-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116302617B (zh) | 共享内存的方法、通信方法、嵌入式***以及电子设备 | |
CN107690622B9 (zh) | 实现硬件加速处理的方法、设备和*** | |
US7895260B2 (en) | Processing data access requests among a plurality of compute nodes | |
CN116243995B (zh) | 通信方法、装置、计算机可读存储介质以及电子设备 | |
US9430411B2 (en) | Method and system for communicating with non-volatile memory | |
CN116257364B (zh) | ***间的资源占用方法、装置、存储介质及电子装置 | |
CN116541227B (zh) | 故障诊断方法、装置、存储介质、电子装置及bmc芯片 | |
CN116244229B (zh) | 硬件控制器的访问方法、装置、存储介质和电子设备 | |
US9390033B2 (en) | Method and system for communicating with non-volatile memory via multiple data paths | |
CN116830082A (zh) | 嵌入式***的启动控制方法和装置、存储介质和电子设备 | |
CN116868167A (zh) | 操作***的运行控制方法和装置,以及嵌入式***和芯片 | |
CN111290983A (zh) | Usb传输设备及传输方法 | |
CN116166434A (zh) | 处理器分配方法及***、装置、存储介质、电子设备 | |
CN112860387A (zh) | 分布式任务调度方法、装置、计算机设备及存储介质 | |
KR102303424B1 (ko) | 랜덤 액세스 메모리를 포함하는 하나 이상의 처리 유닛을 위한 직접 메모리 액세스 제어 장치 | |
CN116868170A (zh) | 嵌入式***的运行方法和装置、嵌入式***及芯片 | |
CN116501506A (zh) | 一种资源轮询仲裁方法、装置、介质及计算设备 | |
CN116848519A (zh) | 硬件接口信号的生成方法、装置及电子设备 | |
CN115878333A (zh) | 进程组间的一致性判断方法、装置及设备 | |
CN113268356B (zh) | 基于LINUX***的多GPU板卡bounding的***、方法及介质 | |
CN116166421A (zh) | 分布式训练任务的资源调度方法及其设备 | |
CN117149472B (zh) | 通信方法、装置、计算机可读存储介质以及电子设备 | |
US7979660B2 (en) | Paging memory contents between a plurality of compute nodes in a parallel computer | |
CN117149471B (zh) | 通信方法、装置、嵌入式***、存储介质以及电子设备 | |
CN114281516A (zh) | 一种基于numa属性的资源分配方法及装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |