CN116244229B - 硬件控制器的访问方法、装置、存储介质和电子设备 - Google Patents

硬件控制器的访问方法、装置、存储介质和电子设备 Download PDF

Info

Publication number
CN116244229B
CN116244229B CN202310536662.XA CN202310536662A CN116244229B CN 116244229 B CN116244229 B CN 116244229B CN 202310536662 A CN202310536662 A CN 202310536662A CN 116244229 B CN116244229 B CN 116244229B
Authority
CN
China
Prior art keywords
target
operating system
memory
access
interrupt request
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
Application number
CN202310536662.XA
Other languages
English (en)
Other versions
CN116244229A (zh
Inventor
陈瑾
马文凯
孙明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202310536662.XA priority Critical patent/CN116244229B/zh
Publication of CN116244229A publication Critical patent/CN116244229A/zh
Application granted granted Critical
Publication of CN116244229B publication Critical patent/CN116244229B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Bus Control (AREA)

Abstract

本申请实施例提供了一种硬件控制器的访问方法、装置、存储介质和电子设备,其中,该方法应用于芯片,第一操作***和第二操作***运行在芯片上的同一个处理器中,该方法包括:通过第二操作***向第一操作***发送第一中断请求,其中,芯片的硬件控制器允许第一操作***进行访问,第一中断请求用于请求访问硬件控制器中的目标硬件控制器;通过第一操作***响应第一中断请求访问目标硬件控制器,得到目标访问结果;通过第一操作***向第二操作***发送第二中断请求,其中,第二中断请求用于指示目标硬件控制器的目标访问结果。通过本申请,解决了硬件控制器的访问效率较低的问题,进而达到了提高硬件控制器的访问效率的效果。

Description

硬件控制器的访问方法、装置、存储介质和电子设备
技术领域
本申请实施例涉及电子信息技术领域,具体而言,涉及一种硬件控制器的访问方法、装置、存储介质和电子设备。
背景技术
近年来,随着对计算机性能要求的不断提升,目前嵌入式***的CPU(CentralProcessing Unit,中央处理器)核心越来越多,多核***的架构设计也随之出现。目前相关技术中双***运行各自占用固定的硬件控制器,经常会遇到两个***同时访问同一硬件控制器的情况。如果一个硬件控制器已经被其中一个操作***所占用,另外一个操作***再次调用同一硬件控制器的时候,很有可能出现操作冲突而出错,大大降低了硬件控制器的访问效率。
针对相关技术中硬件控制器的访问效率较低的问题,尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种硬件控制器的访问方法、装置、存储介质和电子设备,以至少解决相关技术中硬件控制器的访问效率较低的问题。
根据本申请的一个实施例,提供了一种硬件控制器的访问方法,所述方法应用于芯片,第一操作***和第二操作***运行在所述芯片上的同一个处理器中,所述方法包括:
通过所述第二操作***向所述第一操作***发送第一中断请求,其中,所述芯片的硬件控制器允许所述第一操作***进行访问,所述第一中断请求用于请求访问所述硬件控制器中的目标硬件控制器;
通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果;
通过所述第一操作***向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示所述目标硬件控制器的所述目标访问结果。
在一个示例性实施例中,所述通过所述第二操作***向所述第一操作***发送第一中断请求,包括:
通过所述第二操作***确定所述目标硬件控制器对应的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容;
通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于请求对所述目标硬件寄存器空间执行满足所述目标访问内容的访问。
在一个示例性实施例中,所述通过所述第二操作***向所述第一操作***发送所述第一中断请求,包括:
通过所述第二操作***将所述目标访问内容存储至所述芯片上的共享内存中与所述目标硬件寄存器空间对应的目标内存空间中;
通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于请求对所述目标内存空间所对应的所述目标硬件寄存器空间执行满足所述目标内存空间所存储的所述目标访问内容的访问。
在一个示例性实施例中,所述通过所述第二操作***将所述目标访问内容存储至所述芯片上的共享内存中与所述目标硬件寄存器空间对应的目标内存空间中,包括:
通过所述第二操作***从所述硬件寄存器空间与所述共享内存的地址映射中获取所述目标硬件寄存器空间的硬件寄存器地址所对应的所述目标内存空间的内存地址;
通过所述第二操作***将所述目标访问内容存储至所述共享内存中的所述内存地址上。
在一个示例性实施例中,所述通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果,包括:
通过所述第一操作***从所述第一中断请求中确定待访问的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容;
通过所述第一操作***对所述目标硬件寄存器空间执行满足所述目标访问内容的访问,得到所述目标访问结果。
在一个示例性实施例中,所述通过所述第一操作***从所述第一中断请求中确定待访问的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容,包括:
通过所述第一操作***从所述第一中断请求中获取目标内存空间;
通过所述第一操作***将所述目标内存空间转换为所述目标硬件寄存器空间,并从所述芯片上的共享内存中读取所述目标内存空间所存储的所述目标访问内容。
在一个示例性实施例中,所述通过所述第一操作***将所述目标内存空间转换为所述目标硬件寄存器空间,并从所述芯片上的共享内存中读取所述目标内存空间所存储的所述目标访问内容,包括:
通过所述第一操作***从所述硬件寄存器空间与所述共享内存的地址映射中获取所述目标内存空间的内存地址所对应的所述目标硬件寄存器空间的硬件寄存器地址;
从所述共享内存中读取所述内存地址上的所述目标访问内容。
在一个示例性实施例中,所述通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果,包括:
通过所述第一操作***确定所述目标硬件控制器是否存在访问冲突;
在所述目标硬件控制器存在所述访问冲突的情况下,通过所述第一操作***消除所述访问冲突;
在所述目标硬件控制器不存在所述访问冲突的情况下,通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果。
在一个示例性实施例中,所述通过所述第一操作***确定所述目标硬件控制器是否存在访问冲突,包括:
通过所述第一操作***确定是否存在正在访问所述目标硬件控制器的参考操作业务;
在确定存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器存在访问冲突;
在确定不存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器不存在访问冲突。
在一个示例性实施例中,所述通过所述第一操作***消除所述访问冲突,包括:
通过所述第一操作***获取所述参考操作业务的参考优先级和所述第一中断请求所指示的目标操作业务的目标优先级;
通过所述第一操作***根据所述参考优先级和所述目标优先级之间的差别消除所述访问冲突。
在一个示例性实施例中,所述通过所述第一操作***获取所述参考操作业务的参考优先级和所述第一中断请求所指示的目标操作业务的目标优先级,包括:
通过所述第一操作***从所述芯片上的共享内存中所述目标硬件控制器对应的目标内存空间读取所述参考优先级和所述目标优先级。
在一个示例性实施例中,所述通过所述第一操作***根据所述参考优先级和所述目标优先级之间的差别消除所述访问冲突,包括:
在所述参考优先级高于所述目标优先级的情况下,检测所述参考操作业务是否运行完毕;在检测到所述参考操作业务运行完毕的情况下,确定所述目标硬件控制器不存在所述访问冲突;
在所述参考优先级低于所述目标优先级的情况下,挂起所述参考操作业务;释放所述目标硬件控制器;确定所述目标硬件控制器不存在所述访问冲突。
在一个示例性实施例中,所述通过所述第一操作***向所述第二操作***发送第二中断请求,包括:
通过所述第一操作***将所述目标访问结果存储至所述芯片上的共享内存中;
通过所述第一操作***向所述第二操作***发送所述第二中断请求,其中,所述第二中断请求用于指示所述第二操作***从所述共享内存中读取所述目标访问结果。
在一个示例性实施例中,所述通过所述第一操作***将所述目标访问结果存储至所述芯片上的共享内存中,包括:
通过所述第一操作***将所述目标访问结果存储至所述共享内存上与所述目标硬件控制器的目标硬件寄存器空间对应的目标内存空间中。
在一个示例性实施例中,所述通过所述第一操作***将所述目标访问结果存储至所述共享内存上与所述目标硬件寄存器空间对应的目标内存空间中,包括:
通过所述第一操作***将所述目标访问结果存储至所述共享内存中所述目标内存空间的内存地址上,其中,所述目标内存空间的内存地址与所述目标硬件寄存器空间的硬件寄存器地址具有地址映射关系。
在一个示例性实施例中,所述方法还包括:
引导所述第一操作***启动;
引导所述第二操作***启动。
根据本申请的另一个实施例,提供了一种硬件控制器的访问装置,包括:
第一发送模块,用于通过第二操作***向第一操作***发送第一中断请求,其中,芯片的硬件控制器允许所述第一操作***进行访问,所述第一中断请求用于请求访问所述硬件控制器中的目标硬件控制器;
访问模块,用于通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果;
第二发送模块,用于通过所述第一操作***向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示所述目标硬件控制器的所述目标访问结果。
根据本申请的又一个实施例,还提供了一种芯片,其中,所述芯片包括可编程逻辑电路以及可执行指令中的至少之一,所述芯片在电子设备中运行,用于实现上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种BMC芯片(BMC,Baseboard managementcontroller,执行伺服器远端管理控制器,为基板管理控制器,是独立于服务器***之外的小型操作***,是一个集成在主板上的芯片),其中,包括:存储单元以及与所述存储单元连接的处理单元,所述存储单元用于存储程序,所述处理单元用于运行所述程序,以执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种主板,其中,包括:至少一个处理器;至少一个存储器,用于存储至少一个程序;当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种服务器,其中,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,第一操作***和第二操作***运行在芯片上的同一个处理器中,芯片的硬件控制器允许第一操作***进行访问,第二操作***通过向第一操作***发送用于请求访问硬件控制器中的目标硬件控制器的第一中断请求,并由第一操作***响应该第一中断请求对目标硬件控制器进行访问,然后将目标访问结果通过第二中断请求返回给第二操作***的方式访问芯片的硬件控制器,芯片中的操作***,即第一操作***和第二操作***均可以访问全部的硬件控制器,从而提高了硬件控制器的访问适应性以及访问效率,因此,可以解决硬件控制器的访问效率较低的技术问题,达到提高了硬件控制器的访问效率的技术效果。
附图说明
图1是本申请实施例的一种硬件控制器的访问方法的移动终端的硬件结构框图;
图2是根据本申请实施例的硬件控制器的访问方法的流程图;
图3是根据本申请实施例的一种可选的BMC芯片的结构框图;
图4是根据本申请可选的实施方式的双***访问硬件控制器的架构的示意图;
图5是根据本申请可选的实施方式的一种双***访问硬件寄存器空间的流程的示意图;
图6是根据本申请可选的实施方式的一种Linux***访问硬件控制器的流程的示意图;
图7是根据本申请实施例的硬件控制器的访问装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图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所示,该流程包括如下步骤:
步骤S202,通过所述第二操作***向所述第一操作***发送第一中断请求,其中,所述芯片的硬件控制器允许所述第一操作***进行访问,所述第一中断请求用于请求访问所述硬件控制器中的目标硬件控制器;
步骤S204,通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果;
步骤S206,通过所述第一操作***向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示所述目标硬件控制器的所述目标访问结果。
通过上述步骤,第一操作***和第二操作***运行在芯片上的同一个处理器中,芯片的硬件控制器允许第一操作***进行访问,第二操作***通过向第一操作***发送用于请求访问硬件控制器中的目标硬件控制器的第一中断请求,并由第一操作***响应该第一中断请求对目标硬件控制器进行访问,然后将目标访问结果通过第二中断请求返回给第二操作***的方式访问芯片的硬件控制器,芯片中的操作***,即第一操作***和第二操作***均可以访问全部的硬件控制器,从而提高了硬件控制器的访问适应性以及访问效率,因此,可以解决硬件控制器的访问效率较低的技术问题,达到提高了硬件控制器的访问效率的技术效果。
可选地,在本实施例中,还提供了一种操作***的运行方法,该方法包括:在芯片的同一个处理器中运行第一操作***和第二操作***;对所述第一操作***和所述第二操作***所使用的资源进行切换。上述切换的资源可以但不限于包括处理资源和/或操作业务资源等等。可以但不限于采用本实施例中的硬件控制器的访问方法实现第一操作***和第二操作***的运行。
可选地,在本实施例中,上述芯片可以不限于为任何允许在同一个处理器中运行多个操作***的芯片。比如:BMC芯片。例如,BMC芯片的一个示例可以如图3所示,BMC芯片的硬件可以但不限于包括SOC(SOC称为***级芯片,也有称片上***,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整***并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定***功能开始,到软/硬件划分,并完成设计的整个过程)子模块和BMC带外子模块,其中,SOC子模块主要包含ARM核心(ARM Core 1, ARM Core 2,..., ARMCore X),其还可以但不限于包括DDR(Double Data Rate,双倍速率)4控制器(内存控制器)、MAC(Media Access Control Address,媒体访问控制地址)控制器(网络控制器)、SD(Secure Digital,安全数字)Card/eMMC(Embedded Multi Media Card,嵌入式多媒体卡)控制器(存储控制器)、PCIe RC(Root Complex,根复合体)控制器、SRAM(Static Random-Access Memory,静态随机存取存储器)及SPI(Serial Peripheral Interface,串行外设接口,是一种高速的,全双工,同步的通信总线)控制器。
上述核心与各控制器通过第二总线互连,实现核心与各控制器间的交互。同时,ARM核心间连接至第一总线(比如:可以通过AXI(Advanced eXtensible Interface,高级可扩展接口)桥(Bridge)连接),核心间的通信通过第一总线实现。此外,SOC子模块中还实现了第一总线与第二总线的互连互通(比如:通过桥(Bridge)的转换实现),这样为SOC子模块访问第二总线上的外设提供一条物理通路。
DDR4控制器可以通过DDR4 PHY(Physical Layer,物理层)接口与其他部件或者设备相连,MAC控制器通过RGMII(Reduced Gigabit Media Independent Interface,吉比特介质独立接口)与其他部件或者设备相连,SD卡/eMMC控制器通过SD接口与其他部件或者设备相连,PCIe RC控制器通过PCIe PHY接口与其他部件或者设备相连。
BMC带外子模块主要包含PWM(Pulse Width Modulation,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术)、GPIO(General-purpose input/output,通用型之输入输出)、FanTech(风扇调速)、mailbox(邮箱)等芯片外设对应的控制器,通过这些控制器能够实现对BMC的PECI(Platform EnvironmentControl Interface,即平台环境式控制接口)通信(比如使用GPIO模拟PECI)、风扇调控等带外管理功能。由图3可知,该BMC带外子模块可以但不限于通过APB(Advanced PeripheralBus,***总线)总线实现与SOC子模块的交互。
BMC芯片通过第一总线与第二总线实现片内ARM核、存储单元及控制器硬件资源间的互连。处理器资源的动态均衡调度主要涉及BMC芯片的ARM核心资源调度,核间通信指ARM核之间进行的通信。以Linux(一种开源电脑操作***内核,一个用C语言写成,符合POSIX标准的类Unix操作***)***抢占RTOS(Real Time Operating System,实时操作***)***核心为例,Linux***首先在核2~N的某个核上通过片上第一总线向核1发送核间中断(中断号9)。如果此时RTOS***处于空闲状态允许抢占,核1通过第一总线回复核间中断(中断号10),并释放当前核1映射的外设控制器资源(如,PWM/PECI),Linux***收到核间中断10,发起抢占流程,把核1加入Linux SMP(Symmetrical Multi-Processing,对称多处理)调度中,同时获得了PWM/PECI外设的控制权,可以通过第二总线对其进行控制。
可选地,在本实施例中,上述第一操作***和第二操作***可以但不限于是两个异构的或者同构的操作***,即第一操作***和第二操作***的类型可以相同也可以不同。
以第一操作***和第二操作***为异构操作***为例,第一操作***和第二操作***可以是对响应时间的敏感程度不同的操作***,比如:第一操作***对响应时间的敏感程度高于第二操作***。或者,第一操作***和第二操作***可以是对资源的占用量不同的操作***,比如:第一操作***对业务对资源的占用量小于第二操作***。
上述第一操作***和第二操作***可以但不限于是部署在嵌入式***的处理器上的两个异构操作***,即嵌入式操作***,嵌入式操作***根据对响应时间的敏感程度可分为实时性操作***(RTOS)和非实时性操作***,实时性操作***可以但不限于包括FreeRTOS和RTLinux(AReal-Time Linux,亦称作实时Linux,是Linux中的一种实时操作***)等,非实时操作***可以但不限于包括contiki(一个小型、开源、极易移植的多任务电脑操作***)、HeliOS(使用Ruby开发的一套可扩展的移动后端框架)和Linux等。
嵌入式***是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机***。嵌入式***是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用***对功能、可靠性、成本、体积、功耗等严格要求的专用计算机***。从应用对象上加以定义来说,嵌入式***是软件和硬件的综合体,还可以涵盖机械等附属装置。
嵌入式***从硬件角度可以但不限于包括处理器,存储器和***电路等硬件设备,上述第一操作***和第二操作***基于嵌入式***的处理器运行。从软件角度可以但不限于包括底层驱动,操作***和应用程序等,上述第一操作***和第二操作***即为嵌入式***中的操作***。
在上述步骤S202提供的技术方案中,上述第一操作***可以但不限于是实时性操作***,比如:RTOS(Real Time Operating System,实时操作***)或RTLinux(Real-TimeLinux,可称作实时Linux)等等,上述第二操作***可以但不限于是非实时性操作***,比如:contiki***或Linux***等等。
可选的,在本实施例中,将芯片中硬件控制器的访问权限全部开放给实时性操作***,当非实时性操作***具有硬件控制器的访问需求时,通过操作***之间的交互机制由实时性操作***为非实时性操作***实现硬件控制器的访问,一方面可以使双***均能够访问全部的硬件控制器,另一方面也可以提高非实时性操作***的处理效率。
可选的,在本实施例中,操作***之间可以但不限于采用核间通信的方式交互中断请求。核间通信的方式可以是软件实现的(比如:通信协议,中断协议等等)。
可选的,在本实施例中,第一操作***可以但不限于根据自身的业务需求直接访问对应的硬件控制器。第二操作***通过核间通信的方式指示第一操作***访问需要的硬件控制器并由第一操作***将访问结果返回,实现第二操作***对硬件控制器的访问。从而使得多***均具有全部硬件控制器的访问能力。
双***都可以访问全部的硬件资源,且第二操作***用户态在访问硬件控制器时不需要通过内核驱动模型的多层调用,而是由第一操作***来完成对硬件的访问,大大减小了第二操作***内核驱动模型函数多层调用带来的开销,减少访问时间。该过程能够更充分的利用硬件资源,便于双***根据需求部署应用,使得嵌入式***可以适用于更多的业务场景。
可选的,在本实施例中,硬件控制器可以包括一种或多种,可以包括但不限于以下至少之一的芯片外设对应的控制器: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芯片上带外子模块中的I2C、RTC、GPIO、PECI、PWM等芯片外设对应的控制器。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二操作***向所述第一操作***发送第一中断请求:通过所述第二操作***确定所述目标硬件控制器对应的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容;通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于请求对所述目标硬件寄存器空间执行满足所述目标访问内容的访问。
可选的,在本实施例中,硬件控制器可以但不限于通过硬件寄存器来实现,不同的硬件控制器分配了不同的硬件寄存器空间。第二操作***确定出需要访问的目标硬件寄存器空间以及目标访问内容,通过第一中断请求控制第一操作***对目标硬件寄存器空间实现目标访问内容的访问。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二操作***向所述第一操作***发送所述第一中断请求:通过所述第二操作***将所述目标访问内容存储至所述芯片上的共享内存中与所述目标硬件寄存器空间对应的目标内存空间中;通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于请求对所述目标内存空间所对应的所述目标硬件寄存器空间执行满足所述目标内存空间所存储的所述目标访问内容的访问。
可选地,在本实施例中,操作***之间可以但不限于通过共享内存与核间通信结合的方式来实现交互。第二操作***可以但不限于将目标访问内容存储在芯片上的共享内存中,以数据的方式写入共享内存中与目标硬件寄存器空间对应的目标内存空间中,然后通过第二操作***向第一操作***发送核间中断(即第一中断请求)来指示第一操作***从共享内存中找到需要访问的内容。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二操作***将所述目标访问内容存储至所述芯片上的共享内存中与所述目标硬件寄存器空间对应的目标内存空间中:通过所述第二操作***从所述硬件寄存器空间与所述共享内存的地址映射中获取所述目标硬件寄存器空间的硬件寄存器地址所对应的所述目标内存空间的内存地址;通过所述第二操作***将所述目标访问内容存储至所述共享内存中的所述内存地址上。
可选地,在本实施例中,指定一块固定的共享内存的空间,第一操作***和第二操作***都可以访问,将硬件控制器的寄存器地址空间映射到这块共享内存地址上,从而建立了硬件寄存器空间与共享内存之间的地址映射关系,第二操作***需要访问硬件控制器时,只需要对共享内存上的虚拟寄存器地址空间进行读写,由第一操作***负责映射到实际的硬件寄存器空间,并访问硬件控制器。这样可以使得双***都可以访问全部硬件资源,且访问效率更高。
在一个可选的实施方式中,以RTOS***作为第一操作***,Linux***作为第二操作***举例说明。提供了一种双***访问硬件控制器的架构,图4是根据本申请可选的实施方式的双***访问硬件控制器的架构的示意图,如图4所示,在该架构下,Linux***不再通过内核驱动模型直接访问硬件寄存器空间,而是由用户空间直接对共享内存空间进行读写,由RTOS***进行地址映射和实际的硬件寄存器空间读写,获取结果后通过核间中断通知Linux***并将结果写入共享内存空间。RTOS***则可以根据自身的应用需求直接访问硬件控制器,这样就可以使双***都可以访问全部硬件控制器。
在上述步骤S204提供的技术方案中,目标访问结果可以但不限于是第一操作***访问目标硬件控制器返回的任务数据,监控记录,日志文件等等。
可选地,在本实施例中,由第一操作***依据第二操作***给出的第一中断请求的指示来进行相应目标硬件控制器的访问操作,从而得到目标访问结果,实现第二操作***对硬件控制器的访问功能。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果:通过所述第一操作***从所述第一中断请求中确定待访问的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容;通过所述第一操作***对所述目标硬件寄存器空间执行满足所述目标访问内容的访问,得到所述目标访问结果。
可选地,在本实施例中,第一中断请求可以携带了待访问的目标硬件寄存器空间,以及目标访问内容。那么可以直接从第一中断请求中读取目标硬件寄存器空间和目标访问内容。第一中断请求也可以指示出待访问的目标硬件寄存器空间但不携带目标访问内容。由第一操作***到对应的存储位置读取目标访问内容。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***从所述第一中断请求中确定待访问的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容:通过所述第一操作***从所述第一中断请求中获取目标内存空间;通过所述第一操作***将所述目标内存空间转换为所述目标硬件寄存器空间,并从所述芯片上的共享内存中读取所述目标内存空间所存储的所述目标访问内容。
可选地,在本实施例中,第一中断请求中可以携带目标内存空间,第一操作***将目标内存空间转换为目标硬件寄存器空间,从而确定出第二操作***需要访问的硬件控制器,第一操作***从芯片上的共享内存中读取该目标内存空间上所存储的目标访问内容从而确定出第二操作***对硬件控制器的访问需求。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***将所述目标内存空间转换为所述目标硬件寄存器空间,并从所述芯片上的共享内存中读取所述目标内存空间所存储的所述目标访问内容:通过所述第一操作***从所述硬件寄存器空间与所述共享内存的地址映射中获取所述目标内存空间的内存地址所对应的所述目标硬件寄存器空间的硬件寄存器地址;从所述共享内存中读取所述内存地址上的所述目标访问内容。
可选地,在本实施例中,硬件寄存器空间与共享内存之间具有地址映射关系,第一中断请求只需要将硬件控制器访问的事件通知给第一操作***,第一操作***可以到共享内存中找到已被占用的内存地址,将该内存地址转换为对应的硬件寄存器地址即可知晓需要访问的硬件控制器,从该内存地址读取出的存储内容即可作为目标访问内容。
通过上述过程,第二操作***访问硬件控制器时只需将需要访问的内容存储到共享内存中的相应位置并将硬件控制器的访问需求通知给第一操作***即可实现硬件控制器的访问,提高了硬件控制器的访问效率。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果:通过所述第一操作***确定所述目标硬件控制器是否存在访问冲突;在所述目标硬件控制器存在所述访问冲突的情况下,通过所述第一操作***消除所述访问冲突;在所述目标硬件控制器不存在所述访问冲突的情况下,通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果。
可选地,在本实施例中,如果遇到目标硬件控制器的访问冲突,可以但不限于由第一操作***对访问冲突进行仲裁和调度,从而保证目标硬件控制器的访问能够完成。
可选地,在本实施例中,在执行目标硬件控制器的访问之前,由第一操作***首先判断目标硬件控制器是否存在访问冲突(比如:目标硬件控制器正在被某业务访问),再根据判断结果进行后续的相应处理。比如:如果存在访问冲突,则先由第一操作***将访问冲突消除再进行第二操作***指示的访问。如果不存在访问冲突,则由第一操作***直接进行第二操作***指示的访问。
可选地,在本实施例中,可以但不限于通过第一操作***判断目标硬件控制器是否存在访问冲突,如果确定目标硬件控制器存在访问冲突的情况下,则先按照冲突解决策略对冲突进行仲裁和调度从而解决访问冲突,再对目标硬件寄存器空间进行读写;如果确定目标硬件控制器不存在访问冲突的情况下,则通过第一操作***响应第一中断请求直接对目标硬件寄存器空间进行读写,得到目标访问结果。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***确定所述目标硬件控制器是否存在访问冲突:通过所述第一操作***确定是否存在正在访问所述目标硬件控制器的参考操作业务;在确定存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器存在访问冲突;在确定不存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器不存在访问冲突。
可选地,在本实施例中,如果在第二操作***需要访问目标硬件控制器时存在正在访问目标硬件控制器的参考操作业务,则可以认为目标硬件控制器上产生了访问冲突,如果不存在参考操作业务,则通过第一操作***确定目标硬件控制器不存在访问冲突。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***消除所述访问冲突:通过所述第一操作***获取所述参考操作业务的参考优先级和所述第一中断请求所指示的目标操作业务的目标优先级;通过所述第一操作***根据所述参考优先级和所述目标优先级之间的差别消除所述访问冲突。
可选地,在本实施例中,可以但不限于通过安排发生访问冲突的操作业务的访问顺序来解决访问冲突,操作业务的访问顺序可以随机排列,也可以按照操作业务的优先级高低来排列,先处理优先级较高的操作业务,再处理优先级较低的操作业务。
可选地,在本实施例中,操作业务的优先级可以但不限于是按照操作业务的实时性要求排序的,如:PECI(Platform Environment Control Interface,即平台环境式控制接口)通信任务实时性高于周期监控任务,那么PECI通信任务的优先级高于周期监控任务的优先级。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***获取所述参考操作业务的参考优先级和所述第一中断请求所指示的目标操作业务的目标优先级:通过所述第一操作***从所述芯片上的共享内存中所述目标硬件控制器对应的目标内存空间读取所述参考优先级和所述目标优先级。
可选地,在本实施例中,当前正在访问目标硬件控制器的参考操作业务的优先级可以存储在目标硬件控制器对应的目标内存空间中,第一中断请求所指示的目标操作业务的目标优先级也可以存储在目标硬件控制器对应的目标内存空间中,或者可以由第一中断请求携带。
可选地,在本实施例中,可以但不限于在共享内存的每一组与硬件控制器一一对应的虚拟硬件地址(即内存地址)后增加2个字节的空间,分别用来记录当前使用目标硬件控制器的进程优先级(即参考优先级)以及待运行的进程优先级(即目标优先级)。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***根据所述参考优先级和所述目标优先级之间的差别消除所述访问冲突:在所述参考优先级高于所述目标优先级的情况下,检测所述参考操作业务是否运行完毕;在检测到所述参考操作业务运行完毕的情况下,确定所述目标硬件控制器不存在所述访问冲突;在所述参考优先级低于所述目标优先级的情况下,挂起所述参考操作业务;释放所述目标硬件控制器;确定所述目标硬件控制器不存在所述访问冲突。
可选地,在本实施例中,如果当前运行中的进程优先级(即参考优先级)高于待运行的进程的优先级(即目标优先级),则需要等待当前进程使用完毕释放硬件控制器后才执行待运行进程的动作;相反,如果当前运行中的进程优先级低于待运行的进程的优先级,则挂起当前进程,释放硬件控制器,执行待运行进程动作。
在一个可选的实施方式中,以RTOS***作为第一操作***,Linux***作为第二操作***举例说明。提供了一种双***访问硬件寄存器空间的流程,图5是根据本申请可选的实施方式的一种双***访问硬件寄存器空间的流程的示意图,如图5所示,首先给芯片上电,当芯片上电后,依次加载RTOS和Linux***镜像运行;当RTOS和Linux双***稳定运行后,判断Linux***是否有硬件访问需求:如果Linux***有硬件访问需求,则进入Linux***硬件访问流程,再判断RTOS***是否有硬件访问需求,如果RTOS***有硬件访问需求,则判断是否有双***访问冲突;如果没有访问冲突,则直接对硬件寄存器空间进行读写;如果有访问冲突,先按照冲突解决策略进行仲裁和调度,再对硬件寄存器空间直接进行读写。如果Linux***和/或RTOS***没有硬件访问需求,则RTOS和Linux双***持续稳定运行。
在上述步骤S206提供的技术方案中,第二中断请求可以但不限于是以核间通信的方式通过第一操作***向第二操作***发送的。
可选地,在本实施例中,第一操作***访问目标硬件控制器后,将访问过程得到的目标访问结果返回给第二操作***,从而完成第二操作***对目标硬件控制器的访问动作。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***向所述第二操作***发送第二中断请求:通过所述第一操作***将所述目标访问结果存储至所述芯片上的共享内存中;通过所述第一操作***向所述第二操作***发送所述第二中断请求,其中,所述第二中断请求用于指示所述第二操作***从所述共享内存中读取所述目标访问结果。
可选地,在本实施例中,第一操作***可以但不限于将目标访问结果以数据的方式写入芯片上的共享内存中,然后向第二操作***发送核间中断(即第二中断请求),第二操作***检测到中断,从而从共享内存中读取目标访问结果的数据。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***将所述目标访问结果存储至所述芯片上的共享内存中:通过所述第一操作***将所述目标访问结果存储至所述共享内存上与所述目标硬件控制器的目标硬件寄存器空间对应的目标内存空间中。
可选地,在本实施例中,第一操作***可以但不限于将目标访问结果以数据的方式存储至共享内存上与目标硬件控制器的目标硬件寄存器空间对应的目标内存空间中。
在一个示例性实施例中,可以但不限于通过以下方式通过所述第一操作***将所述目标访问结果存储至所述共享内存上与所述目标硬件寄存器空间对应的目标内存空间中:通过所述第一操作***将所述目标访问结果存储至所述共享内存中所述目标内存空间的内存地址上,其中,所述目标内存空间的内存地址与所述目标硬件寄存器空间的硬件寄存器地址具有地址映射关系。
可选地,在本实施例中,第一操作***可以但不限于根据目标内存空间的内存地址与目标硬件寄存器空间的硬件寄存器地址之间的地址映射关系将目标访问结果以数据的方式存储至共享内存中目标内存空间的内存地址上。
在一个可选的实施方式中,以RTOS***作为第一操作***,Linux***作为第二操作***举例说明。提供了一种Linux***访问硬件控制器的流程,图6是根据本申请可选的实施方式的一种Linux***访问硬件控制器的流程的示意图,如图6所示,首先,Linux***直接对共享内存中的虚拟硬件地址空间进行读写;待读写完成后,Linux***向RTOS***发送核间中断;RTOS***检测到中断后,从共享内存中读取需要访问的虚拟硬件地址和内容;读取到相关虚拟硬件地址和内容后,RTOS***对地址进行映射,找到实际硬件寄存器空间;之后,RTOS***判断该地址是否有访问冲突;如果有访问冲突,则按照冲突解决策略进行访问仲裁和调度;如果没有访问冲突,则直接对实际硬件寄存器空间进行读写操作;如果RTOS***需要获取数据,则将数据写入共享内存空间,并发送核间中断给Linux***;最后,Linux***检测到中断,从共享内存空间读取数据结果。
操作***运行的过程中,可以进行业务数据的交互,交互的过程可以但不限于采用存储空间和中断请求配合传输的方式来实现,操作***之间通过存储空间来传递数据,通过中断请求来进行相互之间指令的通知。比如:获取第一操作***基于处理器运行的过程中产生的业务数据;将业务数据存储至处理器上的存储空间;向第二操作***发送一个中断请求,其中,该中断请求用于请求第二操作***从存储空间读取业务数据,第二操作***用于响应该中断请求从存储空间读取业务数据。
可选地,在本实施例中,第一操作***基于处理器运行的过程中产生的业务数据被存储在处理器上的存储空间中,通过一个中断请求通知第二操作***,由第二操作***从存储空间中读取出业务数据,从而实现业务数据的交互。
可选地,在本实施例中,操作***之间交互的业务数据可以但不限于是操作***运行操作业务过程中任何需要在***间进行传输的数据。比如:业务的过程数据,业务的结果数据等等。
可选地,在本实施例中,处理器上的存储空间中可以但不限于为操作***之间的交互过程配置专用的存储位置,可以称为共享内存,该共享内存可以但不限于按照操作***再继续分配,即每个操作***对应一段专用的共享内存。
第一操作***所对应的共享内存的信息(比如:存储地址)可以携带在用于请求第二操作***从存储空间读取业务数据的一个中断请求中,第二操作***响应该中断请求到其指示的共享内存上读取业务数据。
在本实施例中,各个中断请求可以但不限于通过软件协议的方式在***间进行传输,或者也可以通过硬件模块进行传递。以硬件模块mailbox的形式传输中断请求为例,第一操作***和第二操作***之间可以建立mailbox通道,业务数据通过存储空间读写,中断请求通过mailbox通道传输。
在一个可选的实施方式中,提供了一种核间通信的方式。该方式包括如下步骤:
步骤a,第一操作***将目标数据(可以为上述业务数据)发送至处理器内存中的目标虚拟通道(可以为上述存储空间)。
可选的,第一操作***和第二操作***可以是实时操作***,也可以是非实时操作***,第一操作***和第二操作***可以是单核操作***,也可以是多核操作***,目标数据为待发送的数据,目标虚拟通道是内存中的一段空闲存储空间,第一操作***将目标数据发送至处理器内存中的目标虚拟通道是指第一操作***的CPU核将待发送数据写入目标虚拟通道。
步骤b,向第二操作***发送中断通知消息(可以为上述的一个中断请求)。
可选的,第一操作***的CPU核向第二操作***的CPU核发送中断通知消息,中断通知消息中可以携带目标虚拟通道的地址,用于通知第二操作***从目标虚拟通道中获取目标数据,中断通知消息可以是软件触发的,也可以是硬件触发的。
步骤c,第二操作***响应中断通知消息,从内存中的目标虚拟通道获取目标数据。
可选的,第二操作***的CPU核响应中断通知消息,从中断通知消息中解析目标虚拟通道的地址,再根据解析的地址定位至内存中的目标虚拟通道,从目标虚拟通道获取目标数据,实现第一操作***和第二操作的***之间的数据交互。
通过上述步骤,在处理器上运行的多个操作***需要互相传输数据时,发送数据的第一操作***将目标数据发送至处理器内存中的目标虚拟通道,并向第二操作***发送中断通知消息,接收数据的第二操作***响应中断通知消息从目标虚拟通道获取目标数据,解决了核间通信过程浪费资源,对操作***的依赖性强的问题,达到减少核间通信过程对资源的浪费,对操作***的依赖的效果。
在一个示例性实施例中,内存中包含数据存储区和元数据存储区,数据存储区被划分为多个存储单元,每个存储单元用于存储业务数据,元数据存储区用于存储数据存储区的各个存储单元的大小以及被占用状态。
可选的,目标虚拟通道由数据存储区的一个或多个存储单元构成,元数据存储区可以划分为与存储单元的数量相同的存储片,每个存储片用于记录一个存储单元的大小以及被占用状态,存储单元的大小可以由存储单元的首地址和末尾地址表征,也可以由首地址和存储单元的长度来表征,占用状态包含被占用状态和未被占用状态,可以由空闲标志的数值来表征。
在一个示例性实施例中,第一操作***将目标数据发送至处理器内存中的目标虚拟通道包括:第一操作***读取元数据存储区中的记录,根据读取的记录确定数据存储区中处于空闲状态、总空间大于等于目标数据的长度的至少一个存储单元,得到目标虚拟通道;将元数据存储区中目标虚拟通道对应的至少一个存储单元的状态设置为被占用状态,并将目标数据存储在目标虚拟通道。
需要说明的是,为了保证目标数据可以连续写入内存,写入的目标虚拟通道需要是空闲的、且大于等于目标数据的长度的存储空间,由于内存划分为元数据存储区和数据存储区,可以读取元数据存储区记录的各个存储单元的占用状态,从中找出处于空闲状态的、可以满足数据存储需求的存储单元。
例如,每个存储单元的大小相等,若目标数据的长度大于一个存储空间的长度,则根据目标数据的长度确定所需的存储单元的数量,从中找出处于空闲状态的、连续的、数量满足数据存储需求的多个存储单元,构成目标虚拟通道。
再例如,每个存储单元的大小相等,数据存储区已预先对存储单元进行组合,得到多个大小不同的虚拟通道,每个虚拟通道由一个或多个存储单元组合而成,可以读取元数据存储区记录的各个虚拟通道的占用状态,从中找出处于空闲状态的、长度大于目标数据的长度的虚拟通道,也即目标虚拟通道。需要说明的是,当***软件需要申请共享内存空间时候会判断需要申请的数据长度是否大于虚拟通道存放数据的最大长度,如大于虚拟通道存放数据的最大长度,***软件可以把需要发送的数据分多次多送,保证每次发送数据的长度小于等于虚拟通道存放数据的最大长度,从而保证通信的顺利进行。
在一个示例性实施例中,第二操作***响应中断通知消息,从内存中的目标虚拟通道获取目标数据包括:第二操作***读取元数据存储区中的记录,根据读取的记录确定目标虚拟通道;从目标虚拟通道对应的至少一个存储单元获取目标数据,并将至少一个存储单元的状态设置为空闲状态。
也即,第二操作***从目标虚拟通道对应的存储单元提取目标数据之后,为了不影响其他***或任务对目标虚拟通道的使用,将目标虚拟通道对应的存储单元的状态设置为空闲状态。
在一个示例性实施例中,第一操作***将目标数据发送至处理器内存中的目标虚拟通道包括:第一操作***的驱动层接收目标数据,在内存中确定处于空闲状态的虚拟通道,得到目标虚拟通道;将目标虚拟通道的状态设置为被占用状态,并将目标数据存储至目标虚拟通道。
可选的,实时操作***和非实时操作***均具有驱动层,驱动层接收待发送的目标数据之后,调用接口在内存中寻找目标虚拟通道,为避免在写入数据的过程中其他***申请使用目标虚拟通道,在找到目标虚拟通道之后,将目标虚拟通道的状态设置为被占用状态,再将目标数据写入目标虚拟通道。
在一个示例性实施例中,在第一操作***中包含应用层的情况下,应用层设置有人机交互接口,在第一操作***的驱动层在内存中确定处于空闲状态的虚拟通道之前,还包括:第一操作***的应用层通过人机交换接口接收用户输入的待发送数据,采用预设格式封装待发送数据,得到目标数据,并调用数据写入函数通过预设通信接口将目标数据传递至驱动层,其中,预设通信接口设置在驱动层上。
可选的,应用层把需要发送的数据按照预设格式填充好,得到目标数据,然后在***的/dev路径生成一个设备文件ipidev,应用层需要从驱动层读写数据的时候,可以先使用***自带的open函数打开设备文件/dev/ipidev,然后就可以使用***自带的写函数把目标数据从应用层发送到驱动层,驱动层再把数据放在共享内存中的目标虚拟通道,然后触发中断通知第二操作***取数据。
在一个示例性实施例中,第二操作***响应中断通知消息,从内存中的目标虚拟通道获取目标数据包括:第二操作***基于中断通知消息触发中断处理函数,通过中断处理函数从内存中确定目标虚拟通道,并从目标虚拟通道获取目标数据。
在一个示例性实施例中,通过中断处理函数从内存中确定目标虚拟通道,并从目标虚拟通道获取目标数据包括:通过中断处理函数调用目标任务,由目标任务从内存中确定目标虚拟通道,并从目标虚拟通道获取目标数据。
可选的,中断处理函数发送任务通知唤醒负责数据提取的目标任务,目标任务先通过调用接口在共享内存中寻找目标虚拟通道,然后从目标虚拟通道中读取目标数据并进行数据解析。
在一个示例性实施例中,在第二操作***包含应用层的情况下,内存中存储有功能标识,功能标识指示目标功能,通过中断处理函数从内存中确定目标虚拟通道,并从目标虚拟通道获取目标数据包括:通过中断处理函数从内存中确定功能标识和目标虚拟通道,并将目标虚拟通道的地址信息发送给功能标志匹配的目标应用程序,其中,目标应用程序为应用层中的目标应用程序;目标应用程序调用数据读取函数通过预设通信接口将地址信息传递至驱动层,驱动层从目标虚拟通道获取目标数据,并将目标数据传递至目标应用层程序,其中,预设通信接口设置在驱动层,目标应用程序根据功能标识匹配的处理函数处理目标数据,以执行目标功能。
可选的,第二应用***接收到中断通知消息之后,应用层调用对应的中断处理函数从内存中寻找目标虚拟通道,得到目标虚拟通道的地址信息,然后在***的/dev路径生成一个设备文件ipidev,应用层需要从驱动层读写数据的时候,可以先使用***自带的open函数打开设备文件/dev/ipidev,然后就可以使用***自带的读函数读取目标虚拟通道中的目标数据,也即,驱动层根据目标虚拟通道的地址信息在共享内存中找到对应的目标数据,返回给应用层目标数据和目标数据的长度,在一个示例性实施例中,设置目标虚拟通道的状态为空闲。
需要说明的是,应用层的不同应用程序可以利用目标数据实现不同的功能,内存中存储有功能标识,指示应用程序通过目标数据实现的目标功能,可选的,功能标识可以为Net、Cmd,***初始化的时候会把Net、Cmd和应用程序PID注册到驱动,驱动层根据收到的NetFn和Cmd就可以找到应用程序的PID,根据PID将数据要发送到对应的应用程序。
例如,NetFn = 1, Cmd = 1表示第一操作***和第二操作***之间互发”helloword”, 在***开始的时候会初始化一个数组,数组的一共三列,第一列NetFn, 第二列Cmd, 第三列对应NetFn和Cmd的处理函数记为xxCmdHandler。例如当第二操作***收到第一操作***发过来的消息时,从消息中获得NetFn和Cmd,判断NetFn=1, Cmd=1,就会去执行”hello word”对应的处理函数HelloCmdHandler去完成对应的功能。
在一个示例性实施例中,数据存储区中包含多个内存通道,每个内存通道由一个或多个存储单元构成,元数据存储区存储有多条记录,每条记录用于记录一个内存通道的元数据,每个内存通道的元数据至少包含内存通道的通道ID(Identity document,身份证标识号)、内存通道的大小、内存通道的被占用状态,第一操作***读取元数据存储区中的记录,根据读取的记录确定数据存储区中处于空闲状态、总空间大于等于目标数据的长度的至少一个存储单元,得到目标虚拟通道包括:遍历元数据存储区存储的记录,判断是否存在指示内存通道处于空闲状态、且内存通道的大小大于等于目标数据的长度的第一目标记录;在存在第一目标记录的情况下,将第一目标记录中记录的通道ID指示的内存通道确定为目标虚拟通道。
需要说明的是,可以将数据存储区划分为n个虚拟的内存通道,每个内存通道大小可以不等,也即,n个虚拟通道的大小依次为20*m、21*m、22*m、23*m …… 2n-1*m,其中,m为一个存储单元的大小,并设置以下结构体作为元数据管理内存通道:
typedef struct {
uint32_t Flag;
uint16_t ChannelId;
uint8_t SrcId;
uint8_t NetFn;
uint8_t Cmd;
uint32_t Len;
uint32_t ChannelSize;
uint8_t *pData;
uint8_t CheckSum;
}IpiHeader_T
其中,uint32_t Flag表征内存通道的状态,例如,0xA5A5A5A5表示此通道非空,否则为空;uint16_t ChannelId表示通道ID;uint8_t SrcId表示源CPU ID,源CPU是指向内存通道写入数据的CPU;uint8_t NetFn和uint8_t Cmd是功能参数;uint32_t Len为内存通道存储的数据的长度;uint32_t ChannelSize表示内存通道的大小;uint8_t *pData是指内存通道的首地址;uint8_t CheckSum是指校验和,第一操作***需要发送数据时,会将发送的数据通过校验和算法计算出校验值,并将校验值发送至第二操作***,第二操作***在接收到数据和校验值的情况下,根据接收到的数据通过相同的校验和算法算出校验值,将计算出的校验值和接收到的校验值进行比较,如果一致,说明接收到的数据有效,如果不一致,说明接收到的数据无效。每个虚拟的内存通道对应一条结构体记录,此结构体记录会按照通道ID递增的方式依次存放在共享内存的开始位置,***上电后会初始化这些结构体记录,初始化Flag为0表示此通道为空,初始化ChannelId依次为0、1、2 … n-1,初始化ChannelSize为对应虚拟内存通道的大小,初始化pData指向对应虚拟内存通道的首地址。
在一个示例性实施例中,第一操作***在确定目标虚拟通道时,根据待发送的目标数据的大小使用接口GetEmptyChannel在所有的内存通道中的寻找满足以下两个条件的虚拟通道:通道结构体IpiHeader中的空闲标志Flag不等于0xA5A5A5A5(也即通道处于空闲状态),且通道结构体IpiHeader中的通道的大小ChannelSize大于等于目标数据的大小(也即内存大小可以满足目标数据的存储需求)。在寻找到满足上述条件的目标虚拟通道后,把该通道的状态设置为非空,也即,设置通道结构体IpiHeader中的空闲标志Flag为0xA5A5A5A5,然后把目标数据拷贝到目标虚拟通道中。
在一个示例性实施例中,在内存通道被占用的情况下,内存通道的元数据还包括目标数据的源CPU核的ID以及目标数据的目的CPU核的ID,第二操作***读取元数据存储区中的记录,根据读取的记录确定目标虚拟通道包括:遍历元数据存储区存储的记录,判断是否存在第二目标记录,其中,第二目标记录指示内存通道处于被占用状态、且目的CPU核的ID为第二操作***的CUP核的ID,源CPU核的ID非第二操作***的CUP核的ID;在存在第二目标记录的情况下,将第二目标记录中记录的通道ID指示的内存通道确定为目标虚拟通道。
也即,目标虚拟通道是所有的通道中满足以下三个条件的虚拟通道:一是通道结构体IpiHeader中的空闲标志Flag等于0xA5A5A5A5(也即,指示通道处于被占用状态);二是通道结构体中的TargetId等于当前CPU的ID(也即,指示目标数据的目的CUP是第二操作***的CPU);三是通道结构体中的TargetId不等于SrcId(也即,指示目标数据不是第二操作***的CPU发送的)。
需要说明的是,若使用1位表示空闲标Flag,0表示通道空,1表示通道非空,如果Flag原本是0,突变为1,则***在读取Flag之后会认为通道非空,从而导致通信异常。而本实施例中,将空闲标Flag设置为多位特殊字符,例如,0xA5A5A5A5,由于多位同时突变为特殊字符该概率大大小于一位突变概率,可以防止存储介质位突变对Flag的值造成影响,从而提高了通信的安全性。
在一个示例性实施例中,元数据存储区存储有映射表,映射表中有多条记录,每条记录用于记录一个存储单元的被占用状态,第一操作***读取元数据存储区中的记录,根据读取的记录确定数据存储区中处于空闲状态、总空间大于等于目标数据的长度的至少一个存储单元,得到目标虚拟通道包括:确定目标数据待占用的存储单元的预设数量;从映射表的初始位置依次扫描每条记录;在扫描到连续的预设数量的目标记录的情况下,确定预设数量的目标记录指示的连续存储单元,其中,目标记录表征存储单元处于空闲状态;将连续存储单元确定为目标虚拟通道。
需要说明的是,为了便于数据的存储和提取,由于操作***传递业务数据时需要占用内存中连续的存储单元,因此,首先需要确定内存申请指令中的存储单元的数量,由于每一存储单元的内存空间相同,因此可以通过所需内存的空间大小计算出需要的连续存储单元的预设数量,记作numb。
可选的,第一操作***从映射表中的索引位置遍历记录,索引位置可以为映射表的起始位置,从映射表的起始位置开始,依次查询映射表的每条记录,判断是否存在连续的记录空闲内存页的大于等于numb的记录,在存在符合上述条件的记录的情况下,通过记录与内存页的对应关系,确定处理器中的连续存储单元,并将该连续存储单元确定为目标虚拟通道,以向目标虚拟通道写入数据。
在一个示例性实施例中,中断通知消息中包含连续存储单元的首地址和预设数量,第二操作***读取元数据存储区中的记录,根据读取的记录确定目标虚拟通道包括:从映射表的初始位置依次扫描每条记录;在扫描到记录有连续存储单元的首地址的情况下,将扫描到的地址指示的存储单元以及预设数量减一的连续存储单元确定为目标虚拟通道。
可选的,连续存储单元是指数量等于numb的连续存储单元,映射表中的每条记录还记录有对应存储单元的首地址,第二操作***在映射表中扫描到数量等于numb的连续存储单的首地址的记录情况下,说明扫描到了目标虚拟通道的首地址,首地址指示的存储单元以及该存储单元之后的numb-1个连续存储单元构成目标虚拟通道,第二操作***目标虚拟通道中获取数据,以完成和第一操作***的数据交互。
在一个示例性实施例中,通过计数器对扫描到的连续的目标记录进行记录,在按照存储单元的数量从映射表的初始位置依次扫描每条记录的过程中,在当前扫描到目标记录的情况下,控制计数器加一,在当前扫描到非目标记录的情况下,控制计数器清零。
可选的,利用计数器的数值与所需存储单元数量的大小关系判断是否存在连续的预设数量的目标记录,也即是否存在预设数量的连续存储单元,可选的,将计数器的计数记作cntr,若扫描到的一个存储单元为空,则将cntr进行加1操作,若扫描到的存储单元不为空,则将累加的连续、处于空闲状态的存储单元的数量cntr清零,继续从该存储单元后一个地址处开始寻找连续、处于空闲状态的存储单元;直到cntr等于numb,表示已找到了满足内存需求的连续、处于空闲状态的存储单元;如果在扫描完整个映射表之后,不存在cntr大于等于numb,则表明本次动态申请内存失败,不存在预设数量的连续存储单元。
在一个示例性实施例中,在第一操作***读取元数据存储区中的记录,根据读取的记录确定数据存储区中处于空闲状态、总空间大于等于目标数据的长度的至少一个存储单元,得到目标虚拟通道之前,该方法还包括:第一操作***发送内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;在对内存加锁成功的情况下,读取映射表中的记录。
可选的,内存申请指令是运行在处理器上的操作***发出的申请使用处理器的内存的指令,需要说明的是,为防止多个操作***同时申请使用处理器的内存时导致申请冲突,因此,在操作***发送内存申请指令时,先对处理器的内存执行加锁操作,当加锁成功后才可以申请使用内存,加锁操作是指内存申请的排他操作,在当前操作***加锁成功之后,若没有释放加锁,其他服务器没有申请使用处理器内存的权限。
在一个示例性实施例中,对处理器的内存执行加锁操作包括:判断内存当前是否处于被加锁状态,其中,被加锁状态表征内存处于被申请使用的状态;在内存当前未处于被加锁状态的情况下,对内存执行加锁操作;在内存当前处于被加锁状态的情况下,确定对内存的加锁失败,在预设时长后再次申请对处理器的内存进行加锁,直至对内存加锁成功,或者,直至申请加锁的次数大于预设次数。
在处理器运行之前,需要将处理器中的元数据存储区以及数据存储区进行初始化操作,可选的,将元数据存储区中的映射表存储的记录进行初始化,并将内存管理信息进行初始化操作。
在进行申请内存操作前,对内存管理信息进行如下配置:
typedef struct {
uint32_t MemReady;
uint32_t MemLock;
}MallocMemInfo_T;
其中,结构体MallocMemInfo_T的成员变量MemLock表示共享内存是否已初始化完成,变量MemReady为0xA5A5A5A5,表示初始化操作已完成,可以正常动态申请和释放内存;结构体MallocMemInfo_T的成员变量MemReady表征是否被加锁。
可选的,若读取到变量 MemLock为0,表示此时没有***或任务在申请内存,也即内存当前未处于被加锁状态。若读取到变量MemLock为0xA5A5A5A5,表示有***或任务正在申请内存,需要等此次申请完成后再申请,当前申请加锁失败。
在一个示例性实施例中,若对内存进行加锁操作时存在加锁失败的情况下,通过预设时长的等待后再次申请内存的加锁,直至加锁成功,例如,预设时长可以为100微秒。
在一个示例性实施例中,若申请加锁失败,并且重复申请的次数超出了预设次数,表明当前时长中处理器中的内存处于不可分配状态,则停止申请操作。例如,预设次数可以为3次,在申请请加锁的次数大于3次的情况下,可以向发送申请的操作***返回当前内存不可用的消息。
可选的,在处理器的内存空间中存在可供第一操作***使用的目标虚拟通道后,第一操作***将需要传输的目标数据存储到相应的目标虚拟通道,在一个示例性实施例中,根据第一操作***的数据写入情况更新处理器的内存空间的占用状态,也即将目标连续内存空间由未占用状态变为被占用状态,同时,为了使得其他***或任务可以申请内存,释放对内存的加锁。
在一个示例性实施例中,该方法还包括:在未扫描到连续的预设数量的目标记录的情况下,释放对内存的加锁。
可选的,在对映射表中的记录进行扫描后,检测不到预设数量的、连续、处于空闲状态的存储单元,表明处理器的内存中没有足够的空间内存页供第一操作***使用,本次动态申请内存失败,释放对内存的加锁。
在一个示例性实施例中,通过软件中断的方式向第二操作***发送中断通知消息。
在一个示例性实施例中,通过软件中断的方式向第二操作***发送中断通知消息包括:向处理器的预设寄存器中写入中断号和第二操作***的CPU核的ID,并基于中断号和第二操作***的CPU核的ID生成中断通知消息。
可选的,软中断是软件产生的中断,软件可以给执行自己的CPU核发送中断,也可以给其他的CPU核发送中断。预设寄存器可以为GICD_SGIR寄存器,可以通过软件向GICD_SGIR寄存器写入SGI(Software Generated Interrupts,软件中断)中断号、目的CPU ID,来产生一个软件中断,SGI中断号是为核间通信保留的软中断号。
在一个示例性实施例中,通过硬件中断的方式向第二操作***发送中断通知消息。
可选的,硬件中断是指通过硬件设备产生的中断,可以为私有外设中断,也可以为共享外设中断,需要说明的是,硬中断是CPU外部的硬件引入的中断,具有随机性,软中断是CPU中运行的软件执行中断指令引入的中断,是预先设定的,本实施例不限定产生中断通知消息的方式。
在一个可选的实施方式中,提供了一种共享内存的方式。该方式包括如下步骤:
步骤101,接收内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存。
可选的,内存申请指令是运行在处理器上的操作***发出的申请使用处理器的内存的指令,需要说明的是,为防止多个操作***同时申请使用处理器的内存时导致申请冲突,因此,在操作***发送内存申请指令时,先对处理器的内存执行加锁操作,当加锁成功后才可以申请使用内存,加锁操作是指内存申请的排他操作,在当前操作***加锁成功之后,若没有释放加锁,其他服务器没有申请使用处理器内存的权限。
在本申请实施例提供的共享内存的方法中,在对处理器的内存执行加锁操作之前,该方法还包括:判断内存当前是否处于被加锁状态,其中,被加锁状态表征内存处于被申请使用的状态;在内存当前未处于被加锁状态的情况下,对内存执行加锁操作。
可选的,由于多个***或多个任务在同时申请使用内存时会导致申请冲突,处理器的内存在同一时间段内只能被一个***或任务进行加锁,因此,在检测到当前内存未处于被加锁状态的情况下,当前操作***才能对内存执行加锁操作。
可选的,通过判断内存中存储的预设变量是否为预设值来判断内存是否处于被加锁状态,若预设变量不为预设参值数,则表明内存未处于被加锁状态,没有其他***或任务在申请内存空间,则加锁成功;反之,预设变量为预设参数,则表明在当前时刻内存处于被加锁状态,存在除该操作***之外的其他***或任务在申请内存空间,则加锁失败。
在该共享内存的方法中,在判断内存当前是否处于被加锁状态之后,还包括:在内存当前处于被加锁状态的情况下,确定对内存的加锁失败;在对内存的加锁失败的情况下,在预设时长后再次申请对处理器的内存进行加锁,直至对内存加锁成功,或者,直至申请加锁的次数大于预设次数。
可选的,若对内存进行加锁操作时存在加锁失败的情况下,通过预设时长的等待后再次申请内存的加锁,直至加锁成功,例如,预设时长可以为100微秒。
在一个示例性实施例中,若申请加锁失败,并且重复申请的次数超出了预设次数,表明当前时长中处理器中的内存处于不可分配状态,则停止申请操作。例如,预设次数可以为3次,在申请请加锁的次数大于3次的情况下,可以向发送申请的操作***返回当前内存不可用的消息。
步骤102,在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小。
在申请加锁成功后,操作***对处理器中的内存进行申请,可选的,扫描用于记录内存被占用状态的信息,判断是否存在目标内存空间,也即,判断处理器中是否存在处于未被占用状态的、连续的可以满足内存使用需求的内存空间,满足内存使用需求是指内存空间的大小大于等于操作***申请的内存大小。
需要说明的是,申请内存的时候还可以使用不连续的内存空间,可以在非一个最小内存块后的后面增加一个指针,指向下一个申请获得的最小内存块,同时,在数据读写的时候,根据存储地址和指针实现数据跨数据块的数据读写。本实施例不限定目标内存空间的形式。
步骤103,在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁。
发送端是指发送内存申请指令的操作***,需要说明的是,由于操作***在核间通信时,通过使用共享内存发送和接收数据,并在收发数据的过程中使用申请的内存返回的地址进行数据的存取,因此需要确定已申请的内存空间的地址信息。
可选的,在处理器的内存空间中存在可供操作***使用的目标内存空间后,将该目标连续空间的地址信息发送给该操作***,操作***根据地址信息将需要传输的数据存储到相应的内存空间中。
在一个示例性实施例中,根据操作***的数据写入情况更新处理器的内存空间的占用状态,也即,将目标内存空间由未占用状态变为被占用状态,并释放在动态申请内存之前的加锁操作,以使其他操作***可以申请使用处理器的内存空间。
通过上述步骤:接收内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁,解决了多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***的问题,达到提高共享内存灵活性以及使用效率,并降低对操作***的依赖的效果。
在该共享内存的方法中,内存中包括元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储有映射表,映射表用于记录数据存储区的被占用状态,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间包括:从元数据存储区中读取映射表中的记录,并根据映射表中的记录判断数据存储区中是否存在目标内存空间。
通过查询映射表中的记录的方式查询内存的被占用状态,可选的,获取处理器中存储的元数据存储区,并识别元数据存储区中的映射表,通过遍历映射表中的记录,读取数据存储区的被占用状态,判断数据存储区中是否存在连续的、处于空闲状态的、满足内存使用需求的内存空间。
在本申请实施例提供的共享内存的方法中,数据存储区由多个内存页构成,映射表中包含多条记录,每条记录用于记录一个内存页的被占用状态,从元数据存储区中读取映射表中的记录,并根据映射表中的记录判断数据存储区中是否存在目标内存空间包括:确定内存申请指令申请的内存页的预设数量;从映射表的初始位置依次扫描每条记录;在扫描到连续的预设数量的目标记录的情况下,确定内存中存在目标内存空间,其中,目标记录指示内存页处于空闲状态。
需要说明的是,数据存储区按照相同的内存大小划分为多个分配单元,将每一个分配单元记作一个内存页,例如,数据存储区的内存空间为A字节,划分的分配单元为B字节,则该数据存储区共包含A/B个内存页,映射表中的记录也即内存页记录,每条内存页记录用于记录一个内存页的被占用状态,映射表中的内存页记录和数据存储区中的内存页的数量相同。
数据存储区即为动态分配内存块区,元数据存储区包括动态分配内存映射表区,其中,映射表区按照数据存储区划分内存页的数量划分相同数量的记录,并将该记录记作内存页记录,并将所有内存页记录组合为映射表,映射表中所有内存页记录与数据存储区的所有内存页存在一一对应关系,每一内存页记录中表示对应的内存页的分配状态,也即内存页是否被占用。
可选的,由于操作***进行协同的业务数据需要占用处理器中连续的内存页,因此,首先需要确定内存申请指令中的内存页的预设数量,由于每一内存页的内存空间相同,因此可以通过所需内存的空间大小计算出需要的连续内存页的预设数量,记作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,表示初始化操作已完成,可以正常动态申请和释放内存。
在本申请实施例提供的共享内存的方法中,更新内存的被占用状态包括:将映射表中记录的目标内存空间对应的内存页的状态变更为被占用状态。
可选的,在操作***需要占用目标内存空间的情况下,通过识别目标内存空间的多个内存页的地址信息,按照内存页与内存页记录的对应关系,更新元数据存储区的映射表区的内存页记录,使其由未占用状态变为被占用状态。
在一个可选的实施方式中,提供了一种操作***之间的通信方式。该方式包括如下步骤:
步骤201,接收第一操作***的内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;
需要说明的是,为防止多个操作***同时申请处理器的内存空间时导致申请失败,因此,第一操作***发送内存申请指令时,向处理器内存申请加锁操作,当申请加锁成功后才可以申请内存。
可选的,通过判断内存中存储的预设变量是否为预设值来确定是否加锁成功,若预设变量不为预设参值数,则表明没有其他***或任务在申请内存空间,则加锁成功;反之,预设变量为预设参数,则表明在当前时刻,存在除该操作***之外的其他***或任务在申请内存空间,则加锁失败。
步骤202,在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;
可选的,在申请加锁成功时,根据操作***发出的内存申请指令,扫描用于记录内存被占用状态的信息判断是否存在目标内存空间,也即,判断处理器中是否存在处于未被占用状态的、连续的内存空间,在一个示例性实施例中,判断处于未被占用状态的、连续的内存空间的大小是否大于等于操作***申请的内存大小,得到判断结果。
步骤203,在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至第一操作***,更新内存的被占用状态,并释放对内存的加锁;
可选的,在判断结果指示处理器的内存空间中存在可供操作***使用的目标内存空间后,将该目标连续空间的地址信息发送给该操作***,操作***根据地址信息将需要传输的数据存储到相应的内存空间中。
进一步的,根据操作***的数据写入情况更新处理器的内存空间的占用状态,也即将目标内存空间由未占用状态变为被占用状态,并释放在动态申请内存之前的加锁操作。
步骤204,响应第一操作***的存储操作,将目标数据存储至目标内存空间,并将连续内存空间的地址信息发送至第二操作***;
可选的,在申请内存成功后,第一操作***将需要传递的目标数据存储值申请的目标内存空间,并向与第一操作***协同的第二操作***发送该目标内存空间的地址信息,通知第二操作***进行数据获取。
步骤205,接收第二操作***基于地址信息发送的获取指令,将目标内存空间存储的目标数据发送至第二操作***。
可选的,在第二操作***接收到目标内存空间的地址信息后,发出数据的获取指令,嵌入式***接收该指令并将存储在目标内存空间的目标数据发送到第二操作***中。
通过上述步骤:接收第一操作***的内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁;响应第一操作***的存储操作,将目标数据存储至目标内存空间,并将连续内存空间的地址信息发送至第二操作***;接收第二操作***基于地址信息发送的获取指令,将目标内存空间存储的目标数据发送至第二操作***,解决了多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作***的问题,达到提高共享内存灵活性以及使用效率,并降低对操作***的依赖的效果。
在一个示例性实施例中,在第一操作***使用物理地址作进行数据读写操作,第二操作***使用虚拟地址作进行数据读写操作的情况下,第二操作***将目标内存空间的地址信息转换为虚拟地址,并采用虚拟地址访问内存,从目标内存空间读取目标数据。
由于在核间通信使用共享内存发送和接收数据时,会使用动态申请内存返回的地址,但是不同的***使用地址***可能不同,例如,实时操作***为第一操作***,非实时操作***为第二操作***,实时操作***中访问共享内存可以直接使用物理地址,非实时操作***中不能直接使用物理地址访问共享内存,则需要使用映射后的虚拟地址,在第二操作***接收到目标内存空间的地址信息后,通过地址信息offset进行转换,将其映射为虚拟地址,并根据虚拟地址进行操作。可选的,非实时操作***下的共享内存虚拟基地址vBase(共享内存真实物理地址假设为0x96000000);实时操作***下共享内存物理基地址pBase(即0x96000000)。
非实时操作***中动态申请的内存返回的地址也是虚拟地址vData,非实时操作***中,Offset = vData – vBase;数据发送从非实时操作***中发送到实时操作***中,实时操作***使用地址pData访问动态申请的共享内存pData = pBase + Offset。
实时操作***中动态申请的内存返回的地址是物理地址pData,实时操作***中Offset = pData– pBase;数据发送从实时操作***中发送到非实时操作***中,非实时操作***使用地址vData访问动态申请的共享内存vData= vBase + Offset。
在一个示例性实施例中,内存中包括元数据存储区和数据存储区,数据存储区由多个内存页构成,每条内存页用于存储业务数据,元数据存储区存储有映射表,映射表中包含多条记录,每条记录用于记录一个内存页的被占用状态,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间包括:确定内存申请指令申请的内存页的预设数量;从映射表的初始位置依次扫描每条记录;在扫描到连续的预设数量的目标记录的情况下,确定内存中存在目标内存空间,其中,目标记录指示内存页处于空闲状态。
可选的,获取处理器中存储的元数据存储区,并识别元数据存储区中的映射表,从映射表中的索引位置开始遍历每一条内存页记录,依次查询映射表的每条内存页记录,确定是否存在连续的记录空闲内存页的大于等于预设数量的内存页记录,在存在符合上述条件的内存页记录的情况下,通过内存页记录与内存页的对应关系,确定处理器中存在目标内存空间,通过内存页记录与内存页的对应关系,确定处理器中存在目标内存空间。
在一个示例性实施例中,在初始位置为映射表中的最后一个位置的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端包括:确定连续的预设数量的目标记录中最后扫描到的目标记录,将最后扫描到的目标记录指示的内存页的首地址反馈至发送端。
可选的,当对映射表进行扫描时,扫描方式可以选择从映射表的第一个位置扫描或者从映射表的最后一个位置开始扫描,当扫描方式为从映射表的最后一个位置扫描时,将扫描到的最后一个内存页记录对应的内存页的首地址,并将这些内存页置为非空,将首地址作为本次内存申请指令的整个连续内存页的首地址。在一个示例性实施例中,将该地址反馈至发出内存申请指令的操作***,由操作***根据地址信息对内存进行数据写入操作。
在本实施例中还提供了一种共享内存的方法,该方法包括:在操作***发出内存申请指令前,为防止多个操作***同时申请处理器的内存空间时导致申请冲突,需要申请加锁操作,并判断是否加锁成功;在判断结果表示动态申请内存加锁成功的情况下,根据发出的内存申请指令中内存大小计算需要分配的连续内存页的页数,并记作nmemb;若判断结果表示申请加锁失败的情况下,在等待一段时间(可以为100微秒)后重新发出申请,直至申请成功,若申请加锁失败的次数大于预设次数(预设次数可以为三次)的情况下,则退出内存申请。
在一个示例性实施例中,在申请加锁成功后,对处理器的元数据存储区进行初始化操作,并将映射表的最后位置记作offset,并根据申请内存指令中的所需内存的空间大小计算出需要的连续内存页的数量,并将内存页数量记作nmemb,并设置用记录内存页数量的计数器,记作cmemb,然后获取处理器中的元数据存储区的映射表,并从映射表的offset位置开始扫描整个映射表,通过映射表中存储的内存页记录与数据存储区中内存页的对应关系,寻找连续的空的内存页,如果扫描的当前的内存页处于被占用状态,则将offset=offset-cmemb,然后把计数器中累加的连续的空的内存页的数据cmemb清零,继续从新的offset位置重新开始寻找连续的空的内存页;若扫描的内存页为空,也即处于空闲状态时,将计数器的数值cmemb加1,并offset=offset-1,继续判断下一个内存页,直到cmemb等于nmemb,也即计数器数据与所需内存的空间大小相等时,表示扫描到满足要求的连续内存页。
在一个示例性实施例中,将符合要求的内存页在对应的映射表中标记为被占用状态,将最后一个找到的内存页的首地址作为动态申请的整个连续的内存页的首地址,释放动态申请内存的锁,本次动态申请内存成功。
若在扫描整个映射表的过程中,offset的值小于0,则表明没有符合要求的内存页供操作***使用,释放动态申请内存的锁,本次动态申请内存失败。
此外,动态申请了空间之后发现空间不够用时还可以动态调整大小,具体,可以再次发出更新后的内存申请指令,并对内存执行加锁操作,在加锁成功的情况下,若更新后的内存申请指令需要申请的内存空间增大,判断已申请的目标连续内存之后是否存在所需的内存空间,在存在的情况下,申请成功,若更新后的内存申请指令需要申请的内存空间减小,则释放部分内存空间。
本实施例通过划分多个存储区,利用索引位置根据实际需要的空间大小动态申请,使用完成后释放掉,并且动态申请了空间之后发现空间不够用时还可以动态调整大小,可以达到提高共享内存灵活性以及使用效率的效果。
在一个示例性实施例中,可以但不限于通过以下方式启动双***:引导所述第一操作***启动;引导所述第二操作***启动。
可选地,在本实施例中,第一操作***和第二操作***可以但不限于先后启动,第一操作***可以但不限于比第二操作***启动更快,第一操作***也可以但不限于比第二操作***启动所需的条件更简单,在第一操作***先启动后可以运行能够满足第二操作***启动所需的条件,或者能够加快第二操作***启动的业务,从而使得多***能够更加高效快速地启动并运行业务。
比如:引导第一操作***启动后可以由第一操作***运行能够控制芯片环境参数达到第二操作***启动要求的业务(比如:风扇运行,参数控制等业务),使得芯片环境参数迅速达成第二操作***启动运行的环境,提高操作***的启动效率和运行效率。
可选地,在本实施例中,第一操作***可以但不限于由第一操作***的引导程序引导启动,第二操作***可以但不限于由第二操作***的引导程序引导启动。或者,二者可以由同一个引导程序先后引导启动。
在一个示例性实施例中,可以但不限于采用以下方式引导所述第一操作***启动:所述芯片启动上电,通过所述处理器唤醒所述处理器中为所述第一操作***分配的第一处理器核心;通过所述第一处理器核心执行所述第一操作***的引导程序引导所述第一操作***启动。
可选地,在本实施例中,可以但不限于根据第一操作***所在的处理器所具有的处理器核心确定第一操作***的第一处理器核心,比如:第一操作***所在的处理器可以但不限于包括多个处理器核心(处理器核心0至处理器核心N),可以但不限于将多个处理器核心中的一个或者多个处理器核心(比如处理器核心0)分配给第一操作***作为第一操作***的第一处理器核心。
可选地,在本实施例中,上述第一操作***的引导程序可以但不限于存储于芯片上的特定存储空间中专门用于启动第一操作***。
可选地,在本实施例中,上述第一操作***的第一处理器核心可以但不限于用于执行第一操作***的引导程序,可以但不限于通过执行第一操作***的引导程序启动第一操作***。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第一处理器核心执行所述第一操作***的引导程序引导所述第一操作***启动:通过所述第一处理器核心执行二级程序加载器,其中,所述第一操作***的引导程序包括所述二级程序加载器;通过所述二级程序加载器加载所述第一操作***。
可选地,在本实施例中,第一操作***的引导程序可以但不限于包括所述二级程序加载器,第一处理器核心可以但不限于通过执行二级程序加载器(Second ProgramLoader,SPL)加载第一操作***。
在一个示例性实施例中,可以但不限于采用以下方式引导所述第二操作***启动:通过所述二级程序加载器唤醒为所述第二操作***分配的第二处理器核心;通过所述第二处理器核心执行所述第二操作***的引导程序引导所述第二操作***启动。
可选地,在本实施例中,可以但不限于根据第二操作***所在的处理器的处理器核心确定第二操作***的第二处理器核心,比如:第二操作***所在的处理器可以但不限于包括多个处理器核心(处理器核心0至处理器核心N),可以但不限于将多个处理器核心中的一个或者多个处理器核心(处理器核心1至处理器核心N)分配给第二操作***作为第二操作***的第二处理器核心。
可选地,在本实施例中,可以但不限于根据二级程序加载器唤醒第二操作***的第二处理器核心,比如:在使用二级程序加载器加载第一操作***完成后,可以但不限于通过二级程序加载器唤醒第二操作***的第二处理器核心。或者,在使用二级程序加载器加载第一操作***的过程中,可以但不限于通过二级程序加载器唤醒第二操作***的第二处理器核心。
可选地,在本实施例中,可以但不限于使用第二处理器核心执行第二操作***的引导程序引导第二操作***启动。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二处理器核心执行所述第二操作***的引导程序引导所述第二操作***启动:通过所述第二处理器核心执行通用引导加载器,其中,所述第二操作***的引导程序包括所述通用引导加载器;通过所述通用引导加载器加载所述第二操作***。
可选地,在本实施例中,第二处理器核心可以但不限于通过执行通用引导加载器加载第二操作***,通用引导加载器可以但不限于包括U-Boot(Universal Boot Loader)。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第一处理器核心执行二级程序加载器:通过所述芯片上的引导存储器对所述二级程序加载器的代码进行安全启动检查;在检查结果为正常的情况下,通过所述第一处理器核心执行所述二级程序加载器。
可选地,在本实施例中,操作***的引导程序可以但不限于包括二级程序加载器,可以但不限于将操作***的引导程序作为上述引导存储器,通过引导存储器验证操作***的引导程序包括的二级程序加载器的代码,比如:可以但不限于根据第一操作***的引导程序(引导程序可以但不限于为BootROM(无盘启动ROM接口,通过远程启动服务构造无盘工作站))得到第一操作***的二级程序加载器(二级程序加载器可以但不限于SPL),可以但不限于根据第一操作***的引导存储器(引导存储器可以但不限于为BootROM)验证二级程序加载器的代码。
可选地,在本实施例中,引导存储器对二级程序加载器的代码进行安全启动检查的过程可以但不限于为:引导存储器读取二级程序加载器的代码以及验证码,通过约定的运算方式(比如哈希运算)对二级程序加载器的代码进行运算,得到运算值,再将该运算值与读取的验证码进行比对,二者一致则检查结果为正常,二者不一致则检查结果为异常。
可选地,在本实施例中,二级程序加载器也可以对通用引导加载器的代码进行安全启动检查,二级程序加载器读取通用引导加载器的代码以及验证码,通过约定的运算方式(比如哈希运算,与上述引导存储器检查二级程序加载器的运算方式可以相同也可以不同)对通用引导加载器的代码进行运算,得到运算值,再将该运算值与读取的验证码进行比对,二者一致则检查结果为正常,二者不一致则检查结果为异常。检查结果为正常的情况下,再通过所述通用引导加载器加载第二操作***。
在一个示例性实施例中,提供了一种第一操作***和第二操作***启动的示例。以第一处理器核心为CPU-0,第二处理器核心为CPU-1至CPU-N为例,可以但不限于通过以下方式启动第一操作***和第二操作***:芯片启动上电;唤醒处理器中第一操作***的第一处理器核心CPU-0;使用第一处理器核心CPU-0执行第一操作***的引导程序,可以但不限于为二级程序加载器;通过芯片上的引导存储器(可以但不限于为BootROM)对二级程序加载器的代码进行安全启动检查;检查结果为正常,通过第一处理器核心执行二级程序加载器(可以但不限于为SPL)加载第一操作***;通过二级程序加载器唤醒第二操作***的第二处理器核心CPU-1至CPU-N;通过第二处理器核心执行通用引导加载器(可以但不限于为U-Boot)加载第二操作***。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在本实施例中还提供了一种硬件控制器的访问装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图7是根据本申请实施例的硬件控制器的访问装置的结构框图,如图7所示,该装置包括:
第一发送模块72,用于通过第二操作***向第一操作***发送第一中断请求,其中,芯片的硬件控制器允许所述第一操作***进行访问,所述第一中断请求用于请求访问所述硬件控制器中的目标硬件控制器;
访问模块74,用于通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果;
第二发送模块76,用于通过所述第一操作***向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示所述目标硬件控制器的所述目标访问结果。
通过上述装置,首先通过第二操作***向第一操作***发送第一中断请求,请求访问硬件控制器中的目标硬件控制器,第一操作***可以访问所有硬件控制器;第一操作***响应第一中断请求访问目标硬件控制器,得到目标访问结果;再通过第一操作***向第二操作***发送第二中断请求,从而将目标硬件控制器的目标访问结果返回给第二操作***。第一操作***可以访问全部的硬件控制器,第二操作***通过向第一操作***发送第一中断请求的方式实现对目标硬件控制器的访问,第一操作***响应第一中断请求访问目标硬件控制器,得到目标访问结果后向第二操作***发送第二中断请求,从而将目标访问结果返回给第二操作***,两个***都不是只能访问固定的硬件控制器,第一操作***可以访问全部的硬件控制器,第二操作***可以通过与第一操作***的通信访问全部的硬件控制器,从而提高了硬件控制器的访问适应性以及访问效率,因此,可以解决硬件控制器的访问适应性较差、访问效率较低问题,达到提高了硬件控制器的访问适应性和效率的效果。
在一个示例性实施例中,所述第一发送模块,包括:
第一确定单元,用于通过所述第二操作***确定所述目标硬件控制器对应的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容;
第一发送单元,用于通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于请求对所述目标硬件寄存器空间执行满足所述目标访问内容的访问。
在一个示例性实施例中,所述第一发送单元,用于:通过所述第二操作***将所述目标访问内容存储至所述芯片上的共享内存中与所述目标硬件寄存器空间对应的目标内存空间中;通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于请求对所述目标内存空间所对应的所述目标硬件寄存器空间执行满足所述目标内存空间所存储的所述目标访问内容的访问。
在一个示例性实施例中,所述第一发送单元,还用于:通过所述第二操作***从所述硬件寄存器空间与所述共享内存的地址映射中获取所述目标硬件寄存器空间的硬件寄存器地址所对应的所述目标内存空间的内存地址;通过所述第二操作***将所述目标访问内容存储至所述共享内存中的所述内存地址上。
在一个示例性实施例中,所述访问模块,包括:
第二确定单元,用于通过所述第一操作***从所述第一中断请求中确定待访问的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容;
执行单元,用于通过所述第一操作***对所述目标硬件寄存器空间执行满足所述目标访问内容的访问,得到所述目标访问结果。
在一个示例性实施例中,所述第二确定单元,用于:通过所述第一操作***从所述第一中断请求中获取目标内存空间;通过所述第一操作***将所述目标内存空间转换为所述目标硬件寄存器空间,并从所述芯片上的共享内存中读取所述目标内存空间所存储的所述目标访问内容。
在一个示例性实施例中,所述第二确定单元,还用于:通过所述第一操作***从所述硬件寄存器空间与所述共享内存的地址映射中获取所述目标内存空间的内存地址所对应的所述目标硬件寄存器空间的硬件寄存器地址;从所述共享内存中读取所述内存地址上的所述目标访问内容。
在一个示例性实施例中,所述访问模块,还包括:
第三确定单元,用于通过所述第一操作***确定所述目标硬件控制器是否存在访问冲突;
消除单元,用于在所述目标硬件控制器存在所述访问冲突的情况下,通过所述第一操作***消除所述访问冲突;
访问单元,用于在所述目标硬件控制器不存在所述访问冲突的情况下,通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果。
在一个示例性实施例中,所述第三确定单元,用于:通过所述第一操作***确定是否存在正在访问所述目标硬件控制器的参考操作业务;在确定存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器存在访问冲突;在确定不存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器不存在访问冲突。
在一个示例性实施例中,所述消除单元,用于:通过所述第一操作***获取所述参考操作业务的参考优先级和所述第一中断请求所指示的目标操作业务的目标优先级;通过所述第一操作***根据所述参考优先级和所述目标优先级之间的差别消除所述访问冲突。
在一个示例性实施例中,所述消除单元,还用于:通过所述第一操作***从所述芯片上的共享内存中所述目标硬件控制器对应的目标内存空间读取所述参考优先级和所述目标优先级。
在一个示例性实施例中,所述消除单元,还用于:在所述参考优先级高于所述目标优先级的情况下,检测所述参考操作业务是否运行完毕;在检测到所述参考操作业务运行完毕的情况下,确定所述目标硬件控制器不存在所述访问冲突;在所述参考优先级低于所述目标优先级的情况下,挂起所述参考操作业务;释放所述目标硬件控制器;确定所述目标硬件控制器不存在所述访问冲突。
在一个示例性实施例中,所述第二发送模块,包括:
存储单元,用于通过所述第一操作***将所述目标访问结果存储至所述芯片上的共享内存中;
第二发送单元,用于通过所述第一操作***向所述第二操作***发送所述第二中断请求,其中,所述第二中断请求用于指示所述第二操作***从所述共享内存中读取所述目标访问结果。
在一个示例性实施例中,所述存储单元,用于:通过所述第一操作***将所述目标访问结果存储至所述共享内存上与所述目标硬件控制器的目标硬件寄存器空间对应的目标内存空间中。
在一个示例性实施例中,所述存储单元,还用于:通过所述第一操作***将所述目标访问结果存储至所述共享内存中所述目标内存空间的内存地址上,其中,所述目标内存空间的内存地址与所述目标硬件寄存器空间的硬件寄存器地址具有地址映射关系。
在一个示例性实施例中,所述装置还包括:
第一引导模块,用于引导所述第一操作***启动;
第二引导模块,用于引导所述第二操作***启动。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种芯片,其中,该芯片包括可编程逻辑电路以及可执行指令中的至少之一,该芯片在电子设备中运行,用于实现上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种BMC芯片,其中,该BMC芯片可以包括:存储单元以及与存储单元连接的处理单元。存储单元用于存储程序,而处理单元用于运行该程序,以执行上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种主板,其中,该主板包括:至少一个处理器;至少一个存储器,用于存储至少一个程序;当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种服务器,其中,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信,存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一项方法实施例中的步骤,以达到相同的技术效果。
上述服务器的通信总线可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。通信接口用于上述服务器与其他设备之间的通信。
存储器可以包括RAM(RandomAccessMemory,随机存取存储器),也可以包括NVM(Non-VolatileMemory,非易失性存储器),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。上述的处理器可以是通用处理器,包括CPU(CentralProcessingUnit,中央处理器)、NP(NetworkProcessor,网络处理器)等;还可以是DSP(DigitalSignalProcessing,数字信号处理器)、ASIC(ApplicationSpecificIntegratedCircuit,专用集成电路)、FPGA(Field-ProgrammableGateArray,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
针对服务器而言,服务器至少具有可扩展性高和稳定性高的特性,其中,由于企业网络是不可能长久不变的,在网络信息化的今天,如果服务器没有一定的可扩展性,则是会导致影响到企业之后的发展,影响到企业的使用,因此可拓展性是成为最为基本的特性,只有在拥有较高的可扩展性才能保证后期更好的利用,可扩展性除了硬件上的可扩展性上之外,还包含软件上的可扩展性,由于服务器的功能与计算机相比较而言还是十分复杂,因此不仅仅是在硬件配置方面,还有就是软件配置也是很重要的,想要实现更多的功能,没有全面软件支持也是没有办法想象的。
此外,由于服务器需要处理大量的数据用以支撑业务的持续性运行,因此服务器还有一个很重要的特征,即为稳定性高,如果服务器的数据传输不能稳定运行,则无疑会对业务开展造成极大的影响。
本申请的方案服务器无论是对软件资源进行扩展还是对硬件资源进行扩展都能够实现操作***对硬件控制器全面灵活的访问,提高了服务器的可扩展性。另外,通过上述操作***对硬件控制器的访问机制,能够使得硬件控制器能够更加稳定的运行,提高了服务器的稳定性。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (20)

1.一种硬件控制器的访问方法,其特征在于,所述方法应用于芯片,第一操作***和第二操作***运行在所述芯片上的同一个处理器中,所述方法包括:
通过所述第二操作***向所述第一操作***发送第一中断请求,其中,所述芯片的硬件控制器允许所述第一操作***进行访问,所述第一中断请求用于请求访问所述硬件控制器中的目标硬件控制器;
通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果;
通过所述第一操作***向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示所述目标硬件控制器的所述目标访问结果;
其中,所述通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果,包括:
通过所述第一操作***确定所述目标硬件控制器是否存在访问冲突;
在所述目标硬件控制器存在所述访问冲突的情况下,通过所述第一操作***消除所述访问冲突;
在所述目标硬件控制器不存在所述访问冲突的情况下,通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果;
其中,所述通过所述第一操作***确定所述目标硬件控制器是否存在访问冲突,包括:
通过所述第一操作***确定是否存在正在访问所述目标硬件控制器的参考操作业务;
在确定存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器存在访问冲突;
在确定不存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器不存在访问冲突;
其中,所述通过所述第一操作***消除所述访问冲突,包括:
通过所述第一操作***获取所述参考操作业务的参考优先级和所述第一中断请求所指示的目标操作业务的目标优先级;
通过所述第一操作***根据所述参考优先级和所述目标优先级之间的差别消除所述访问冲突。
2.根据权利要求1所述的方法,其特征在于,所述通过所述第二操作***向所述第一操作***发送第一中断请求,包括:
通过所述第二操作***确定所述目标硬件控制器对应的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容;
通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于请求对所述目标硬件寄存器空间执行满足所述目标访问内容的访问。
3.根据权利要求2所述的方法,其特征在于,所述通过所述第二操作***向所述第一操作***发送所述第一中断请求,包括:
通过所述第二操作***将所述目标访问内容存储至所述芯片上的共享内存中与所述目标硬件寄存器空间对应的目标内存空间中;
通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于请求对所述目标内存空间所对应的所述目标硬件寄存器空间执行满足所述目标内存空间所存储的所述目标访问内容的访问。
4.根据权利要求3所述的方法,其特征在于,所述通过所述第二操作***将所述目标访问内容存储至所述芯片上的共享内存中与所述目标硬件寄存器空间对应的目标内存空间中,包括:
通过所述第二操作***从所述硬件寄存器空间与所述共享内存的地址映射中获取所述目标硬件寄存器空间的硬件寄存器地址所对应的所述目标内存空间的内存地址;
通过所述第二操作***将所述目标访问内容存储至所述共享内存中的所述内存地址上。
5.根据权利要求1所述的方法,其特征在于,所述通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果,包括:
通过所述第一操作***从所述第一中断请求中确定待访问的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容;
通过所述第一操作***对所述目标硬件寄存器空间执行满足所述目标访问内容的访问,得到所述目标访问结果。
6.根据权利要求5所述的方法,其特征在于,所述通过所述第一操作***从所述第一中断请求中确定待访问的目标硬件寄存器空间,以及对所述目标硬件寄存器空间进行访问的目标访问内容,包括:
通过所述第一操作***从所述第一中断请求中获取目标内存空间;
通过所述第一操作***将所述目标内存空间转换为所述目标硬件寄存器空间,并从所述芯片上的共享内存中读取所述目标内存空间所存储的所述目标访问内容。
7.根据权利要求6所述的方法,其特征在于,所述通过所述第一操作***将所述目标内存空间转换为所述目标硬件寄存器空间,并从所述芯片上的共享内存中读取所述目标内存空间所存储的所述目标访问内容,包括:
通过所述第一操作***从所述硬件寄存器空间与所述共享内存的地址映射中获取所述目标内存空间的内存地址所对应的所述目标硬件寄存器空间的硬件寄存器地址;
从所述共享内存中读取所述内存地址上的所述目标访问内容。
8.根据权利要求1所述的方法,其特征在于,所述通过所述第一操作***获取所述参考操作业务的参考优先级和所述第一中断请求所指示的目标操作业务的目标优先级,包括:
通过所述第一操作***从所述芯片上的共享内存中所述目标硬件控制器对应的目标内存空间读取所述参考优先级和所述目标优先级。
9.根据权利要求1所述的方法,其特征在于,所述通过所述第一操作***根据所述参考优先级和所述目标优先级之间的差别消除所述访问冲突,包括:
在所述参考优先级高于所述目标优先级的情况下,检测所述参考操作业务是否运行完毕;在检测到所述参考操作业务运行完毕的情况下,确定所述目标硬件控制器不存在所述访问冲突;
在所述参考优先级低于所述目标优先级的情况下,挂起所述参考操作业务;释放所述目标硬件控制器;确定所述目标硬件控制器不存在所述访问冲突。
10.根据权利要求1所述的方法,其特征在于,所述通过所述第一操作***向所述第二操作***发送第二中断请求,包括:
通过所述第一操作***将所述目标访问结果存储至所述芯片上的共享内存中;
通过所述第一操作***向所述第二操作***发送所述第二中断请求,其中,所述第二中断请求用于指示所述第二操作***从所述共享内存中读取所述目标访问结果。
11.根据权利要求10所述的方法,其特征在于,所述通过所述第一操作***将所述目标访问结果存储至所述芯片上的共享内存中,包括:
通过所述第一操作***将所述目标访问结果存储至所述共享内存上与所述目标硬件控制器的目标硬件寄存器空间对应的目标内存空间中。
12.根据权利要求11所述的方法,其特征在于,所述通过所述第一操作***将所述目标访问结果存储至所述共享内存上与所述目标硬件寄存器空间对应的目标内存空间中,包括:
通过所述第一操作***将所述目标访问结果存储至所述共享内存中所述目标内存空间的内存地址上,其中,所述目标内存空间的内存地址与所述目标硬件寄存器空间的硬件寄存器地址具有地址映射关系。
13.根据权利要求1所述的方法,其特征在于,所述方法还包括:
引导所述第一操作***启动;
引导所述第二操作***启动。
14.一种硬件控制器的访问装置,其特征在于,包括:
第一发送模块,用于通过第二操作***向第一操作***发送第一中断请求,其中,芯片的硬件控制器允许所述第一操作***进行访问,所述第一中断请求用于请求访问所述硬件控制器中的目标硬件控制器;
访问模块,用于通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果;
第二发送模块,用于通过所述第一操作***向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示所述目标硬件控制器的所述目标访问结果;
其中,所述访问模块,还包括:
第三确定单元,用于通过第一操作***确定目标硬件控制器是否存在访问冲突;
消除单元,用于在所述目标硬件控制器存在所述访问冲突的情况下,通过所述第一操作***消除所述访问冲突;
访问单元,用于在所述目标硬件控制器不存在所述访问冲突的情况下,通过所述第一操作***响应所述第一中断请求访问所述目标硬件控制器,得到目标访问结果;
其中,所述第三确定单元,用于:通过所述第一操作***确定是否存在正在访问所述目标硬件控制器的参考操作业务;在确定存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器存在访问冲突;在确定不存在所述参考操作业务的情况下,通过所述第一操作***确定所述目标硬件控制器不存在访问冲突;
其中,所述消除单元,用于:通过所述第一操作***获取所述参考操作业务的参考优先级和所述第一中断请求所指示的目标操作业务的目标优先级;通过所述第一操作***根据所述参考优先级和所述目标优先级之间的差别消除所述访问冲突。
15.一种芯片,其特征在于,所述芯片包括可编程逻辑电路以及可执行指令中的至少之一,所述芯片在电子设备中运行,用于实现权利要求1至13任一项所述的方法。
16.一种BMC芯片,其特征在于,包括:存储单元以及与所述存储单元连接的处理单元,所述存储单元用于存储程序,所述处理单元用于运行所述程序,以执行如权利要求1至13任一项所述的方法。
17.一种主板,其特征在于,包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求1至13任一项所述的方法。
18.一种服务器,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1至13任一项所述的方法。
19.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至13任一项中所述的方法的步骤。
20.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至13任一项中所述的方法的步骤。
CN202310536662.XA 2023-05-12 2023-05-12 硬件控制器的访问方法、装置、存储介质和电子设备 Active CN116244229B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310536662.XA CN116244229B (zh) 2023-05-12 2023-05-12 硬件控制器的访问方法、装置、存储介质和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310536662.XA CN116244229B (zh) 2023-05-12 2023-05-12 硬件控制器的访问方法、装置、存储介质和电子设备

Publications (2)

Publication Number Publication Date
CN116244229A CN116244229A (zh) 2023-06-09
CN116244229B true CN116244229B (zh) 2023-08-04

Family

ID=86631732

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310536662.XA Active CN116244229B (zh) 2023-05-12 2023-05-12 硬件控制器的访问方法、装置、存储介质和电子设备

Country Status (1)

Country Link
CN (1) CN116244229B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117370262A (zh) * 2023-08-31 2024-01-09 华为技术有限公司 通信方法、装置、芯片***和电子设备
CN116991637B (zh) * 2023-09-26 2024-02-02 苏州元脑智能科技有限公司 嵌入式***的运行控制方法及装置、电子设备及存储介质
CN117032812B (zh) * 2023-10-09 2024-02-02 苏州元脑智能科技有限公司 服务器的管理方法、设备、装置、存储介质和电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101187908A (zh) * 2007-09-27 2008-05-28 上海大学 单芯片多处理器共享数据存储空间的访问方法
CN101504618A (zh) * 2009-02-26 2009-08-12 浙江大学 面向多核处理器的实时线程迁移方法
CN102693162A (zh) * 2011-12-29 2012-09-26 中国科学技术大学苏州研究院 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法
CN111745651A (zh) * 2020-06-15 2020-10-09 哈工大机器人(合肥)国际创新研究院 一种智能机器人操作***结构及其运作方法
CN113806006A (zh) * 2020-06-12 2021-12-17 华为技术有限公司 一种异构指令集架构下异常或中断的处理方法、装置
CN115509986A (zh) * 2022-09-28 2022-12-23 美的集团(上海)有限公司 核间通信方法、电子设备及存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101187908A (zh) * 2007-09-27 2008-05-28 上海大学 单芯片多处理器共享数据存储空间的访问方法
CN101504618A (zh) * 2009-02-26 2009-08-12 浙江大学 面向多核处理器的实时线程迁移方法
CN102693162A (zh) * 2011-12-29 2012-09-26 中国科学技术大学苏州研究院 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法
CN113806006A (zh) * 2020-06-12 2021-12-17 华为技术有限公司 一种异构指令集架构下异常或中断的处理方法、装置
CN111745651A (zh) * 2020-06-15 2020-10-09 哈工大机器人(合肥)国际创新研究院 一种智能机器人操作***结构及其运作方法
CN115509986A (zh) * 2022-09-28 2022-12-23 美的集团(上海)有限公司 核间通信方法、电子设备及存储介质

Also Published As

Publication number Publication date
CN116244229A (zh) 2023-06-09

Similar Documents

Publication Publication Date Title
CN116244229B (zh) 硬件控制器的访问方法、装置、存储介质和电子设备
RU2639693C1 (ru) Способ обработки ресурса, операционная система и устройство
CN116257364B (zh) ***间的资源占用方法、装置、存储介质及电子装置
EP3414662B1 (en) Virtualizing sensors
CN116243995B (zh) 通信方法、装置、计算机可读存储介质以及电子设备
US8185901B2 (en) Parsing an application to find serial and parallel data segments to minimize migration overhead between serial and parallel compute nodes
CN116302617B (zh) 共享内存的方法、通信方法、嵌入式***以及电子设备
US9430411B2 (en) Method and system for communicating with non-volatile memory
CN116541227B (zh) 故障诊断方法、装置、存储介质、电子装置及bmc芯片
CN116627520B (zh) 基板管理控制器的***运行方法以及基板管理控制器
CN116521209B (zh) 操作***的升级方法及装置、存储介质及电子设备
CN116830082A (zh) 嵌入式***的启动控制方法和装置、存储介质和电子设备
CN116868167A (zh) 操作***的运行控制方法和装置,以及嵌入式***和芯片
WO2024119764A1 (zh) 一种任务调度方法、装置及电子设备和存储介质
CN116243996B (zh) 业务的运行切换方法、装置、存储介质及电子装置
CN113010265A (zh) Pod的调度方法、调度器、存储插件及***
US20190050240A1 (en) Bios startup method and apparatus
CN116257471A (zh) 一种业务处理方法及装置
CN116302141B (zh) 串口切换方法、芯片及串口切换***
US8799625B2 (en) Fast remote communication and computation between processors using store and load operations on direct core-to-core memory
CN116868170A (zh) 嵌入式***的运行方法和装置、嵌入式***及芯片
CN116848519A (zh) 硬件接口信号的生成方法、装置及电子设备
US7979660B2 (en) Paging memory contents between a plurality of compute nodes in a parallel computer
CN117149472B (zh) 通信方法、装置、计算机可读存储介质以及电子设备
WO2016184201A1 (zh) 一种多核***中硬件资源管理的方法及相应的多核***

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant