CN116257364A - ***间的资源占用方法、装置、存储介质及电子装置 - Google Patents

***间的资源占用方法、装置、存储介质及电子装置 Download PDF

Info

Publication number
CN116257364A
CN116257364A CN202310536663.4A CN202310536663A CN116257364A CN 116257364 A CN116257364 A CN 116257364A CN 202310536663 A CN202310536663 A CN 202310536663A CN 116257364 A CN116257364 A CN 116257364A
Authority
CN
China
Prior art keywords
operating system
resource
memory
processing resource
processor
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.)
Granted
Application number
CN202310536663.4A
Other languages
English (en)
Other versions
CN116257364B (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 CN202310536663.4A priority Critical patent/CN116257364B/zh
Publication of CN116257364A publication Critical patent/CN116257364A/zh
Application granted granted Critical
Publication of CN116257364B publication Critical patent/CN116257364B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5022Mechanisms to release resources
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Hardware Redundancy (AREA)

Abstract

本申请实施例提供了一种***间的资源占用方法、装置、存储介质及电子装置,其中,该方法应用于芯片,第一操作***和第二操作***运行在芯片上的同一个处理器中,该方法包括:通过第二操作***确定目标处理资源,其中,处理器的处理资源包括第一处理资源和第二处理资源,第一处理资源被分配给第一操作***使用,第二处理资源被分配给第二操作***使用;通过第一操作***从第一处理资源中释放目标处理资源;通过第二操作***将目标处理资源添加至第二处理资源中。通过本申请,解决了***间的资源分配的适应性较差的技术问题,进而达到了提高***间的资源分配的适应性的技术效果。

Description

***间的资源占用方法、装置、存储介质及电子装置
技术领域
本申请实施例涉及计算机领域,具体而言,涉及一种***间的资源占用方法、装置、存储介质及电子装置。
背景技术
目前,由于嵌入式***中CPU(Central Processing Unit,中央处理器)核心的增多,出现了多***共同运行的架构设计,但在现有技术中,各个***只能够使用预先为各自分配的固定的资源才能够运行,***的运行过程缺乏灵活性和适应性。
针对相关技术中,***间的资源分配的适应性较差等问题,尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种***间的资源占用方法、装置、存储介质及电子装置,以至少解决相关技术中***间的资源分配的适应性较差的问题。
根据本申请的一个实施例,提供了一种***间的资源占用方法,包括:
通过所述第二操作***确定目标处理资源,其中,所述处理器的处理资源包括第一处理资源和第二处理资源,所述第一处理资源被分配给所述第一操作***使用,所述第二处理资源被分配给所述第二操作***使用;
通过所述第一操作***从所述第一处理资源中释放所述目标处理资源;
通过所述第二操作***将所述目标处理资源添加至所述第二处理资源中。
在一个示例性实施例中,所述通过所述第二操作***确定目标处理资源,包括:
通过所述第二操作***监控所述第二处理资源是否满足所述第二操作***上业务的运行;
在确定所述第二处理资源不满足所述第二操作***上业务的运行的情况下,通过所述第二操作***估算所述目标处理资源的资源信息。
在一个示例性实施例中,所述通过所述第二操作***监控所述第二处理资源是否满足所述第二操作***上业务的运行,包括以下至少之一:
通过所述第二操作***监控所述第二处理资源中的剩余存储资源是否大于存储阈值,其中,在所述剩余存储资源小于或者等于所述存储阈值的情况下所述第二处理资源不满足所述第二操作***上业务的运行;
通过所述第二操作***监控所述第二操作***上业务是否使用除所述第二处理资源中的外设资源之外的参考外设资源,其中,在所述第二操作***上业务使用所述参考外设资源的情况下所述第二处理资源不满足所述第二操作***上业务的运行;
通过所述第二操作***监控所述第二操作***上业务是否使用除所述第二处理资源中的处理器中断资源之外的参考处理器中断资源,其中,在所述第二操作***上业务使用所述参考处理器中断资源的情况下所述第二处理资源不满足所述第二操作***上业务的运行。
在一个示例性实施例中,所述通过所述第二操作***估算所述目标处理资源的资源信息,包括:
通过所述第二操作***确定所述目标处理资源的资源类型,其中,所述资源类型包括以下至少之一:存储资源,外设资源,处理器中断资源;
通过所述第二操作***估算每种资源类型对应的资源量。
在一个示例性实施例中,所述通过所述第二操作***估算每种资源类型对应的资源量,包括:
在所述资源类型包括所述存储资源的情况下,通过所述第二操作***估算所述目标处理资源中待占用的目标存储量;
在所述资源类型包括所述外设资源的情况下,通过所述第二操作***估算待占用的参考外设资源的外设标识和/或外设数量;
在所述资源类型包括所述处理器中断资源的情况下,通过所述第二操作***估算待占用的参考处理器中断资源的中断数量。
在一个示例性实施例中,所述通过所述第一操作***从所述第一处理资源中释放所述目标处理资源,包括:
通过所述第二操作***向所述第一操作***发送第一中断请求,其中,所述第一中断请求用于指示抢占所述目标处理资源;
通过所述第一操作***从所述第一处理资源中释放所述目标处理资源;
通过所述第一操作***向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示已释放所述目标处理资源。
在一个示例性实施例中,所述通过所述第二操作***向所述第一操作***发送第一中断请求,包括:
通过所述第二操作***将所述目标处理资源的资源信息存储至所述芯片上的共享内存中;
通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于指示抢占所述共享内存中存储的所述资源信息所指示的所述目标处理资源。
在一个示例性实施例中,所述通过所述第一操作***从所述第一处理资源中释放所述目标处理资源,包括:
通过所述第一操作***响应所述第一中断请求从所述共享内存中读取所述资源信息;
通过所述第一操作***从所述第一处理资源中释放满足所述资源信息的所述目标处理资源。
在一个示例性实施例中,所述通过所述第一操作***从所述第一处理资源中释放所述目标处理资源,包括:
通过所述第一操作***确定所述目标处理资源当前是否被使用;
在所述目标处理资源当前未被使用的情况下,释放所述目标处理资源;
在所述目标处理资源当前被使用的情况下,挂起当前使用所述目标处理资源的参考业务;从所述第一处理资源中释放所述目标处理资源。
在一个示例性实施例中,在所述从所述第一处理资源中释放所述目标处理资源之后,所述方法还包括:
检测所述第一处理资源中除所述目标处理资源之外的处理资源是否满足所述参考业务的运行需求;
在满足所述参考业务的运行需求的情况下,使用所述第一处理资源中除所述目标处理资源之外的处理资源恢复所述参考业务运行。
在一个示例性实施例中,所述通过所述第二操作***将所述目标处理资源添加至所述第二处理资源中,包括:
通过所述第二操作***初始化所述目标处理资源;
通过所述第二操作***将初始化后的所述目标处理资源添加至所述第二处理资源中。
在一个示例性实施例中,所述方法还包括:
引导所述第一操作***启动;
引导所述第二操作***启动。
在一个示例性实施例中,所述引导所述第一操作***启动,包括:所述芯片启动上电,通过所述处理器唤醒所述处理器中为所述第一操作***分配的第一处理器核心;通过所述第一处理器核心执行二级程序加载器,其中,所述第一操作***的引导程序包括所述二级程序加载器;通过所述二级程序加载器加载所述第一操作***;
所述引导所述第二操作***启动,包括:通过所述二级程序加载器唤醒为所述第二操作***分配的第二处理器核心;通过所述第二处理器核心执行所述第二操作***的引导程序引导所述第二操作***启动。
根据本申请的另一个实施例,提供了一种***间的资源占用装置,所述装置应用于芯片,第一操作***和第二操作***运行在所述芯片上的同一个处理器中,包括:
确定模块,用于通过所述第二操作***确定目标处理资源,其中,所述处理器的处理资源包括第一处理资源和第二处理资源,所述第一处理资源被分配给所述第一操作***使用,所述第二处理资源被分配给所述第二操作***使用;
释放模块,用于通过所述第一操作***从所述第一处理资源中释放所述目标处理资源;
添加模块,用于通过所述第二操作***将所述目标处理资源添加至所述第二处理资源中。
根据本申请的又一个实施例,还提供了一种芯片,其中,所述芯片包括可编程逻辑电路以及可执行指令中的至少之一,所述芯片在电子设备中运行,用于实现上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种BMC芯片(BMC,Baseboard managementcontroller,执行伺服器远端管理控制器,为基板管理控制器,是独立于服务器***之外的小型操作***,是一个集成在主板上的芯片),其中,包括:存储单元以及与所述存储单元连接的处理单元,所述存储单元用于存储程序,所述处理单元用于运行所述程序,以执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种主板,其中,包括:至少一个处理器;至少一个存储器,用于存储至少一个程序;当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种服务器,其中,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,第一操作***和第二操作***运行在芯片上的同一个处理器中,处理器的处理资源包括第一处理资源和第二处理资源,第一处理资源被分配给第一操作***使用,第二处理资源被分配给第二操作***使用,由一个操作***确定其需要抢占的目标处理资源,另一个操作***从其占用的处理资源中释放目标处理资源,再由抢占资源的操作***将目标处理资源添加至其占用的处理资源中,从而使得操作***之间可以根据自身的处理需求进行处理资源的协调调度。也就是说,通过将第一处理资源中第二操作***所需要的目标处理资源释放给第二处理资源,实现了根据第二操作***的应用需求动态调整分配给第一操作***和第二操作***的资源,使得处理器中的资源能够合理的进行动态的调整。因此,可以解决***间的资源分配的适应性较差的技术问题,达到提高***间的资源分配的适应性的技术效果。
附图说明
图1是本申请实施例的一种***间的资源占用方法的移动终端的硬件结构框图;
图2是根据本申请实施例的***间的资源占用的流程图;
图3是根据本申请实施例的一种可选的BMC芯片的结构框图;
图4是根据本申请实施例的一种资源动态配置的判断过程的流程图;
图5是根据本申请实施例的***间资源动态配置的交互过程的示意图;
图6是根据实施例的***间的资源动态占用的流程图;
图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,通过所述第二操作***将所述目标处理资源添加至所述第二处理资源中。
通过上述步骤,第一操作***和第二操作***运行在芯片上的同一个处理器中,处理器的处理资源包括第一处理资源和第二处理资源,第一处理资源被分配给第一操作***使用,第二处理资源被分配给第二操作***使用,由一个操作***确定其需要抢占的目标处理资源,另一个操作***从其占用的处理资源中释放目标处理资源,再由抢占资源的操作***将目标处理资源添加至其占用的处理资源中,从而使得操作***之间可以根据自身的处理需求进行处理资源的协调调度。也就是说,通过将第一处理资源中第二操作***所需要的目标处理资源释放给第二处理资源,实现了根据第二操作***的应用需求动态调整分配给第一操作***和第二操作***的资源,使得处理器中的资源能够合理的进行动态的调整。因此,可以解决***间的资源分配的适应性较差的技术问题,达到提高***间的资源分配的适应性的技术效果。
可选地,在本实施例中,还提供了一种操作***的运行方法,该方法包括:在芯片的同一个处理器中运行第一操作***和第二操作***;对所述第一操作***和所述第二操作***所使用的资源进行切换。上述切换的资源可以但不限于包括处理资源和/或操作业务资源等等。可以但不限于采用本实施例中的***间的资源占用方法对所述第一操作***和所述第二操作***所使用的资源进行切换。
可选地,在本实施例中,上述***间的资源占用方法可以但不限于应用于芯片上,比如:X86架构(The X86 architecture,是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,x86泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构)的芯片、ARM架构(Advanced RISCMachine,更早称作Acorn RISC Machine,是一个32位精简指令集RISC处理器架构)的芯片、RiSC-V(risk-five,是一个基于精简指令集RISC原则的开源指令集架构)架构的芯片和MIPS架构(MIPS architecture,为Microprocessor without interlocked piped stagesarchitecture的缩写,亦为Millions of Instructions Per Second的双关语,是一种采取精简指令集RISC的处理器架构)的芯片等等。该方法还可以但不限于应用于嵌入式***中,上述嵌入式***可以是嵌入式异构多***,异构多***是指在嵌入式***的多核处理器中运行多种不同的操作***(例如,第一操作***、第二操作***等),且这些操作***同时运行于同一嵌入式***中。
可选地,在本实施例中,上述第一操作***和第二操作***可以但不限于运行在芯片上的同一个处理器中。操作***上的业务在处理器上的执行是可以通过处理器的多个核心上的处理资源并行执行的,这里的处理器可以为多核处理器,例如,8核处理器,也可以是包含其他数量的核心的处理器,本实施例中对于多核处理器包含的核心数不做限定。
可选地,在本实施例中,上述芯片可以不限于为任何允许在同一个处理器中运行多个操作***的芯片。比如: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外设的控制权,可以通过第二总线对其进行控制。
在上述步骤S202提供的技术方案中,上述第一操作***和第二操作***可以但不限于是应用在芯片上的同一个处理器中的两个不同的操作***,比如:第一操作***可以但不限于为非实时操作***,第二操作***可以但不限于为实时操作***。或者,第一操作***可以但不限于为实时操作***,第二操作***可以但不限于为非实时操作***。依据两个操作***不同的特点(比如操作响应的实时性)可以分别处理不同要求的业务。比如:第一操作***可以但不限于为实时操作***,其操作响应的实时性可能较强,但处理能力可能较弱,可以处理少量的对实时性要求较高的业务,第二操作***可以但不限于为非实时操作***,其操作响应的实时性可能较弱,但处理能力可能较强,可以处理大批量的对实时性要求较低的业务。
可选地,在本实施例中,实时操作***(RTOS)可以但不限于包括FreeRTOS和RTLinux(AReal-Time Linux,亦称作实时Linux,是Linux中的一种实时操作***)等,非实时操作***可以但不限于包括contiki(一个小型、开源、极易移植的多任务电脑操作***)、HeliOS(使用Ruby开发的一套可扩展的移动后端框架)和Linux等。
可选地,在本实施例中,上述处理器的处理资源可以但不限于包括多个处理资源,可以但不限于将处理器的处理资源分配给第一操作***和第二操作***,得到第一处理资源和第二处理资源,比如:以处理器的处理资源包括处理资源A,处理资源B,处理资源C,处理资源D和处理资源E为例,可以但不限于对处理资源进行平均分配,将处理资源A和处理资源B分配给第一操作***,将处理资源C和处理资源D分配给第二操作***,得到第一处理资源为处理资源A和处理资源B,第二处理资源为处理资源C和处理资源D。还可以但不限于对处理资源进行适应性分配,将处理资源A分配给业务量较小的第一操作***,将处理资源B,处理资源C和处理资源D分配给业务量较大的第二操作***,得到第一处理资源为处理资源A,第二处理资源为处理资源B,处理资源C和处理资源D。
可选地,在本实施例中,上述目标处理资源可以但不限于是第二操作***除了第二处理资源之外还需要占用的处理资源,可以但不限于通过检测第二操作***对于第二处理资源使用的情况确定第二操作***所需要的目标处理资源,比如:以分配了N个处理资源给第二操作***,第二操作***正在执行需要占用M个处理资源的任务为例,如果M大于N,则可以但不限于确定第二操作***需要目标处理资源,且在第二操作***的第二处理资源都为空闲的情况下,目标处理资源可以但不限于为M-N个处理资源。
在一个可选的实施方式中,可以但不限于采用以下方式为各个操作***分配操作业务和处理资源:
根据资源动态分配规则将一组待分配业务分配给所述嵌入式***中对应的操作***,其中,所述资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率,业务耦合度,业务重要性,所述嵌入式***包括第一操作***和第二操作***,所述第一操作***和所述第二操作***运行于处理器上,所述第一操作***的响应速度高于所述第二操作***;
确定与所述一组待分配业务对应的资源分配结果,其中,所述资源分配结果用于指示所述处理器的处理资源中与所述一组待分配业务中的每个待分配业务对应的处理资源,所述处理器的处理资源包括处理器核心;
根据与所述每个待分配业务对应的操作***以及所述资源分配结果,将所述处理器的处理资源分配给所述第一操作***和所述第二操作***。
在处理器运行的过程中,可以获取一组待分配业务,即,待分配给第一操作***和第二操作***的业务。由于不同的待分配业务对于响应速度、业务资源占用率、与其他业务的业务耦合度、业务重要性等维度上可能会存在区别,因此,可以预先配置资源动态分配规则,资源动态分配规则可以包括用于进行业务分配的规则,将业务分配给对应的操作***,以便由对应的操作***的处理资源执行分配给自己的业务。可选地,资源动态分配规则可以包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率,业务耦合度,业务重要性,不同的分配规则可以具有对应的优先级,例如,优先级按照由高到低的顺序依次为:业务重要性,业务耦合度,业务响应速度,业务资源占用率。根据源动态分配规则,可以将一组待分配业务(或者待分配任务,不同的待分配业务可以对应于不同的进程)分配给嵌入式***中对应的操作***,得到业务分配结果。
可选地,基于对响应时间的约束,第一操作***可以是具有明确固定的时间约束的操作***,所有处理过程(任务调度)需要在固定的时间约束内完成,否则***会出错,其可以是实时操作***(Real Time Operating System,简称RTOS),例如,FreeRTOS、RTLinux等,还可以是其他嵌入式***中的实时操作***。第二操作***不具备该特征,第二操作***一般采用公平任务调度算法,线程/进程数量增加时,就需要分享CPU时间,任务调试具有不确定性,可称为非实时操作***,例如,contiki、HeliOS、Linux(全称GNU/Linux,是一套可自由传播的类Unix操作***)等,还可以是其他嵌入式***中的非实时操作***,其中,Linux***是一个基于POSIX(Portable Operating System Interface,可移植操作***接口)的多用户、多任务、支持多线程和多CPU的操作***。
对应地,分配给第一操作***的业务通常为实时性业务,实时性业务是指需要在规定的时间内得到调度的业务,该业务需要处理器以足够快的速度予以处理,其处理的结果又能在规定的时间内来控制生产过程或者对处理***做出快速响应。作为一个典型的场景,工业控制中对机器手的控制属于实时性业务,***需要在检测到机器手误操作之前及时采取措施,否则可能会造成严重后果。分配给第二操作***的业务通常为非实时性业务,非实时性业务是指对调度时间不敏感的业务,对调度的延迟具有一定的容忍度,例如,服务器中读取温度传感器(sensor)的传感器数据。
需要说明的是,实时操作***是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理***做出快速响应,调度一切可利用的资源完成实时业务,并控制所有实时业务协调一致运行的操作***具有及时响应和高可靠性的特点。
在将每个待分配业务分配至对应的操作***之后,根据业务分配结果,可以为每个待分配业务分配对应的处理资源,得到与一组待分配业务对应的资源分配结果。在为待分配业务分配处理资源时,可以为分配给第一操作***的业务分配第一操作***的处理资源,分配给第二操作***的业务分配第二操作***的处理资源,同时,考虑到负载均衡,在存在未分配处理资源时,可以为部分业务分配未分配处理资源。
处理器的处理资源可以以时间片为单位进行处理资源的动态分配,考虑到频繁的切换处理资源所属的操作***以及业务处理时间并不一定是时间片的整数倍,从而导致部分业务的响应时间被延长,可以以处理器核心为单位被分配给第一操作***和第二操作***,即,处理器的处理器核心是以整个处理器核心为单位被分配给对应的操作***,每个操作***所分配的处理器核心的数量为整数个,且不同的操作***分配的处理器核心互不相同。
根据与每个待分配业务对应的操作***以及资源分配结果,可以将处理器的处理资源分配给第一操作***和第二操作***。可选地,可以将处理器的未分配处理资源分配给与其对应的操作***,未分配处理资源可以是基于未分配处理资源与待分配业务的对应关系以及待分配业务与操作***的对应关系确定的。
可选地,将处理器的处理资源分配给第一操作***和第二操作***可以是由资源自适应调度模块(例如,核心自适应调度模块)执行的,该资源自适应调度模块可以是运行在第一操作***或者第二操作***上的软件模组,以运行在第二操作***上为例,资源自适应调度模块可以由Linux***中的软件实现,其可以根据业务管理模块的输出和资源动态分配模块的输出,完成对处理器的处理资源(例如,处理器硬核资源)的实际调度动作。比如,经过核心资源自适应模块的资源调度,(M+N)个核心中的M个核心调度给了实时操作***,N个核心调度给了非实时操作***。
例如,可以在同一处理器的不同硬核上运行异构的操作***(异构操作***),使整个处理器***具备实时及非实时业务的并行处理能力,同时,通过自适应调整不同操作***占用的处理器硬核资源(例如,处理器核心),实现处理器资源利用率的显著提升。这里,异构是指嵌入式***的同一个多核处理器中运行的操作***类型不同,多***是指嵌入式***的同一个多核处理器上运行的操作***数量为多个,且这些操作***在时间维度上是同时运行的。
可选地,上述过程还包括:通过读取规则配置文件,生成规则结构体,其中,规则结构体用于记录资源动态分配规则。
资源动态分配规则可以是基于规则配置文件进行配置的,通过读取的规则配置文件,可以生成用于记录资源动态分配规则的规则结构体,这里,规则配置文件可以是负载均衡策略文件(payload_balance.config),负载均衡策略文件可以用于配置运行的各种业务(或进程)的分类方法、实时性等级的评估原则等。负载均衡策略文件中可以不同的参数配置资源动态分配规则,负载均衡策略配置文件的一个示例如下:
classification kinds =2 //取值为1表示按重要和非重要等属性对进程进行分类, 否则按预置的分类方法(如实时与非实时)对进程进行分类;
real-time grade evaluation=2 //取值为1表示将过去统计分钟(statisticminutes)内CPU的平均占用率作为进程实时性等级评估原则;否则表示按预置的优先级作为进程实时性等级评估原则;
statistic minutes =5 //表示各进程的平均占用率的统计时间(单位为minute,分钟),当real-time grade evaluation为1时有效。
可选地,资源动态分配规则可以存储在负载均衡策略模块,这里,负载均衡策略模块可以是运行在第一操作***或者第二操作***下的软件模组(例如,运行在Linux***下的软件模组),其可以为业务管理模块提供策略指导,包括***中运行的各种业务(或进程)的分类方法、实时性等级的评估原则等。业务管理模块可以对***中的业务按实时性等级进行业务划分与管理,进一步指导资源自适应调度模块进行处理器资源的重分配。示例性地,其可以根据负载均衡策略模块的输出,执行业务的实际分类,产生包含实时业务与非实时业务的列表。
需要说明的是,上述分类方法与实时性等级评估原则是开放的,用户可以自己定义某种方法或原则,业务管理模块进行业务管理所基于规则可以是动态配置的,可以在已有规则的基础上进行进一步规则的设置。业务管理模块中可以设置有相同功能的多个规则,但规则之间不存在矛盾,即,可以基于规则的配置时间、规则的优先级等规则选取条件,确定作用相同的规则中,当前使用的规则,从而避免规则之间出现矛盾。上述配置文件load_balance.config描述了一种可能情况,在配置文件中,classification_kinds变量指示具体的分类标准(例如,按业务的重要性或实时性)及分类类别(例如,重要业务和一般业务、实时业务与非实时业务等),而real-time_grade_evaluation变量指示实时性评估标准(可以是按过去statistic_minutes分钟内CPU的平均占用率或预置的业务优先级),实时性等级类型由用户自定义,可定义为高、普通、低三种,也可以细分更多种。
负载均衡策略模块的输出即为配置好的分类方法、实时性等级评估原则等,在软件实现时,可以是具体的配置文件(如load_balance.config文件),也可以是结构体变量,这些文件或结构体变量最终均能被业务管理模块访问到,进而获取负载均衡的具体策略。
通过本实施例,通过读取规则配置文件,生成规则结构体以记录资源动态分配规则,可以信息配置的便捷性。
可选地,上述过程还包括:通过第二操作***的对外接口获取规则更新配置文件,其中,规则更新配置文件用于更新已配置的资源动态分配规则;使用规则更新配置文件更新规则结构体,以更新规则结构体所记录的资源动态分配规则。
规则结构体可以是固定格式,即,在嵌入式***运行的过程中不允许被修改,也可以是可灵活配置的格式,即,可以通过特定格式的配置文件进行配置更改。在本实施例中,可以获取规则更新配置文件,该规则更新配置文件用于更新已配置的资源动态分配规则;使用规则更新配置文件,可以更新规则结构体,从而更新规则结构体所记录的资源动态分配规则。
在使用规则更新配置文件更新规则结构体时,可以是直接根据规则更新配置文件生成新的规则结构体,并使用新生成的规则结构体替换已有的规则结构体,也可以是使用规则更新配置文件所指示的规则参数的参数值更新规则结构体中对应的规则参数的参数值。
可选地,特定格式的配置文件可以是通过第一操作***或者第二操作***的对外接口进行读取的,考虑到所需处理的业务量级,嵌入式***的资源动态调度等可以主要是由第二操作***负责的。在获取规则更新配置文件时,可以通过第二操作***的对外接口获取规则更新配置文件。
例如,负载均衡策略模块可以是固定格式,也可以通过Linux***的对外接口进行配置,例如,可以定义如前述的特定格式的配置文件(load_balance.config),通过文件读写方式进行配置更改。
需要说明的是,对外接口是多核处理器的对外接口,可以是网络接口,SPI(SerialPeripheral Interface,串行外设接口)控制器接口、UART(Universal AsynchronousReceiver/Transmitter,通用异步收发传输器)串口等,只要能从外界获取数据的通路即可。读取文件用到的硬件和具体的文件位置有不同的实现方案,例如,通过网络接口可从Web(World Wide Web,全球广域网)界面加载配置文件;通过SPI控制器可从板卡的SPIFlash(闪存)中读取配置文件;通过UART串口可从另一台PC(Personal Computer,个人计算机)上的串口数据收发软件工具获取配置文件。
通过本实施例,通过获取规则更新配置文件并使用获取的规则更新配置文件更新规则结构体,可以提高资源动态分配规则配置的灵活性。
可选地,可以但不限于采用以下方式根据资源动态分配规则将一组待分配业务分配给嵌入式***中对应的操作***:将一组待分配业务中业务响应速度要求大于或者等于设定响应速度阈值的待分配业务分配给第一操作***,以及,将一组待分配业务中业务响应速度要求小于设定响应速度阈值的待分配业务分配给第二操作***。
在进行待分配业务分配时,可以基于待分配业务的业务响应速度要求将待分配业务分配给对应的操作***。业务响应速度可以用于评估业务的实时性等级,业务响应速度要求越高,其对操作***的调度时间和响应速度越敏感,实时性等级越高,业务响应速度要求高的业务需要操作***以足够快的速度予以处理,其处理的结果又能在规定的时间内来控制生产过程或者对处理***做出快速响应,而业务响应速度要求不高的业务,对调度的延迟具有一定的容忍度。
对于业务响应速度要求大于或者等于设定响应速度阈值的待分配业务,其对操作***的调度时间和响应速度敏感,可以将此类待分配业务分配给第一操作***(例如,将实时业务分配给实时操作***)。对于业务响应速度要求小于设定响应速度阈值的待分配业务,其对响应速度和调度时间不敏感的业务,因此,可以将此类待分配业务分配给第二操作***(例如,将非实时业务分配给非实时操作***)。这里,业务响应速度要求可以是通过业务响应速度的指示参数进行指示的,设定响应速度阈值可以是毫秒级的响应速度阈值或者秒级的响应速度阈值,例如,100ms、200ms、1s等等,本实施例中对于设定响应速度阈值不做限定。
可选地,在将一组待分配业务分配给嵌入式***中对应的操作***时,可以输出与第一操作***对应的第一业务列表和第二操作***对应的第二业务列表,第一业务列表用于记录分配给第一操作***的业务,而第二业务列表用于记录分配给第二操作***的业务,即,业务分配结果包括第一业务列表和第二业务列表,输出的第一业务列表和第二业务列表可以用于进行处理器的处理资源的动态调度过程。
例如,对***业务实时性等级划分,获得实时性业务与非实时性业务列表,假设总共有20个业务,其中实时性业务为业务1和业务2,非实时性业务为业务3~业务20。
这里,业务管理模块可以对当前待执行的业务进行分类,BMC***首次运行时,由于***当前要运行的所有业务对***是已知的,所以业务管理模块根据负载均衡模块的输出对这些业务进行一次分类,分类后不同业务将被分配到不同的操作***(RTOS***与Linux***)中执行,后续运行过程中,如果业务进程出现数量变动(例如,某些进程挂死、或有新的进程启动)时,业务管理模块还会继续进行业务划分,实时地对现存业务按照负载均衡策略进行划分与管理。业务管理模块可以是Linux***中的一个常驻的进程,它本身是一直运行着的,且对当前运行的进程进行管理与划分。
通过本实施例,通过按照业务响应速度要求将待分配业务分配给对应的操作***,可以保证对调度时间敏感的业务的业务响应的及时性。
可选地,可以但不限于采用以下方式根据资源动态分配规则将一组待分配业务分配给嵌入式***中对应的操作***:将一组待分配业务中业务资源占用率小于第一占用率阈值的待分配业务分配给第一操作***,以及,将一组待分配业务中业务资源占用率大于或者等于第一占用率阈值的待分配业务分配给第二操作***。
在进行待分配业务分配时,可以基于待分配业务的业务资源占用率将待分配业务分配给对应的操作***。业务资源占用率可以是单位时间内业务对于处理资源的平均占比(例如,每分钟的CPU占用率),业务资源占用率的高低影响了本业务的响应速度以及后续业务的响应速度,因此,可以基于业务资源占用率评估业务的实时性等级,业务资源占用率越高,其对操作***的调度时间和响应速度的影响越大,实时性等级越低,而业务资源占用率不高的业务,其对操作***的调度时间和响应速度的影响不大,实时性等级越高。
对于业务资源占用率小于第一占用率阈值的待分配业务,其对操作***的调度时间和响应速度的影响不大,可以将此类待分配业务分配给第一操作***。对于业务资源占用率大于或者等于第一占用率阈值的待分配业务,其对操作***的调度时间和响应速度的影响较大,因此,可以将此类待分配业务分配给第二操作***。这里,第一占用率阈值可以根据需要进行配置,其可以是10%、15%、20%或者其他阈值,同时,该第一占用率阈值可以进行动态调整。
通过本实施例,通过按照业务资源占用率将待分配业务分配给对应的操作***,可以保证对业务资源占用率低的业务响应的及时性。
可选地,可以但不限于采用以下方式至少之一根据资源动态分配规则将一组待分配业务分配给嵌入式***中对应的操作***:
将一组待分配业务中与第一操作***的已分配业务的业务耦合度大于或者等于第一耦合度阈值的待分配业务,分配给第一操作***;
将一组待分配业务中与第二操作***的已分配业务的业务耦合度大于或者等于第二耦合度阈值的待分配业务,分配给第二操作***。
在进行待分配业务分配时,可以基于待分配业务的业务耦合度将待分配业务分配给对应的操作***。业务耦合度可以用于表示待分配业务与各个操作***中的已分配业务之间的关联程度。如果一个待分配业务与某一个操作***的已分配业务的业务耦合度较高,则不适宜将其分配给另一个操作***。因此,可以基于待分配业务与各个操作***中的已分配业务之间的业务耦合度,将待分配业务分配给对应的操作***。
可选地,可以通过业务的输入和输出之间的关联评价业务耦合度,业务耦合度可以通过不同的耦合度等级进行表示,如果业务的输入和输出之间没有关系,耦合度等级为低级(或者其他表示业务之间没有关联的耦合度等级),如果一个业务的执行依赖于另一个应用的输出(没有该输出作为输入业务无法开始进行),则业务之间的耦合度等级为高级,如果一个业务的执行用到了另一个应用的输出,但该输出不会妨碍业务的正常执行(在业务执行到对应的操作时能够获取到该输出即可,且对应的操作不是核心操作),则业务之间的耦合度等级为中级。此外,也可以通过数值表示业务耦合度,可以通过一种或多种耦合度条件(例如,输入和输出之间的关联关系)评价业务耦合度,将满足的耦合度条件所对应的数值,确定为业务耦合度的数值。
如果一组待分配业务中存在与第一操作***的已分配业务的业务耦合度大于或者等于第一耦合度阈值的待分配业务,则可以将此类待分配业务分配给第一操作***,而如果一组待分配业务中存在与第二操作***的已分配业务的业务耦合度大于或者等于第一耦合度阈值的待分配业务,则可以将此类待分配业务分配给第二操作***。
例如,除了产生实时业务列表和非实时业务列表,业务管理模块还负责业务解耦评估与管理,即,从所有实时业务中找出可以独立出来交给实时操作***运行的业务,以便硬件资源动态分配模块进行处理器资源的重分配,对于不能独立出来交给实时操作***运行的业务,如果其与非实时业务的业务耦合度高,则可以将其分配给非实时操作***。
这里,由于有些业务虽然具有实时性要求,但它与***中的其他非实时业务的交互非常频繁(即,业务耦合度高),这时,为了提升整体的数据交互效率,把这类业务分配给非实时操作***。而还有一类实时业务,它本身相对独立,这时只需要将其划分到实时操作***即可,这个过程即为“解耦”操作。判断业务独立出来的标准并不唯一,可以是上述业务间关联的密切程度,也可以是其他用户关切的指标。
重分配的策略是开放的,一种可能的策略为:***首次运行时,根据业务管理模块分配给实时操作***与非实时操作***的业务数量的比例分配处理器核心,后续运行过程中根据双***中各自的核心资源占用率调整资源分配,从这个角度讲,重分配过程与核心抢占与释放过程是相互配合的过程。
通过本实施例,通过按照业务耦合度将待分配业务分配给对应的操作***,可以保证对业务耦合度较高的多个业务进行业务处理的准确性。
可选地,可以但不限于采用以下方式根据资源动态分配规则将一组待分配业务分配给嵌入式***中对应的操作***:
将一组待分配业务中包含敏感信息的待分配业务,分配给目标操作***,其中,目标操作***是第一操作***和第二操作***中,与使用对象交互频率低的操作***。
在本实施例中,对于包含敏感数据(例如,密码等敏感信息)的待分配业务(其可以为重要敏感型的业务,比如,不希望暴露给用户的业务),其可以被分配到目标操作***,通过目标操作***对包含敏感信息的待分配业务进行硬核级别的安全防护隔离,这里,目标操作***是第一操作***和第二操作***中,与使用对象交互频率低的操作***,或者,响应速度快的操作***,例如,第一操作***。
例如,该业务处理模块负责进一步对***业务进行硬核级别的安全防护隔离,即,将重要敏感型(不希望暴露给用户)的业务划分为实时业务,最终可以实现这些业务由非实时操作***至实时操作***的卸载,起到安全防护的效果。这里,该业务处理模块划分出的不同业务在软件实现时可以采用结构体的形式进行组织。通过对异构操作***间安全空间进行设计,将敏感型业务由非实时操作***卸载至实时操作***,达到硬核级别安全防护的目的。这里,敏感性业务是指:与安全相关的业务,比如,用户密码、身份信息等涉及用户个人隐私的业务。
这里,硬核级别是指业务在处理器核心层面进行了隔离,即,敏感型业务分配给实时操作***(实时操作***所占核心区别于非实时操作***,所以属于核心层面的隔离),实时操作***与非实时操作***相比,与用户交互的频率和程度相对较弱,所以作为使用者的用户很难“探测”到运行在其上的业务产生的敏感数据。对于上层应用而言,用户的身份认证管理、安全加密等业务属于上述重要敏感性业务,通过业务管理模块将上述业务强行划分为实时业务,后续进行硬件资源动态分配时就能实现上述业务在实时操作***运行,起到安全隔离效果。
通过本实施例,通过将包含敏感信息的待分配业务分配给与用户交互频率低的操作***,可以对***业务进行硬核级别的安全防护隔离,提高业务执行的安全性。
可选地,可以但不限于采用以下方式确定与一组待分配业务对应的资源分配结果:
根据一组待分配业务的分配结果,结合第一操作***的处理资源的资源利用情况和第二操作***的处理资源的资源利用情况,生成一组待分配业务与处理器的处理资源的映射表。
在本实施例中,一组待分配业务的分配结果用于指示待分配业务与操作***之间的对应关系,分配给一个操作***的待执行业务通常使用该操作***的处理资源执行,而如果某一操作***分配的业务量过大且当前存在未分配处理资源,则也可以为分配给某一操作***的待分配业务分配未分配处理资源。因此,根据一组待分配业务的分配结果,结合第一操作***的处理资源的资源利用情况和第二操作***的处理资源的资源利用情况,可以生成一组待分配业务与处理器的处理资源的映射表,以指示为每个待分配业务所分配的处理资源。
这里,每个待分配业务仅与某一处理器核心具有映射关系,而同一处理器核心可与多个待分配业务具有映射关系,不同的业务可以通过占用同一处理器核心的不同时间片与同一处理器核心具有映射关系。在同一时间,同一处理器核心仅被一个业务占用,即,仅用于执行一个业务。分配给一个操作***的不同业务可以按照分配时间、业务响应速度要求或者其他方式确定占用同一处理器资源的时间片。
例如,资源动态分配模块根据业务管理模块的输出结果,对处理器资源进行动态调整,形成不同业务与实际硬件资源的映射表,优化不同硬件资源在异构操作***下的部署结构,以达到提升全***硬件资源利用率的目的。上述资源动态分配过程由第二操作***中的软件进行管理配置。
以八核处理器(核心1~核心8)为例,已调度给第一操作***的处理器核心包括:核心1,已调度给第二操作***的处理器核心包括:核心2、核心3和核心4,待分配的业务有6个,实时性业务为业务1和业务2,非实时性业务为业务3~业务6,为6个业务分配对应的处理器核心,为业务1分配核心1,为业务2分配核心5,为业务3分配核心2,为业务4分配核心3,为业务5分配核心4,为业务6分配核心6。
通过本实施例,基于业务与操作***的对应关系,结合不同操作***的处理资源的使用情况进行处理资源的动态分配,可以保证处理资源分配的合理性。
可选地,可以但不限于采用以下方式根据与每个待分配业务对应的操作***以及资源分配结果,将处理器的处理资源分配给第一操作***和第二操作***:在根据资源分配结果确定处理器的处理资源中的未分配处理资源存在对应的待分配业务的情况下,将未分配处理资源分配给与未分配处理资源对应的待分配业务所分配给的操作***。
在进行处理资源分配时,如果处理器的处理资源中的未分配处理资源存在对应的待分配业务,即,为待分配业务分配了未分配处理资源,可以将未分配处理资源分配给与未分配处理资源对应的待分配业务所分配给的操作***。
可选地,资源自适应调度模块可以根据硬件资源动态分配的结果,完成对处理器的处理资源的实际调度动作。资源自适应调度模块调度一部分处理器核心执行分配给第一操作***的业务,比如核心组1的M个核心,调度其余的处理器核心运行分配给第二操作***的业务,比如核心组2的N个核心。
以前述八核处理器为例,根据业务分配结果和资源分配结果,可以将未分配的核心4分配给第一操作***,将未分配的核心5和核心6分配给Linux***。整个调度过程可以由 第二操作***主导。
通过本实施例,基于资源分配结果将未分配的处理器资源调度给对应的操作***,可以提高处理器资源的利用率。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二操作***确定目标处理资源:通过所述第二操作***监控所述第二处理资源是否满足所述第二操作***上业务的运行;在确定所述第二处理资源不满足所述第二操作***上业务的运行的情况下,通过所述第二操作***估算所述目标处理资源的资源信息。
可选地,在本实施例中,上述第二操作***可以但不限于用于运行多个业务,在第二操作***上运行业务可以但不限于需要多种处理资源,比如:存储资源(内存,闪存,硬盘等等),外设资源(外设接口等等)和处理器中断资源(中断号,中断指令,中断请求等等)等等。
可选地,在本实施例中,可以但不限于根据第二操作***上业务的运行所需要的资源与第二操作***的第二处理资源确定第二操作***的第二处理资源是否满足第二操作***上业务的运行,比如:以第二操作***的第二处理资源包括M个能够运行业务的处理资源,第二操作***上运行业务需要N个处理资源为例,在第二处理资源中能够运行业务的处理资源大于或者等于第二操作***上业务的运行所需要的资源(M大于或者等于N)的情况下,可以但不限于确定第二处理资源满足第二操作***上业务的运行。或者,在第二处理资源中能够运行业务的处理资源小于第二操作***上业务的运行所需要的资源(M小于N)的情况下,可以但不限于确定第二处理资源不满足第二操作***上业务的运行。
可选地,在本实施例中,上述目标处理资源可以但不限于是第二处理资源满足第二操作***上业务的运行所需要的处理资源,目标处理资源的资源信息可以但不限于包括第二处理资源满足第二操作***上业务的运行所需要的处理资源的数量以及处理资源的类型等等。
在一个示例性实施例中,可以但不限于采用以下之一的方式,通过所述第二操作***监控所述第二处理资源是否满足所述第二操作***上业务的运行:通过所述第二操作***监控所述第二处理资源中的剩余存储资源是否大于存储阈值,其中,在所述剩余存储资源小于或者等于所述存储阈值的情况下所述第二处理资源不满足所述第二操作***上业务的运行;通过所述第二操作***监控所述第二操作***上业务是否使用除所述第二处理资源中的外设资源之外的参考外设资源,其中,在所述第二操作***上业务使用所述参考外设资源的情况下所述第二处理资源不满足所述第二操作***上业务的运行;通过所述第二操作***监控所述第二操作***上业务是否使用除所述第二处理资源中的处理器中断资源之外的参考处理器中断资源,其中,在所述第二操作***上业务使用所述参考处理器中断资源的情况下所述第二处理资源不满足所述第二操作***上业务的运行。
可选地,在本实施例中,存储资源可以但不限于包括多个存储设备的资源,比如:内存的资源,磁盘的资源等等。如果操作***所分配到的存储资源无法满足其运行需求,操作***可以统计出额外需要的存储资源并从为其他操作***分配的处理资源中抢占或者协调。从而实现外设资源的合理再分配。
可选地,在本实施例中,上述剩余存储资源可以但不限于是第二操作***的第二处理资源中未被占用的存储资源。
可选地,在本实施例中,上述存储阈值可以但不限于是预先确定的,存储阈值可以但不限于用于指示第二处理资源中存储资源占用的合理的范围,可以但不限于根据存储资源对于第二操作***使用的影响预先确定存储阈值,比如:以预先为第二操作***分配了第二处理资源为例,可以但不限于通过检测第二操作***未被占用的存储资源大于或者等于一定范围时,第二操作***能够正常使用,可以但不限于将该一定范围的边界值确定为存储阈值。
可选地,在本实施例中,外设资源可以但不限于包括输入设备和输出设备,比如:输入设备中的键盘,鼠标器,扫描仪,数码相机,语音输入***,手写输入***,IC(Integrated Circuit Chip,将大量的微电子元器件(晶体管、电阻、电容等)形成的集成电路放在一块塑基上,做成一块芯片)卡输入***等等;输出设备中的显示***,各种打印机和绘图仪,软盘存储器,硬盘存储器,外存储设备,多媒体设备中的光盘驱动器,声卡,音箱,视频卡,电视等等。外设资源也可以但不限于包括允许芯片控制的外设接口,比如:I2C、RTC(Real_Time Clock,时钟芯片)、GPIO、PECI、PWM等芯片外设对应的控制器。
可选地,在本实施例中,上述参考外设资源可以但不限于是运行第二操作***上的业务所需要的除了第二处理资源中包括的外设资源,还需要的外设资源。如果操作***所分配到的外设资源无法满足其运行需求,操作***可以统计出额外需要的外设资源并从为其他操作***分配的处理资源中抢占或者协调。从而实现外设资源的合理再分配。
可选地,在本实施例中,上述处理器中断资源可以但不限于用于执行操作***所需要的事件,其可以但不限于包括:中断程序的执行,执行处理事件的服务程序,中断号等等。如果操作***所分配到的处理器中断资源无法满足其运行需求,操作***可以统计出额外需要的处理器中断资源并从为其他操作***分配的处理资源中抢占或者协调。从而实现处理器中断资源的合理再分配。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二操作***估算所述目标处理资源的资源信息:通过所述第二操作***确定所述目标处理资源的资源类型,其中,所述资源类型包括以下至少之一:存储资源,外设资源,处理器中断资源;通过所述第二操作***估算每种资源类型对应的资源量。
可选地,在本实施例中,目标处理资源的资源类型可以但不限于包括一种处理资源或者多种处理资源,比如:以处理资源的资源类型包括存储资源,外设资源,处理器中断资源为例,目标处理资源的资源类型可以但不限于包括存储资源,外设资源和处理器中断资源。或者,目标处理资源的资源类型可以但不限于包括存储资源,外设资源和处理器中断资源中的任意两种处理资源。或者,目标处理资源的资源类型可以但不限于包括存储资源,外设资源和处理器中断资源中的任意一种处理资源。第二操作***首先确定出哪些资源类型的处理资源需要抢占,再估算出每种资源类型的处理资源需要抢占的资源量,从而进行处理资源的抢占。
可选地,在本实施例中,可以但不限于根据第二操作***中已经使用的第二处理资源与运行第二操作***上的业务所需要的处理资源估算目标处理资源的资源类型以及每种资源类型对应的资源量,比如:以运行第二操作***上的业务所需要的处理资源包括M个外设资源,第二操作***中未使用的外设资源有N个(M大于N)为例,可以但不限于确定目标处理资源的资源类型为外设资源,估算外设资源对应的资源量为M-N。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二操作***估算每种资源类型对应的资源量:在所述资源类型包括所述存储资源的情况下,通过所述第二操作***估算所述目标处理资源中待占用的目标存储量;在所述资源类型包括所述外设资源的情况下,通过所述第二操作***估算待占用的参考外设资源的外设标识和/或外设数量;在所述资源类型包括所述处理器中断资源的情况下,通过所述第二操作***估算待占用的参考处理器中断资源的中断数量。
可选地,在本实施例中,对于存储资源来说,可以估算需要占用的目标存储量作为存储资源对应的资源量。或者还可以划分不同的存储资源的类型,并估算每种存储资源的类型所需占用的存储量作为存储资源对应的资源量。
可选地,在本实施例中,对于外设资源来说,可以估算需要占用的外设数量作为外设资源对应的资源量。或者还可以估算具体需要占用哪些外设资源得到外设标识作为外设资源对应的资源量。
可选地,在本实施例中,对于处理器中断资源来说,可以估算需要占用的中断数量作为处理器中断资源对应的资源量。或者还可以估算具体需要占用哪些处理器中断资源得到处理器中断标识作为处理器中断资源对应的资源量。
在一个可选的实施方式中,提供了一种资源动态配置的判断过程。图4是根据本申请实施例的一种资源动态配置的判断过程的流程图,如图4所示,可以但不限于通过以下方式估算***间的资源占用:
在第一操作***和第二操作***都保持稳定运行的情况下,读取第二操作***中存储资源,外设资源以及处理器中断资源的使用情况,根据第二操作***中存储资源,外设资源以及处理器中断资源的使用情况,判断存储资源,外设资源以及处理器中断资源是否能够满足第二操作***上业务的运行。在存储资源,外设资源以及处理器中断资源不能够满足第二操作***上业务的运行的情况下,估算第二操作***上业务的运行所需要的目标处理资源的资源类型和资源数量,并根据目标处理资源的资源信息向第一操作***执行资源占用过程。
可选地,在本实施例中,在芯片上可以但不限于配置单个进程执行上述资源动态配置的判断过程,也可以但不限于针对需要监控的不同资源类型分别配置对应的进程互不干扰的进行各种资源类型的监控。
可选地,在本实施例中,如果采用单个进程执行各种资源类型的监控,那么可以在监控程序的每个循环中轮流监控一种资源类型。
在上述步骤S204提供的技术方案中,第一操作***将目标处理资源释放给第二操作***使用。第一操作***首先从第一处理资源中找到满足目标处理资源需求的处理资源,再对其执行释放操作。对于不同类型的处理资源可以但不限于执行不同的释放操作。比如解除对于处理资源的绑定,将处理资源的使用状态设置为当前禁止使用等等。
可选地,在本实施例中,第一操作***可以但不限于根据第二操作***所指示的目标处理资源的资源类型和资源数量释放对应资源类型和资源数量的目标处理资源。比如:第二操作***可以明确指示出希望抢占的目标处理资源(存储地址从A到B的存储资源,外设C,外设D和中断号E和F),第一操作***从为其分配的第一处理资源中将第二操作***所指示的处理资源释放。第二操作***也可以只指示出希望抢占的目标处理资源的形式(G大小的存储资源,两个外设和两个中断号),第一操作***从第一处理资源中找到符合要求的处理资源存储地址从A到B的存储资源,外设C,外设D和中断号E和F,并将这些处理资源释放。
可选地,在本实施例中,操作***之间可以但不限于采用传输指令,核间通信等方式进行处理资源释放占用等方面的交互。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第一操作***从所述第一处理资源中释放所述目标处理资源:通过所述第二操作***向所述第一操作***发送第一中断请求,其中,所述第一中断请求用于指示抢占所述目标处理资源;通过所述第一操作***从所述第一处理资源中释放所述目标处理资源;通过所述第一操作***向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示已释放所述目标处理资源。
可选地,在本实施例中,操作***之间传输中断请求的方式可以但不限于采用软件方式(比如基于协议传输指令,信号等等),或者也可以采用硬件方式(比如基于硬件设备传输指令,信号等等)。
可选地,在本实施例中,可以但不限于由第二操作***主动向第一操作***请求需要抢占的目标处理资源。第一操作***响应第二操作***发送的请求来对目标处理资源进行释放,并将释放结果通过中断请求通知给第二操作***。
可选地,在本实施例中,第一中断请求用于指示抢占所述目标处理资源,目标处理资源的信息可以携带在第一中断请求中。或者目标处理资源的信息也可以先存放在一个双方约定好的位置,第一中断请求只将处理资源抢占的事件告知给第一操作***,具体需要第一操作***释放怎样的处理资源可以由第一操作***到约定的位置获取。
操作***运行的过程中,可以进行业务数据的交互,交互的过程可以但不限于采用存储空间和中断请求配合传输的方式来实现,操作***之间通过存储空间来传递数据,通过中断请求来进行相互之间指令的通知。比如:获取第一操作***基于处理器运行的过程中产生的业务数据;将业务数据存储至处理器上的存储空间;向第二操作***发送一个中断请求,其中,该中断请求用于请求第二操作***从存储空间读取业务数据,第二操作***用于响应该中断请求从存储空间读取业务数据。
可选地,在本实施例中,第一操作***基于处理器运行的过程中产生的业务数据被存储在处理器上的存储空间中,通过一个中断请求通知第二操作***,由第二操作***从存储空间中读取出业务数据,从而实现业务数据的交互。
可选地,在本实施例中,操作***之间交互的业务数据可以但不限于是操作***运行操作业务过程中任何需要在***间进行传输的数据。比如:业务的过程数据,业务的结果数据等等。
可选地,在本实施例中,处理器上的存储空间中可以但不限于为操作***之间的交互过程配置专用的存储位置,可以称为共享内存,该共享内存可以但不限于按照操作***再继续分配,即每个操作***对应一段专用的共享内存。
第一操作***所对应的共享内存的信息(比如:存储地址)可以携带在用于请求第二操作***从存储空间读取业务数据的一个中断请求中,第二操作***响应该中断请求到其指示的共享内存上读取业务数据。
在本实施例中,各个中断请求可以但不限于通过软件协议的方式在***间进行传输,或者也可以通过硬件模块进行传递。以硬件模块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中断号是为核间通信保留的软中断号。
在多核异构操作***中,为了最大程度的兼容当下的资源分配方式,使用8-15号(共8个中断)表征核间中断向量表,在第一操作***为RTOS操作***,第二操作***为Linux操作***的情况下,向量表的一种可行分配方案如表1所示:
表1
Figure SMS_1
在一个示例性实施例中,通过硬件中断的方式向第二操作***发送中断通知消息。
可选的,硬件中断是指通过硬件设备产生的中断,可以为私有外设中断,也可以为共享外设中断,需要说明的是,硬中断是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,则表明没有符合要求的内存页供操作***使用,释放动态申请内存的锁,本次动态申请内存失败。
此外,动态申请了空间之后发现空间不够用时还可以动态调整大小,具体,可以再次发出更新后的内存申请指令,并对内存执行加锁操作,在加锁成功的情况下,若更新后的内存申请指令需要申请的内存空间增大,判断已申请的目标连续内存之后是否存在所需的内存空间,在存在的情况下,申请成功,若更新后的内存申请指令需要申请的内存空间减小,则释放部分内存空间。
本实施例通过划分多个存储区,利用索引位置根据实际需要的空间大小动态申请,使用完成后释放掉,并且动态申请了空间之后发现空间不够用时还可以动态调整大小,可以达到提高共享内存灵活性以及使用效率的效果。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二操作***向所述第一操作***发送第一中断请求:通过所述第二操作***将所述目标处理资源的资源信息存储至所述芯片上的共享内存中;通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于指示抢占所述共享内存中存储的所述资源信息所指示的所述目标处理资源。
可选地,在本实施例中,操作***之间可以但不限于采用中断与共享内存结合的方式传输中断请求。操作***将需要交互的实际内容存储到芯片上的共享内存中,并通过中断请求来告知对方从共享内存中获取具体内容。
可选地,在本实施例中,上述芯片上的共享内存可以但不限于是第一操作***和第二操作***都能够访问的内存空间,第一操作***和第二操作***可以但不限于通过芯片上的共享内存进行信息交流,比如:可以但不限于将包括第二操作***所需要的资源类型和资源数量的目标处理资源的资源信息存储至芯片上的共享内存中,第一操作***可以但不限于通过访问芯片上的共享内存获取目标处理资源的资源信息。
可选地,在本实施例中,提供了一种写入共享内存的资源信息格式的示例。表2是根据本申请实施例的写入共享内存的资源信息格式的示例,如表2所示,可以但不限于将以下格式的资源信息写入共享内存:
字段Type的大小为8字节,0代表存储资源,1代表外设资源,2代表处理器中断资源。
字段MemSize的大小为8字节,代表需要抢占的存储资源的目标存储量。
字段DevName的大小为16字节,代表需要抢占的外设资源的外设标识(可以但不限于为外设资源的名称)。
字段DevNum的大小为8字节,代表需要抢占的外设资源的外设数量。
字段IntNum的大小为8字节,代表需要抢占的处理器中断资源的中断数量。
表2
Figure SMS_2
在一个示例性实施例中,可以但不限于采用以下方式通过所述第一操作***从所述第一处理资源中释放所述目标处理资源:通过所述第一操作***响应所述第一中断请求从所述共享内存中读取所述资源信息;通过所述第一操作***从所述第一处理资源中释放满足所述资源信息的所述目标处理资源。
可选地,在本实施例中,第一中断请求可以但不限于用于指示第一操作***访问共享内存,第一操作***可以但不限于通过访问共享内存读取包括第二操作***所需要的资源类型和资源数量的目标处理资源的资源信息。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第一操作***从所述第一处理资源中释放所述目标处理资源:通过所述第一操作***确定所述目标处理资源当前是否被使用;在所述目标处理资源当前未被使用的情况下,释放所述目标处理资源;在所述目标处理资源当前被使用的情况下,挂起当前使用所述目标处理资源的参考业务;从所述第一处理资源中释放所述目标处理资源。
可选地,在本实施例中,第二操作***所需要的目标处理资源可以但不限于是第一操作***中正在使用的处理资源。或者,第二操作***所需要的目标处理资源可以但不限于是第一操作***中处于空闲状态的处理资源。或者,第二操作***所需要的目标处理资源可以但不限于包括多个处理资源,其中,第一操作***中的目标处理资源可以但不限于是一部分处于空闲状态的处理资源,另一部分是处于正在使用中的处理资源。
可选地,在本实施例中,上述参考业务可以但不限于是第一操作***中占用了第二操作***所需要的目标处理资源的业务,可以但不限于通过挂起当前使用目标处理资源的参考业务来保证参考业务后续的正常运行。
在一个示例性实施例中,在所述从所述第一处理资源中释放所述目标处理资源之后,可以但不限于采用以下方式恢复所述参考业务运行:检测所述第一处理资源中除所述目标处理资源之外的处理资源是否满足所述参考业务的运行需求;在满足所述参考业务的运行需求的情况下,使用所述第一处理资源中除所述目标处理资源之外的处理资源恢复所述参考业务运行。
可选地,在本实施例中,可以但不限于通过使用第一操作***中除了目标处理资源外的处理资源实现运行被挂起的参考业务,比如:在将第一处理资源中的目标处理资源释放后,第一处理资源可以但不限于包括多个空闲的处理资源,可以但不限于使用第一处理资源中空闲的处理资源继续运行被挂起的参考业务。
在上述步骤S206提供的技术方案中,第二操作***可以但不限于通过将第一操作***释放的目标处理资源添加至第二处理资源中实现获取目标处理资源。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二操作***将所述目标处理资源添加至所述第二处理资源中:通过所述第二操作***初始化所述目标处理资源;通过所述第二操作***将初始化后的所述目标处理资源添加至所述第二处理资源中。
可选地,在本实施例中,第二操作***对抢占的目标处理资源进行初始化后将其添加至为其分配的第二处理资源中以供操作业务使用。
可选地,在本实施例中,第二操作***还可以将共享内存中的相关信息(比如资源信息)清除,以便释放出共享内存的资源。
在一个可选的实施方式中,提供了一种***间资源动态配置的交互的过程。图5是根据本申请实施例的***间资源动态配置的交互过程的示意图,如图5所示,以第一操作***为RTOS***,第二操作***为Linux***为例,可以但不限于通过以下方式完成***间资源动态配置的交互:
步骤S502:在Linux***需要占用RTOS***的资源的情况下,Linux***可以但不限于向RTOS***发起核间中断,并将需要抢占的资源的类型、大小、数量等信息(目标处理资源的资源信息)写入共享内存。
步骤S504:在RTOS***检测到Linux***发起的核间中断的情况下,RTOS***可以但不限于通过以下方式进行资源的释放:
步骤S504-1:从共享内存中读取需要抢占的资源的类型、大小、数量等信息,再判断需要抢占的资源是否正在被某个应用使用。
步骤S504-2:在需要抢占的资源正在被某个应用使用的情况下,挂起使用该需要抢占的资源的应用。
步骤S504-3:释放需要抢占的资源。
步骤S504-4:检测RTOS***中剩余的资源能否恢复被挂起的应用的运行,如果能,则恢复该应用的运行。
步骤S506:在RTOS***完成了资源的释放的情况下,可以但不限于通过向Linux***发起核间中断,告知Linux***资源已被释放。
步骤S508:当Linux***检测到RTOS***发起的核间中断,可以但不限于先将资源进行初始化再进行使用,并清除共享内存中的目标处理资源的资源信息。
在一个示例性实施例中,***间的资源占用可以但不限于采用以下方式:引导所述第一操作***启动;引导所述第二操作***启动。
可选地,在本实施例中,第一操作***和第二操作***可以但不限于先后启动,第一操作***可以但不限于比第二操作***启动更快,第一操作***也可以但不限于比第二操作***启动所需的条件更简单,在第一操作***先启动后可以运行能够满足第二操作***启动所需的条件,或者能够加快第二操作***启动的业务,从而使得多***能够更加高效快速地启动并运行业务。
比如:引导第一操作***启动后可以由第一操作***运行能够控制芯片环境参数达到第二操作***启动要求的业务(比如:风扇运行,参数控制等业务),使得芯片环境参数迅速达成第二操作***启动运行的环境,提高操作***的启动效率和运行效率。
可选地,在本实施例中,第一操作***可以但不限于由第一操作***的引导程序引导启动,第二操作***可以但不限于由第二操作***的引导程序引导启动。或者,二者可以由同一个引导程序先后引导启动。
在一个示例性实施例中,可以但不限于采用以下方式引导所述第一操作***启动:所述芯片启动上电,通过所述处理器唤醒所述处理器中为所述第一操作***分配的第一处理器核心;通过所述第一处理器核心执行所述第一操作***的引导程序引导所述第一操作***启动。
可选地,在本实施例中,可以但不限于根据第一操作***所在的处理器所具有的处理器核心确定第一操作***的第一处理器核心,比如:第一操作***所在的处理器可以但不限于包括多个处理器核心(处理器核心0至处理器核心N),可以但不限于将多个处理器核心中的一个或者多个处理器核心(比如处理器核心0)分配给第一操作***作为第一操作***的第一处理器核心。
可选地,在本实施例中,上述第一操作***的引导程序可以但不限于存储于芯片上的特定存储空间中专门用于启动第一操作***。
可选地,在本实施例中,上述第一操作***的第一处理器核心可以但不限于用于执行第一操作***的引导程序,可以但不限于通过执行第一操作***的引导程序启动第一操作***。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第一处理器核心执行所述第一操作***的引导程序引导所述第一操作***启动:通过所述第一处理器核心执行二级程序加载器,其中,所述第一操作***的引导程序包括所述二级程序加载器;通过所述二级程序加载器加载所述第一操作***。
可选地,在本实施例中,第一操作***的引导程序可以但不限于包括所述二级程序加载器,第一处理器核心可以但不限于通过执行二级程序加载器(Second ProgramLoader,SPL)加载第一操作***。
在一个示例性实施例中,可以但不限于采用以下方式引导所述第二操作***启动:通过所述二级程序加载器唤醒为所述第二操作***分配的第二处理器核心;通过所述第二处理器核心执行所述第二操作***的引导程序引导所述第二操作***启动。
可选地,在本实施例中,可以但不限于根据第二操作***所在的处理器的处理器核心确定第二操作***的第二处理器核心,比如:第二操作***所在的处理器可以但不限于包括多个处理器核心(处理器核心0至处理器核心N),可以但不限于将多个处理器核心中的一个或者多个处理器核心(处理器核心1至处理器核心N)分配给第二操作***作为第二操作***的第二处理器核心。
可选地,在本实施例中,可以但不限于根据二级程序加载器唤醒第二操作***的第二处理器核心,比如:在使用二级程序加载器加载第一操作***完成后,可以但不限于通过二级程序加载器唤醒第二操作***的第二处理器核心。或者,在使用二级程序加载器加载第一操作***的过程中,可以但不限于通过二级程序加载器唤醒第二操作***的第二处理器核心。
可选地,在本实施例中,可以但不限于使用第二处理器核心执行第二操作***的引导程序引导第二操作***启动。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第二处理器核心执行所述第二操作***的引导程序引导所述第二操作***启动:通过所述第二处理器核心执行通用引导加载器,其中,所述第二操作***的引导程序包括所述通用引导加载器;通过所述通用引导加载器加载所述第二操作***。
可选地,在本实施例中,第二处理器核心可以但不限于通过执行通用引导加载器加载第二操作***,通用引导加载器可以但不限于包括U-Boot(Universal Boot Loader)。
在一个示例性实施例中,可以但不限于采用以下方式通过所述第一处理器核心执行二级程序加载器:通过所述芯片上的引导存储器对所述二级程序加载器的代码进行安全启动检查;在检查结果为正常的情况下,通过所述第一处理器核心执行所述二级程序加载器。
可选地,在本实施例中,操作***的引导程序可以但不限于包括二级程序加载器,可以但不限于将操作***的引导程序作为上述引导存储器,通过引导存储器验证操作***的引导程序包括的二级程序加载器的代码,比如:可以但不限于根据第一操作***的引导程序(引导程序可以但不限于为BootROM)得到第一操作***的二级程序加载器(二级程序加载器可以但不限于SPL),可以但不限于根据第一操作***的引导存储器(引导存储器可以但不限于为BootROM)验证二级程序加载器的代码。
可选地,在本实施例中,引导存储器对二级程序加载器的代码进行安全启动检查的过程可以但不限于为:引导存储器读取二级程序加载器的代码以及验证码,通过约定的运算方式(比如哈希运算)对二级程序加载器的代码进行运算,得到运算值,再将该运算值与读取的验证码进行比对,二者一致则检查结果为正常,二者不一致则检查结果为异常。
可选地,在本实施例中,二级程序加载器也可以对通用引导加载器的代码进行安全启动检查,二级程序加载器读取通用引导加载器的代码以及验证码,通过约定的运算方式(比如哈希运算,与上述引导存储器检查二级程序加载器的运算方式可以相同也可以不同)对通用引导加载器的代码进行运算,得到运算值,再将该运算值与读取的验证码进行比对,二者一致则检查结果为正常,二者不一致则检查结果为异常。检查结果为正常的情况下,再通过所述通用引导加载器加载第二操作***。
在一个示例性实施例中,提供了一种第一操作***和第二操作***启动的示例。以第一处理器核心为CPU-0,第二处理器核心为CPU-1至CPU-N为例,可以但不限于通过以下方式启动第一操作***和第二操作***:芯片启动上电;唤醒处理器中第一操作***的第一处理器核心CPU-0;使用第一处理器核心CPU-0执行第一操作***的引导程序,可以但不限于为二级程序加载器;通过芯片上的引导存储器(可以但不限于为BootROM)对二级程序加载器的代码进行安全启动检查;检查结果为正常,通过第一处理器核心执行二级程序加载器(可以但不限于为SPL)加载第一操作***;通过二级程序加载器唤醒第二操作***的第二处理器核心CPU-1至CPU-N;通过第二处理器核心执行通用引导加载器(可以但不限于为U-Boot)加载第二操作***。
在一个可选的实施方式中,提供了一种***间的资源动态占用的过程。图6是根据实施例的***间的资源动态占用的流程图,如图6所示,以第一操作***为RTOS***,第二操作***为Linux***为例,可以但不限于通过以下方式实现***间的资源动态占用:
首先当芯片上电后,依次加载RTOS***和Linux***镜像运行,在RTOS***和Linux***稳定运行的过程中,监控Linux***中应用的运行情况,如果检测到Linux***中的资源(可以但不限于包括存储资源,外设资源以及处理器中断资源)不能满足Linux***中应用的运行要求,就可以认为Linux***满足了资源动态占用的条件。Linux***向RTOS***发送核间中断,Linux***同时向共享内存的指定地址内写入需要占用的资源信息。
当RTOS***检测到Linux***发送的核间中断,RTOS***从共享内存中读取需要占用的资源信息,并释放需要占用的资源信息的对应的资源。
RTOS***释放资源成功后,向Linux***发送核间中断。
当Linux***检测到RTOS***发送的核间中断时,Linux***初始化占用的资源开始使用。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如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.根据权利要求2所述的方法,其特征在于,所述通过所述第二操作***估算所述目标处理资源的资源信息,包括:
通过所述第二操作***确定所述目标处理资源的资源类型,其中,所述资源类型包括以下至少之一:存储资源,外设资源,处理器中断资源;
通过所述第二操作***估算每种资源类型对应的资源量。
5.根据权利要求4所述的方法,其特征在于,所述通过所述第二操作***估算每种资源类型对应的资源量,包括:
在所述资源类型包括所述存储资源的情况下,通过所述第二操作***估算所述目标处理资源中待占用的目标存储量;
在所述资源类型包括所述外设资源的情况下,通过所述第二操作***估算待占用的参考外设资源的外设标识和/或外设数量;
在所述资源类型包括所述处理器中断资源的情况下,通过所述第二操作***估算待占用的参考处理器中断资源的中断数量。
6.根据权利要求1所述的方法,其特征在于,所述通过所述第一操作***从所述第一处理资源中释放所述目标处理资源,包括:
通过所述第二操作***向所述第一操作***发送第一中断请求,其中,所述第一中断请求用于指示抢占所述目标处理资源;
通过所述第一操作***从所述第一处理资源中释放所述目标处理资源;
通过所述第一操作***向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示已释放所述目标处理资源。
7.根据权利要求6所述的方法,其特征在于,所述通过所述第二操作***向所述第一操作***发送第一中断请求,包括:
通过所述第二操作***将所述目标处理资源的资源信息存储至所述芯片上的共享内存中;
通过所述第二操作***向所述第一操作***发送所述第一中断请求,其中,所述第一中断请求用于指示抢占所述共享内存中存储的所述资源信息所指示的所述目标处理资源。
8.根据权利要求7所述的方法,其特征在于,所述通过所述第一操作***从所述第一处理资源中释放所述目标处理资源,包括:
通过所述第一操作***响应所述第一中断请求从所述共享内存中读取所述资源信息;
通过所述第一操作***从所述第一处理资源中释放满足所述资源信息的所述目标处理资源。
9.根据权利要求6所述的方法,其特征在于,所述通过所述第一操作***从所述第一处理资源中释放所述目标处理资源,包括:
通过所述第一操作***确定所述目标处理资源当前是否被使用;
在所述目标处理资源当前未被使用的情况下,释放所述目标处理资源;
在所述目标处理资源当前被使用的情况下,挂起当前使用所述目标处理资源的参考业务;从所述第一处理资源中释放所述目标处理资源。
10.根据权利要求9所述的方法,其特征在于,在所述从所述第一处理资源中释放所述目标处理资源之后,所述方法还包括:
检测所述第一处理资源中除所述目标处理资源之外的处理资源是否满足所述参考业务的运行需求;
在满足所述参考业务的运行需求的情况下,使用所述第一处理资源中除所述目标处理资源之外的处理资源恢复所述参考业务运行。
11.根据权利要求1所述的方法,其特征在于,所述通过所述第二操作***将所述目标处理资源添加至所述第二处理资源中,包括:
通过所述第二操作***初始化所述目标处理资源;
通过所述第二操作***将初始化后的所述目标处理资源添加至所述第二处理资源中。
12.根据权利要求1所述的方法,其特征在于,所述方法还包括:
引导所述第一操作***启动;
引导所述第二操作***启动。
13.根据权利要求12所述的方法,其特征在于,
所述引导所述第一操作***启动,包括:所述芯片启动上电,通过所述处理器唤醒所述处理器中为所述第一操作***分配的第一处理器核心;通过所述第一处理器核心执行二级程序加载器,其中,所述第一操作***的引导程序包括所述二级程序加载器;通过所述二级程序加载器加载所述第一操作***;
所述引导所述第二操作***启动,包括:通过所述二级程序加载器唤醒为所述第二操作***分配的第二处理器核心;通过所述第二处理器核心执行所述第二操作***的引导程序引导所述第二操作***启动。
14.一种***间的资源占用装置,其特征在于,所述装置应用于芯片,第一操作***和第二操作***运行在所述芯片上的同一个处理器中,包括:
确定模块,用于通过所述第二操作***确定目标处理资源,其中,所述处理器的处理资源包括第一处理资源和第二处理资源,所述第一处理资源被分配给所述第一操作***使用,所述第二处理资源被分配给所述第二操作***使用;
释放模块,用于通过所述第一操作***从所述第一处理资源中释放所述目标处理资源;
添加模块,用于通过所述第二操作***将所述目标处理资源添加至所述第二处理资源中。
15.一种芯片,其特征在于,所述芯片包括可编程逻辑电路以及可执行指令中的至少之一,所述芯片在电子设备中运行,用于实现权利要求1至13任一项所述的方法。
16.一种BMC芯片,其特征在于,包括:存储单元以及与所述存储单元连接的处理单元,所述存储单元用于存储程序,所述处理单元用于运行所述程序,以执行如权利要求1至13任一项所述的方法。
17.一种主板,其特征在于,包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求1至13任一项所述的方法。
18.一种服务器,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1至13任一项所述的方法。
19.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至13任一项中所述的方法的步骤。
20.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至13任一项中所述的方法的步骤。
CN202310536663.4A 2023-05-12 2023-05-12 ***间的资源占用方法、装置、存储介质及电子装置 Active CN116257364B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310536663.4A CN116257364B (zh) 2023-05-12 2023-05-12 ***间的资源占用方法、装置、存储介质及电子装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310536663.4A CN116257364B (zh) 2023-05-12 2023-05-12 ***间的资源占用方法、装置、存储介质及电子装置

Publications (2)

Publication Number Publication Date
CN116257364A true CN116257364A (zh) 2023-06-13
CN116257364B CN116257364B (zh) 2023-08-04

Family

ID=86684636

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310536663.4A Active CN116257364B (zh) 2023-05-12 2023-05-12 ***间的资源占用方法、装置、存储介质及电子装置

Country Status (1)

Country Link
CN (1) CN116257364B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116483013A (zh) * 2023-06-19 2023-07-25 成都实时技术股份有限公司 一种基于多通道采集器的高速信号采集***及方法
CN116501507A (zh) * 2023-06-28 2023-07-28 北京紫光芯能科技有限公司 用于中断处理的方法及中断控制模块、处理器、存储介质
CN117149441A (zh) * 2023-10-27 2023-12-01 南京齐芯半导体有限公司 一种应用于IoT的任务调度优化方法
CN117707796A (zh) * 2024-02-06 2024-03-15 苏州元脑智能科技有限公司 资源管理方法、装置、电子设备以及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104714843A (zh) * 2013-12-17 2015-06-17 华为技术有限公司 多内核操作***实例支持多处理器的方法及装置
CN115470000A (zh) * 2022-08-22 2022-12-13 华为技术有限公司 资源分配的方法、装置和运载工具

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104714843A (zh) * 2013-12-17 2015-06-17 华为技术有限公司 多内核操作***实例支持多处理器的方法及装置
CN115470000A (zh) * 2022-08-22 2022-12-13 华为技术有限公司 资源分配的方法、装置和运载工具

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116483013A (zh) * 2023-06-19 2023-07-25 成都实时技术股份有限公司 一种基于多通道采集器的高速信号采集***及方法
CN116483013B (zh) * 2023-06-19 2023-09-05 成都实时技术股份有限公司 一种基于多通道采集器的高速信号采集***及方法
CN116501507A (zh) * 2023-06-28 2023-07-28 北京紫光芯能科技有限公司 用于中断处理的方法及中断控制模块、处理器、存储介质
CN116501507B (zh) * 2023-06-28 2023-10-24 北京紫光芯能科技有限公司 用于中断处理的方法及中断控制模块、处理器、存储介质
CN117149441A (zh) * 2023-10-27 2023-12-01 南京齐芯半导体有限公司 一种应用于IoT的任务调度优化方法
CN117149441B (zh) * 2023-10-27 2024-01-05 南京齐芯半导体有限公司 一种应用于IoT的任务调度优化方法
CN117707796A (zh) * 2024-02-06 2024-03-15 苏州元脑智能科技有限公司 资源管理方法、装置、电子设备以及存储介质
CN117707796B (zh) * 2024-02-06 2024-04-09 苏州元脑智能科技有限公司 资源管理方法、装置、电子设备以及存储介质

Also Published As

Publication number Publication date
CN116257364B (zh) 2023-08-04

Similar Documents

Publication Publication Date Title
CN116257364B (zh) ***间的资源占用方法、装置、存储介质及电子装置
EP3414662B1 (en) Virtualizing sensors
US11799952B2 (en) Computing resource discovery and allocation
CN116244229B (zh) 硬件控制器的访问方法、装置、存储介质和电子设备
CN116302617B (zh) 共享内存的方法、通信方法、嵌入式***以及电子设备
US9430411B2 (en) Method and system for communicating with non-volatile memory
CN116243995B (zh) 通信方法、装置、计算机可读存储介质以及电子设备
CN116830082A (zh) 嵌入式***的启动控制方法和装置、存储介质和电子设备
CN116868167A (zh) 操作***的运行控制方法和装置,以及嵌入式***和芯片
JP2005056391A (ja) コンピューティング環境の作業負荷を均衡させる方法およびシステム
KR102285749B1 (ko) 세마포어 기능을 갖는 시스템 온 칩 및 그것의 세마포어 구현 방법
US9390033B2 (en) Method and system for communicating with non-volatile memory via multiple data paths
CN116627520B (zh) 基板管理控制器的***运行方法以及基板管理控制器
CN116541227B (zh) 故障诊断方法、装置、存储介质、电子装置及bmc芯片
CN115185880B (zh) 一种数据存储方法及装置
CN112860387A (zh) 分布式任务调度方法、装置、计算机设备及存储介质
US9377968B2 (en) Method and system for using templates to communicate with non-volatile memory
CN116302141A (zh) 串口切换方法、芯片及串口切换***
CN116868170A (zh) 嵌入式***的运行方法和装置、嵌入式***及芯片
CN116848519A (zh) 硬件接口信号的生成方法、装置及电子设备
WO2022204873A1 (zh) 电子装置、***级芯片和物理核分配方法
CN113076189B (zh) 具有多数据通路的数据处理***及用多数据通路构建虚拟电子设备
CN115002840A (zh) 设备数据传输方法、装置、电子设备及存储介质
West et al. Real-Time USB Networking and Device I/O
CN113485789A (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