CN116868167A - 操作***的运行控制方法和装置,以及嵌入式***和芯片 - Google Patents

操作***的运行控制方法和装置,以及嵌入式***和芯片 Download PDF

Info

Publication number
CN116868167A
CN116868167A CN202380009034.4A CN202380009034A CN116868167A CN 116868167 A CN116868167 A CN 116868167A CN 202380009034 A CN202380009034 A CN 202380009034A CN 116868167 A CN116868167 A CN 116868167A
Authority
CN
China
Prior art keywords
operating system
target
service
processor
memory
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.)
Pending
Application number
CN202380009034.4A
Other languages
English (en)
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
Publication of CN116868167A publication Critical patent/CN116868167A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Hardware Redundancy (AREA)

Abstract

本申请实施例提供了一种操作***的运行控制方法和装置,以及嵌入式***和芯片,其中,该嵌入式***包括:芯片和至少两个操作***,其中,芯片包括处理器、硬件控制器、第一总线和第二总线,其中,第一总线的带宽高于第二总线带宽,且第一总线被配置为多主多从模式,第二总线被配置为一主多从模式;至少两个操作***基于处理器运行;至少两个操作***通过第一总线进行通信;至少两个操作***通过第二总线实现对硬件控制器的控制。通过本申请,解决了操作***的运行效率较低的问题,进而达到了提高操作***的运行效率的效果。

Description

操作***的运行控制方法和装置,以及嵌入式***和芯片
技术领域
本申请实施例涉及计算机领域,特别是涉及一种操作***的运行控制方法和装置,以及嵌入式***和芯片。
背景技术
当前的服务器、个人电脑、工控机等设备多采用操作***加硬件器材,比如CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)、EC(Embeded Controller,嵌入式控制器)芯片,或控制芯片等硬件逻辑器件的***架构来实现设备的控制。然而,采用CPLD、EC芯片和控制芯片等硬件逻辑器件必然会导致***成本增加,而且上述硬件逻辑器件的增加使得***之间需要跨器件进行交互,严重影响了操作***运行的效率。
针对相关技术中,操作***的运行效率较低等问题,尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种操作***的运行控制方法和装置,以及嵌入式***和芯片,以至少解决相关技术中操作***的运行效率较低的问题。
根据第一方面,提供了一种嵌入式***,包括:芯片和至少两个操作***,其中,
芯片包括处理器、硬件控制器、第一总线和第二总线,其中,第一总线的带宽高于第二总线带宽,且第一总线被配置为多主多从模式,第二总线被配置为一主多从模式;至少两个操作***基于处理器运行;至少两个操作***通过第一总线进行通信;至少两个操作***通过第二总线实现对硬件控制器的控制。
根据第二方面,提供了另一种嵌入式***,包括:第一操作***,第二操作***,控制器和处理器,其中,第一操作***和第二操作***基于处理器运行,控制器被设置为检测第一操作***在运行过程中的运行状态,并根据运行状态控制第一操作***所使用的处理器资源。
根据第三方面,提供了一种操作***的运行控制方法,包括:
检测第一操作***在运行过程中的运行状态,其中,第一操作***和第二操作***基于处理器运行;
根据运行状态控制第一操作***所使用的处理器资源。
根据第四方面,提供了一种操作***的运行控制装置,包括:
第一检测模块,被设置为检测第一操作***在运行过程中的运行状态,其中,第一操作***和第二操作***基于处理器运行;
控制模块,被设置为根据运行状态控制第一操作***所使用的处理器资源。
根据第五方面,还提供了一种芯片,其中,芯片包括可编程逻辑电路以及可执行指令中的至少之一,芯片在电子设备中运行,被设置为实现上述任一项方法实施例中的步骤。
根据第六方面,还提供了一种BMC芯片,其中,包括:存储单元以及与存储单元连接的处理单元,存储单元被设置为存储程序,处理单元被设置为运行程序,以执行上述任一项方法实施例中的步骤。
根据第七方面,还提供了一种主板,其中,包括:至少一个处理器;至少一个存储器,被设置为存储至少一个程序;当至少一个程序被至少一个处理器执行,使得至少一个处理器实现上述任一项方法实施例中的步骤。
根据第八方面,还提供了一种服务器,其中,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,被设置为存放计算机程序;处理器,被设置为执行存储器上所存放的程序时,实现上述任一项方法实施例中的步骤。
根据第九方面,还提供了一种非易失性可读存储介质,非易失性可读存储介质中存储有计算机程序,其中,计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据第十方面,还提供了一种电子设备,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,第一操作***和第二操作***基于处理器运行,检测第一操作***在运行过程中的运行状态,根据该运行状态对第一操作***所使用的处理器资源进行控制。由于第一操作***和第二操作***均是基于同一个处理器运行,避免了硬件器件的增加和部署,降低了***成本,并且可以在操作***运行的过程中对其使用的处理器资源进行控制,从而合理利用处理器资源支持***之间的运行,因此,可以解决操作***的运行效率较低的技术问题,达到了提高操作***的运行效率的技术效果。
附图说明
图1是根据本申请实施例的一种操作***的运行控制方法的硬件环境示意图;
图2是根据本申请实施例的操作***的运行控制方法的流程图;
图3是根据本申请实施例的一种操作业务接管过程的示意图;
图4是根据本申请实施例的一种处理器核心占用过程的示意图;
图5是根据本申请实施例的一种处理器资源控制过程的示意图一;
图6是根据本申请实施例的一种处理器资源控制过程的示意图二;
图7是根据本申请实施例的一种业务数据交互过程的示意图;
图8是根据本申请实施例的一种第一操作***运行过程的示意图一;
图9是根据本申请实施例的一种第一操作***运行过程的示意图二;
图10是根据本申请实施例的一种***异常监控过程的示意图;
图11是根据本申请实施例的一种嵌入式***的示意图一;
图12是根据本申请实施例的一种可选的BMC芯片的结构框图;
图13是根据本申请可选的实施方式的一种操作***间的业务数据通信过程的示意图;
图14是根据本申请可选的实施方式的一种嵌入式***中业务管理过程的示意图;
图15是根据本申请可选的实施方式的一种任务调度过程的示意图;
图16是本申请实施例的可选的嵌入式***的示意图二;
图17是根据本申请实施例的操作***的运行控制装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例所提供的方法实施例可以在服务器、计算机终端、设备终端或者类似的运算装置中执行。以运行在服务器上为例,图1是根据本申请实施例的一种操作***的运行控制方法的硬件环境示意图。如图1所示,服务器可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和被设置为存储数据的存储器104,在一个示例性实施例中,上述服务器还可以包括被设置为通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述服务器的结构造成限定。例如,服务器还可包括比图1中所示更多或者更少的组件,或者具有与图1所示等同功能或比图1所示功能更多的不同的配置。
存储器104可被设置为存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的操作***的运行控制方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106被设置为经由一个网络接收或者发送数据。上述的网络可选实例可包括服务器的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其被设置为通过无线方式与互联网进行通讯。
在本实施例中提供了一种操作***的运行控制方法,应用于上述硬件环境中,图2是根据本申请实施例的操作***的运行控制方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,检测第一操作***在运行过程中的运行状态,其中,第一操作***和第二操作***基于处理器运行;
步骤S204,根据运行状态控制第一操作***所使用的处理器资源。
通过上述步骤,第一操作***和第二操作***基于处理器运行,检测第一操作***在运行过程中的运行状态,根据该运行状态对第一操作***所使用的处理器资源进行控制。由于第一操作***和第二操作***均是基于同一个处理器运行,避免了硬件器件的增加和部署,降低了***成本,并且可以在操作***运行的过程中对其使用的处理器资源进行控制,从而合理利用处理器资源支持***之间的运行,因此,可以解决操作***的运行效率较低的技术问题,达到了提高操作***的运行效率的技术效果。
其中,上述步骤的执行主体可以为服务器,设备,主板,芯片,处理器,嵌入式***等,但不限于此。
可选地,在本实施例中,上述第一操作***和第二操作***可以但不限于是两个异构的或者同构的操作***,即第一操作***和第二操作***的类型可以相同也可以不同。
以第一操作***和第二操作***为异构操作***为例,第一操作***和第二操作***可以是对响应时间的敏感程度不同的操作***,比如:第一操作***对响应时间的敏感程度高于第二操作***。或者,第一操作***和第二操作***可以是对资源的占用量不同的操作***,比如:第一操作***对业务对资源的占用量小于第二操作***。
上述第一操作***和第二操作***可以但不限于是部署在嵌入式***的处理器上的两个异构操作***,即嵌入式操作***,嵌入式操作***根据对响应时间的敏感程度可分为实时性操作***(RTOS)和非实时性操作***,实时性操作***可以但不限于包括Free RTOS(Free Real-Time Operating System,免费实时操作***)和RT Linux(RealTime Linux,实时Linux),非实时性操作***可以但不限于包括contiki(ContikiOperating System,康提基操作***)、HeliOS(Helix Operating System,螺旋操作***)和Linux(Linux Operating System,Linux操作***)等。
嵌入式***被设置为控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机***。嵌入式***是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用***对功能、可靠性、成本、体积、功耗等严格要求的专用计算机***。从应用对象上加以定义来说,嵌入式***是软件和硬件的综合体,还可以涵盖机械等附属装置。
嵌入式***从硬件角度可以但不限于包括处理器,存储器和***电路等硬件设备,上述第一操作***和第二操作***基于嵌入式***的处理器运行。从软件角度可以但不限于包括底层驱动,操作***和应用程序等,上述第一操作***和第二操作***即为嵌入式***中的操作***。
可选地,在本实施例中,上述操作***的运行控制方法可以但不限于由嵌入式***中实现的控制逻辑来执行,该控制逻辑实现了对于嵌入式***中的异构双操作***,处理器,存储器等软硬件资源的控制,分配和调度。
上述操作***的运行控制方法可以但不限于由第一操作***来执行,或者由第一操作***上设置的用于进行资源控制的功能模块来执行。
在上述步骤S202提供的技术方案中,在第一操作***的运行过程中,其运行状态可以但不限于表示其运行情况。该运行情况可以但不限于是单维度的,或者也可以但不限于是多维度综合考虑的。比如:运行状态可以但不限于包括软硬件资源的使用情况,指令的执行情况,操作业务的运行情况等等。
可选地,在本实施例中,第一操作***的运行过程可以但不限于指从上电到断电的整个过程,在这个过程中第一操作***可以但不限于一直是唤醒着的,或者也可以即有唤醒阶段又有休眠阶段。
在上述步骤S204提供的技术方案中,第一操作***所使用的处理器资源可以但不限于包括操作业务,处理器核心,处理器上的存储空间(比如内存,缓存),定时器,寄存器,输入输出接口等等。
可选地,在本实施例中,对于处理器资源的控制可以是对于其中一种的单独控制,也可以但不限于是对于多种处理器资源的协同控制。
可选地,在本实施例中,对于处理器资源的控制可以但不限于包括释放,占用,分配,回收等等操作。依据第一操作***在运行过程中的运行状态对其使用的处理器资源进行合理的控制操作,可以提高资源的利用率,提高操作***的运行效率。
在一个示例性实施例中,所检测的运行状态可以决定所控制的处理器资源,比如:对业务状态进行检测则可以控制操作业务的调整,对***状态的检测可以控制处理器核心的使用。也可以根据需要控制的处理器资源设定不同的检测对象,比如:需要对操作业务进行调整则可以对业务状态进行检测,需要对处理器核心的使用进行控制则可以对***状态进行检测。
一方面,第一操作***运行操作业务的业务状态可以反映出第一操作***的运行情况。或者,如果需要对操作***上的操作业务进行控制可以对于操作业务的业务状态进行检测。例如:在上述步骤S202中,可以但不限于检测第一操作***基于处理器所运行的目标操作业务的业务状态,其中,运行状态包括业务状态。
可选地,在本实施例中,目标操作业务可以但不限于为对***的运行性能或者运行环境有一定要求的操作业务,比如:对运行时间有一定要求的风扇控制业务,对数据存储空间有一定要求的日志回溯业务,对响应速度有一定要求的接口切换业务以及硬件接口波形信号模拟业务等等。
可选地,在本实施例中,操作业务的业务状态可以但不限于表示操作业务在各个维度的运行情况,比如:是否被中断,是否运行到某种程度(例如:运行时长是否达到阈值,运行结果是否达到某预设结果)等等。
如果业务状态达到了目标业务状态,即操作业务运行到某种程度,则可以对业务执行与该目标业务状态匹配的控制操作,从而实现将操作业务从一个操作***上转移至另一个操作***上运行,操作业务的启动停止,操作业务的挂起恢复等适应当前业务状态的控制。例如:在上述步骤S204中,在检测到业务状态为目标业务状态的情况下,释放目标操作业务,其中,处理器资源包括目标操作业务,第二操作***用于运行目标操作业务。
可选地,在本实施例中,如果目标操作业务的业务状态达到了目标业务状态,比如:被中断,或运行到某种程度(例如:运行时长达到阈值,运行结果达到某预设结果)等等,则释放第一操作***上的目标操作业务,由第二操作***继续运行目标操作业务。从而实现操作业务在操作***间的交替运行,使得操作业务运行在更加适合其运行的操作***上。
对于第一操作***运行目标操作业务的业务状态达到目标业务状态,一方面可以是第一操作***运行目标操作业务被第二操作***中断,比如:在获取到第二操作***向第一操作***发送的第一中断请求的情况下,确定检测到业务状态为目标业务状态,其中,第一中断请求用于请求接管目标操作业务。或者,也可以是目标操作业务的业务属性达到目标业务属性,比如:在目标操作业务的业务属性达到目标业务属性的情况下,确定检测到业务状态为目标业务状态。
可选地,在本实施例中,目标操作业务何时进行操作***的转换可以但不限于由第二操作***来决定,当第二操作***决定接管目标操作业务时,可以向第一操作***发送第一中断请求来指示由其接管目标操作业务,当获取到该第一中断请求时,可以认为第一操作***对于目标操作业务运行的业务状态已经达到了目标业务状态,可以响应于该第一中断请求释放目标操作业务,由第二操作***接管目标操作业务的运行。
可选地,在本实施例中,目标操作业务的业务属性可以但不限于包括运行时长,运行结果,运行负载等等。运行时长达到目标业务属性可以但不限于为运行时长达到预设时长,运行结果达到目标业务属性可以但不限于为目标操作业务运行出某个预设的运行结果,运行负载达到目标业务属性可以但不限于为目标操作业务所占用的运行资源超过或即将超过第一操作***所能承载的范围。
可选地,在本实施例中,目标操作业务何时进行操作***的转换也可以但不限于由目标操作业务本身的业务属性来决定,如果目标操作业务运行到业务属性达到目标业务属性的程度,则可以认为第一操作***对于目标操作业务运行的业务状态已经达到了目标业务状态,可以由第二操作***来接管目标操作业务的运行。
在一个示例性实施例中,对于第二操作***接管目标操作业务的资格可以但不限于设立判定机制。比如:在获取到第一中断请求的情况下,响应第一中断请求,确定是否由第二操作***接管目标操作业务;在由第二操作***接管目标硬件控制器的情况下,释放目标操作业务。
可选地,在本实施例中,获取到第一中断请求时可以不立即释放第一操作***所运行的目标操作业务,而是确定是否由第二操作***接管目标操作业务,从而对第二操作***接管目标操作业务的资格进行判定,如果确定了由第二操作***接管目标操作业务,则释放第一操作***所运行的目标操作业务。
在对第二操作***接管目标操作业务的资格进行判定的机制中,如果第二操作***没有接管目标操作业务的资格,则可以拒绝第二操作***对于目标操作业务的接管。比如:在确定是否由第二操作***接管目标操作业务之后,在不由第二操作***接管目标操作业务的情况下,向第二操作***发送第二中断请求,其中,第二中断请求用于指示拒绝第二操作***接管目标操作业务。
可选地,在本实施例中,对于拒绝第二操作***对于目标操作业务的接管可以但不限于通过***间发送中断请求的方式来指示或通知给第二操作***。
可选地,在本实施例中,对于不由第二操作***接管目标操作业务的情况,也可以不发送第二中断请求,第一操作***不释放目标操作业务,继续运行目标操作业务,第二操作***则无法接管目标操作业务。
向第二操作***发送第二中断请求拒绝第二操作***接管目标操作业务之后,第一操作***还可以继续运行目标操作业务直至满足第二操作***接管目标操作业务的条件(比如业务属性达到目标属性)后,第一操作***将目标操作业务释放给第二操作***,并通知第二操作***来接管运行。
在释放了第一操作***上运行的目标操作业务之后,第二操作***可以主动感知到目标操作业务已被释放,并对目标操作业务进行接管。或者,如果是由第二操作***主动发送第一中断请求来请求接管目标操作业务的,第二操作***可以默认只要在一定的时间内没有收到用于拒绝其接管目标操作业务的第二中断请求,则直接接管目标操作业务,从而提高目标操作业务的接管效率。
如果释放第一操作***上运行的目标操作业务,也可以主动向第二操作***发送中断请求来通知第二操作***目标操作业务已被释放。比如:向第二操作***发送第三中断请求,其中,第三中断请求用于指示已释放目标操作业务,第二操作***用于响应第三中断请求运行目标操作业务。
在目标操作业务的业务属性达到目标业务属性的情况下,如果第一操作***主动释放目标操作业务,可以向第二操作***发送第三中断请求来通知第二操作***目标操作业务已被释放,收到该第三中断请求后由第二操作***接管目标操作业务后续的运行。
图3是根据本申请实施例的一种操作业务接管过程的示意图,如图3所示,第二操作***向第一操作***发送第一中断请求来请求接管运行在第一操作***上的目标操作业务,如果第一操作***允许第二操作***接管目标操作业务,则释放目标操作业务,由第二操作***接管目标操作业务,目标操作业务在第二操作***上运行。如果第一操作***不允许第二操作***接管目标操作业务,则向第二操作***发送第二中断请求拒绝其接管目标操作业务,目标操作业务在第一操作***上继续运行。
另一方面,第一操作***的***状态可以反映出第一操作***的运行状态,依据第一操作***的***状态可以但不限于对第一操作***所使用的处理器核心进行合理的控制。或者,如果需要对操作***所使用的处理器核心进行控制可以对于操作***的***状态进行检测。例如:在上述步骤S202中,可以但不限于检测第一操作***的***状态,其中,运行状态包括***状态,第一操作***基于处理器中的目标处理器核心运行。
可选地,在本实施例中,目标处理器核心可以但不限于是处理器中为第一操作***分配的被设置为运行第一操作***的处理器核心,目标处理器核心的数量可以但不限于为一个或者多个。
可选地,在本实施例中,操作***的***状态可以但不限于表示操作***在各个维度的运行情况,比如:是否被中断,是否运行到某种程度(例如:运行时长是否达到阈值,运行结果是否达到某预设结果)等等。
如果***状态达到了目标***状态,即操作***运行到某种程度,则可以对操作***所使用的处理器核心执行与该目标***状态匹配的控制操作,从而实现处理器核心的合理分配利用。例如:在上述步骤S204中,在检测到***状态为目标***状态的情况下,释放目标处理器核心,其中,处理器资源包括目标处理器核心,第二操作***用于将目标处理器核心添加至第二操作***的调度资源池中,调度资源池中包括处理器中为第二操作***分配的处理器核心。
可选地,在本实施例中,如果第一操作***的***状态达到了目标***状态,比如:被中断,或运行到某种程度(例如:运行时长达到阈值,运行结果达到某预设结果,运行负载低于预设值)等等,则释放第一操作***所使用的目标处理器核心,由第二操作***使用目标处理器核心。从而实现处理器核心在操作***间的交替使用,使得处理器核心得到更加合理的利用。
对于第一操作***的***状态达到目标***状态,一方面可以是第一操作***被第二操作***中断,比如:在获取到第二操作***向第一操作***发送的第四中断请求的情况下,确定检测到***状态为目标***状态,其中,第四中断请求用于请求占用目标处理器核心。或者,也可以是第一操作***的***属性达到目标***属性,比如:在第一操作***的***属性达到目标***属性的情况下,确定检测到***状态为目标***状态。
可选地,在本实施例中,目标处理器核心何时进行操作***的转换可以但不限于由第二操作***来决定,当第二操作***决定接管目标处理器核心时,可以向第一操作***发送第四中断请求来指示由其接管目标处理器核心,当获取到该第四中断请求时,可以认为第一操作***的***状态已经达到了目标***状态,可以响应于该第四中断请求释放目标处理器核心,由第二操作***接管目标处理器核心,将其添加到调度资源池中使用。
可选地,在本实施例中,获取到第二操作***向第一操作***发送的第四中断请求后,可以将第一操作***当前正在运行的数据压入堆栈,第一操作***进入休眠状态,由第二操作***占用目标处理器内核进行调度和使用。
可选地,在本实施例中,第二操作***可以但不限于根据自身对于处理器核心资源的需求发起第四中断请求,比如:第二操作***检测为其分配的核心的资源占用率是否高于一定阈值,或者检测为其分配的核心的资源剩余量是否足以运行下一个进程,如果资源占用率高于一定阈值或者剩余量不足以运行下一个进程,则可以认为第二操作***需要额外的处理器核心,第二操作***可以主动向第一操作***发送第四中断请求来请求占用目标处理器核心,从而降低其运行压力,或者支持下一个进程的运行。
在一个可选的实施方式中,当第二操作***(比如Linux)检测到为其分配的核心的资源占用率较高(比如占用率高于总资源量的95%)时,可以向第一操作***(比如RTOS)发送第四中断请求,第一操作***(RTOS)收到第四操作***后将其正在运行的业务现场进行保存(比如:将运行数据压入堆栈),并释放其使用的目标处理器核心,由第二操作***(Linux)对目标处理器核心进行占用,并为目标处理器核心分配需要运行的线程,或者将其他占用率较高的处理器核心上的线程调度到目标处理器核心上运行。
可选地,在本实施例中,操作***的***属性可以但不限于包括***的运行时长,运行结果,运行负载等等。***的运行时长达到目标***属性可以但不限于为***的运行时长达到预设时长,***的运行结果达到目标***属性可以但不限于为操作***运行出某个预设的运行结果,***的运行负载达到目标***属性可以但不限于为操作***的资源占用率低于或即将低于其设定的占用率下限。
可选地,在本实施例中,目标处理器核心何时进行操作***的转换也可以但不限于由操作***本身的***属性来决定,如果操作***运行到***属性达到目标***属性的程度,则可以认为操作***的***状态已经达到了目标***状态,可以由第二操作***来占用目标处理器核心。
在一个示例性实施例中,对于第二操作***来占用目标处理器核心的资格可以但不限于设立判定机制。比如:在获取到第四中断请求的情况下,响应第四中断请求,确定是否由第二操作***占用目标处理器核心;在由第二操作***占用目标处理器核心的情况下,释放目标处理器核心。
可选地,在本实施例中,获取到第四中断请求时可以不立即释放目标处理器核心,而是确定是否由第二操作***占用目标处理器核心,从而对第二操作***占用目标处理器核心的资格进行判定,如果确定了由第二操作***占用目标处理器核心,则释放目标处理器核心由第二操作***占用。
在对第二操作***占用目标处理器核心的资格进行判定的机制中,如果第二操作***没有占用目标处理器核心的资格,则可以拒绝第二操作***对于目标处理器核心的占用。比如:在不由第二操作***占用目标处理器核心的情况下,向第二操作***发送第五中断请求,其中,第五中断请求用于指示拒绝第二操作***占用目标处理器核心。
可选地,在本实施例中,对于拒绝第二操作***对于目标处理器核心的占用可以但不限于通过***间发送中断请求的方式来指示或通知给第二操作***。
可选地,在本实施例中,对于不由第二操作***占用目标处理器核心的情况,也可以不发送第二中断请求,第一操作***不释放目标处理器核心,继续占用目标处理器核心,第二操作***则无法占用目标处理器核心。
向第二操作***发送第五中断请求拒绝第二操作***占用目标处理器核心之后,第一操作***还可以继续使用目标处理器核心处理操作业务直至满足第二操作***占用目标处理器核心的条件(比如:***属性达到目标***属性)后,第一操作***将目标操作业务释放给第二操作***,并通知第二操作***来接管运行。
图4是根据本申请实施例的一种处理器核心占用过程的示意图,如图4所示,第一操作***基于目标处理器核心运行,在运行过程中第二操作***向第一操作***发送第二中断请求请求占用其使用的目标处理器核心,如果允许第二操作***占用,则释放目标处理器核心,由第二操作***占用目标处理器核心,将其添加至资源调度池中。如果不允许第二操作***占用,则向第二操作***发送第五中断请求拒绝。
在释放了第一操作***使用的目标处理器核心之后,第二操作***可以主动感知到目标处理器核心已被释放,并对目标处理器核心进行占用。或者,如果是由第二操作***主动发送第四中断请求来请求占用目标处理器核心的,第二操作***可以默认只要在一定的时间内没有收到用于拒绝其占用目标处理器核心的第五中断请求,则直接占用目标处理器核心,从而提高目标处理器核心的占用效率。
如果第一操作***主动释放其所使用的目标处理器核心,可以主动向第二操作***发送中断请求来通知第二操作***目标处理器核心已被释放。比如:向第二操作***发送第六中断请求,其中,第六中断请求用于指示第一操作***已释放目标处理器核心,第二操作***用于响应第六中断请求将目标处理器核心添加至调度资源池中。
在***属性达到目标***属性的情况下,第一操作***主动释放目标处理器核心,可以向第二操作***发送第六中断请求来通知第二操作***目标处理器核心已被释放,收到该第六中断请求后由第二操作***占用目标处理器核心进行资源的调度和使用。
在一个可选的实施方式中,当第一操作***(比如RTOS)确定在运行过程中无任何线程需要调度(比如操作***的资源占用率低于或即将低于其设定的占用率下限)时,可以触发第一操作***(RTOS)的主动休眠,第一操作***(RTOS)向第二操作***(比如Linux)发送第六中断请求,并将其运行现场进行保存(比如:将运行的数据压入堆栈)后休眠,第二操作***(Linux)收到第六中断请求后将目标处理器内核添加到其资源调度池中进行调度和使用。
在一个可选的应用场景中,芯片中搭载了双操作***基于多核处理器CPU运行,第一操作***可以但不限于为RTOS,第二操作***可以但不限于为Linux,CPU核0被分配给RTOS使用,其余核心被分配给Linux使用,图5是根据本申请实施例的一种处理器资源控制过程的示意图一,如图5所示,RTOS周期性被唤醒运行,RTOS和Linux交替占用调度CPU核0,在RTOS调度CPU核0的时间片(T4,T5)内,Linux在T4-1时刻产生一个接管CPU核0的中断(相当于上述第四中断请求),导致RTOS不得不休眠。这时RTOS将现场保存在堆栈中,进行休眠,然后将CPU核0释放给Linux接管,等待Linux调度完成后,T5-1时刻将产生RTOS抢占CPU核0的中断唤醒RTOS,RTOS从T5-1时刻又开始进入轮循模式占用调度CPU核0。
在本实施例中,***间操作业务的接管和处理器核心的占用可以但不限于是单独的,比如:只接管操作业务,或者只占用处理器核心。也可以一起占用,即,既接管操作业务又占用处理器核心。
在一个可选的实施方式中,以操作业务为设备控制业务为例,描述第二操作***接管第一操作***的处理器资源。在本实施方式中,提供了一种操作***的启动控制过程,该过程包括如下步骤:
步骤A,通过处理器的第一处理器核心上运行的第一操作***经由第一总线对目标设备的硬件控制器进行控制,以对目标设备的运行状态进行控制。
对于如服务器、个人电脑、工控机等设备,可以配备一些特定设备执行与设备运行相关的操作。相关技术中,通常在***上电后,这些特定设备就开始工作。而由于***上电后,运行在处理器上的操作***会经过一段时间才能正常接管特定设备,进行特定设备的运行状态控制,而在操作***启动的过程中,特定设备是不可控的。
例如,在***上电后风扇就开始工作,由于***上电后跑在CPU上的操作***会经过一段时间才能正常接管风扇,进行风扇转速的设置,所以在操作***启动过程中风扇是不可控的。
例如,为了实现在操作***启动的过程中对风扇可以控制,服务器通过采用BMC结合CPLD的控制方式,个人电脑采用EC芯片的控制方式(EC芯片根据温度调整风扇转速的功能),工控机采用定制芯片的控制方式,在服务器、个人电脑、工控机操作***启动过程中,CPLD、EC芯片、定制芯片就会介入控制风扇的转速,等待操作***完全启动后,风扇的控制权就会交给操作***中的应用程序进行控制。
为了至少部分解决上述技术问题,可以采用多核多***(例如,多核双***)的启动控制方式,在处理器的不同处理器核心上运行嵌入式***的不同操作***,不同的操作***的响应速度不同,对于第二操作***未启动、重启或者其他无法对特定设备的运行状态进行控制的情况,可以由响应速度高于第二操作***的第一操作***对特定设备的运行状态进行控制,可以降低特定设备的运行状态不可控的情况,同时,由于不需要增加额外的成本,此外还具有很好的可扩展性。
在本实施方式中,在第二操作***未启动、重启或者其他无法对目标设备的运行状态进行控制的情况下,可以通过第一操作***经由第一总线对目标设备的硬件控制器进行控制,以对目标设备的运行状态进行控制。这里的目标设备可以是风扇,或者其他需要在***启动是运行的设备,对于风扇,其对应的硬件控制器为风扇控制器,例如,PWM(PulseWidth Modulation,脉冲宽度调制)控制器、FanTach(风扇转速)控制器。这里,使用第一操作***(例如,RTOS***)代替传统的CPLD、EC芯片、定制芯片,一方面节省硬件成本,另一方面由于设备控制是由软件实现的,可扩展性较高。
例如,基于BMC双核实现双***,RTOS***和Linux***,基于多核双***实现风扇,利用RTOS***实时性高的特性,在Linux***启动的过程中,可以由RTOS***代替CPLD、EC芯片、定制芯片控制风扇,即,接管风扇控制权,以足够快的速度对风扇的运行状态进行控制。
步骤B,引导在处理器的第二处理器核心上启动第二操作***。
在***上电时或者第二操作***重启时,可以引导在处理器的第二处理器核心上启动第二操作***,以使得第二操作***在第二处理器核心上运行。这里,在第二处理器核心上启动第二操作***是指将第二处理器核心调度给第二操作***,操作***的***文件或者镜像文件可以存储在处理器所在芯片上或者芯片以外的存储器内,例如,外部RAM(Random Access Memory,随机存取存储器)内。
步骤C,在第二操作***启动之后,通过第二操作***经由第一总线接管硬件控制器,以接管目标设备的控制权。
在第二操作***启动完成之后,可以一直由第一操作***对目标设备的运行状态进行控制,考虑到在多核处理器上运行多个操作***需要在多个操作***之间进行数据交互,以及方便由一个操作***进行设备的总体控制,也可以由第二操作***接管目标设备的控制权。例如,可以通过第二操作***经由第一总线接管硬件控制器。第二操作***接管目标设备的控制权的方式可以是:在第二操作***启动之后,由第二操作***向第一操作***发送设备接管请求,例如,通过第二总线发送中断请求,以请求接管目标设备的硬件控制器。第一操作***可以接收第二操作***发送的设备接管请求,将目标设备的控制权转交给第二操作***,还可以执行与目标设备的控制权交接相关的操作,例如,停止运行用于对目标设备的运行状态进行控制的业务(进程)。
例如,等到Linux***完全启动后,RTOS***将风扇的控制权转交给Linux***,由Linux***对风扇进行控制。上述过程可以是在***上电之后执行的,即,采用多核双***的启动方式,先启动RTOS***,利于更早介入风扇控制,而等到Linux***完全启动之后,RTOS***将风扇的控制权转交给Linux***进行控制。
在一个示例性实施例中,通过处理器的第一处理器核心上运行的第一操作***经由第一总线对目标设备的硬件控制器进行控制之前,还包括:在处理器所在的芯片上电之后,通过处理器唤醒第一处理器核心;通过第一处理器核心运行第一操作***的引导加载程序,以引导第一操作***在第一处理器核心上启动。
整个***按照工作时段可以划分为两个阶段,初始启动阶段和实时运行阶段,本实施例中的启动控制方法可以是在初始启动阶段或者实时运行阶段执行的。对于初始启动阶段,初始启动阶段起于***上电,即,处理器所在的芯片上电,***上电后会唤醒一个核心去执行操作***的引导动作,其余核心暂时处于休眠状态,被唤醒的核心可以是第一处理器核心。
可选地,上电后***将首先执行一个预置的核心调度策略(启动引导策略),即,由处理器的一个处理器核心执行核心调度策略,核心调度策略可以存储在SOC片(System onChip,片上***)上的RAM或Norflash(非易失闪存)中,该调度策略可以根据不同的设计需求进行灵活配置,其主要功能包括:指定不同操作***需要运行的初始处理资源(处理器核心),确定异构操作***的引导过程,芯片上电可以是指SOC芯片层面的上电。
在第一处理器核心唤醒之后,可以通过引导加载程序在第一处理器核心上引导运行第一操作***:可以,由第一处理器核心通过引导加载程序引导第一操作***在第一处理器核心上启动。引导加载(Boot Loader)程序可以位于电脑或其他计算机应用上,其是指用于引导操作***加载的程序,例如,Boot Rom里的固有程序,固有程序指的是引导操作***启动的代码,属于Boot Loader程序,Boot Rom是CPU片上的嵌入处理器芯片内的一小块掩模ROM(Read-Only Memory,只读存储器)或者写保护闪存。
在初始启动阶段,通过引导加载程序引导操作***对应的处理器核心上启动,可以提高操作***启动的成功率,同时为实时运行阶段做准备。
在一个示例性实施例中,通过处理器的第一处理器核心上运行的第一操作***经由第一总线对目标设备的硬件控制器进行控制,包括:在第一处理器核心上执行第一操作***的第一控制任务,其中,第一控制任务用于对硬件控制器进行控制;通过第一处理器核心读取与目标设备对应的指定传感器的传感器数据;通过第一控制任务根据指定传感器的传感器数据经由第一总线向硬件控制器发送设备控制指令,以由硬件控制器按照设备控制指令对目标设备的运行状态进行控制。
操作***对目标设备的硬件控制器进行控制可以是由在该操作***所运行的处理器核心上的控制任务(业务)对硬件控制器进行控制执行的,这里的控制任务可以指对应的控制任务。对于目标设备的硬件控制器,可以在第一处理器核心上执行第一操作***的第一控制任务(第一控制进程),由第一控制任务对硬件控制器进行控制。
对硬件控制器进行控制可以是基于传感器的传感器数据进行的,对于不同的目标设备,影响其运行的参数可以是不同的,对应地,所需获取的传感器数据也可以存在区别。对于目标设备,其可以是在芯片上电以后即运行的设备,与其对应的传感器为指定传感器。指定传感器的类型可以有多种,可以包括但不限于以下至少之一:温度传感器,湿度传感器,噪音传感器等。由于第一控制任务运行在第一处理器核心上,因此,可以通过第一处理器核心读取指定传感器的传感器数据。指定传感器的传感器数据可以存储在指定传感器内的存储空间中,与可以由指定传感器传输到指定的存储空间内,本实施例中对于指定传感器的传感器数据的读取位置不做限定。
读取的指定传感器的传感器数据可以是在一个时间周期内的传感器数据,也可以是自目标设备启动之后的全部传感器数据,还可以是满足其他时间限制条件的传感器数据。在获取到指定传感器的传感器数据之后,第一控制任务可以根据指定传感器的传感器数据对目标设备的运行状态进行控制。对目标设备的运行状态进行控制可以是通过以下方式实现的:通过第一控制任务向目标设备的硬件控制器发送设备控制指令,以由硬件控制器按照设备控制指令对目标设备的运行状态进行控制。
可选地,第一控制任务可以基于指定传感器的传感器数据确定出目标设备预期的运行状态;在目标设备当前的运行状态与预期的运行状态不同的情况下,可以生成上述设备控制指令,设备控制指令可以控制将目标设备的运行状态调整为预期的运行状态。上述设备控制指令可以是经由第一总线发送给目标设备的硬件控制器的。第一总线与前述实施例中类似,在此不做赘述。
通过读取指定传感器的传感器数据,并根据传感器数据对目标设备进行控制,控制其运行状态,提高了资源的利用率。
在一个示例性实施例中,通过第一控制任务根据指定传感器的传感器数据经由第一总线向硬件控制器发送设备控制指令,包括:通过第一控制任务根据指定传感器的传感器数据确定目标设备的设备运行参数的目标参数值,其中,设备运行参数为控制目标设备的运行状态的参数;通过第一控制任务将携带有目标参数值的设备控制指令经由第一总线发送给硬件控制器。
第一控制任务可以根据指定传感器的传感器数据,确定出目标设备预期的运行状态。预期的运行状态可以是通过设备运行参数的参数值进行表示的,设备运行参数可以是控制目标设备的运行状态的参数,对于不同类型的设备,其对应的设备运行参数可以是不同的。例如,对于风扇,其对应的设备运行参数可以是转速,对于其他类型的设备,设备运行参数可以是其他的运行参数。预期的运行状态可以对应于目标设备的设备运行参数的目标参数值。
在确定出目标设备的设备运行参数的目标参数值之后,可以将目标参数值携带在上述的设备控制指令中,即,通过第一控制任务将携带有目标参数值的设备控制指令发送给硬件控制器,向硬件控制器发送设备控制指令的方式可以与前述实施例中类似,在此不做赘述。
根据传感器数据确定目标设备的设备运行参数的参数值,并将确定的参数值携带在设备控制指令中,可以提高设备控制的精准度。
在一个示例性实施例中,通过第一控制任务根据指定传感器的传感器数据确定目标设备的设备运行参数的目标参数值,包括:在目标设备为风扇的情况下,通过第一控制任务根据指定传感器的传感器数据确定风扇的风扇运行参数的目标参数值。
目标设备可以是风扇,其可以是被设置为对所在的服务器或者其他设备进行散热的风扇,即,散热风扇。在此情况下,设备运行参数可以是风扇运行参数,风扇运行参数可以包括一种或多种,可以包括但不限于以下至少之一:转速,转动周期,周期切换时间,还可以是其他的运行参数。本实施例中对此不做限定。
对应地,通过第一控制任务根据指定传感器的传感器数据确定目标设备的设备运行参数的目标参数值可以是:通过第一控制任务根据指定传感器的传感器数据确定风扇的风扇运行参数的目标参数值。在得到目标参数值之后,第一控制任务将携带有目标参数值的设备控制指令经由第一总线发送给风扇的硬件控制器,从而对风扇的运行状态进行控制。
通过对风扇的运行状态进行控制,可以在如***上电、***重启或者其他场景下,快速对风扇的运行状态进行控制,提高风扇控制的及时性。
在一个示例性实施例中,在目标设备为风扇的情况下,通过第一控制任务根据指定传感器的传感器数据确定风扇的风扇运行参数的目标参数值,包括:在目标设备为风扇、且指定传感器为温度传感器的情况下,通过第一控制任务根据温度传感器的传感器数据确定风扇的转速的目标转速值,其中,风扇的转速与温度传感器所检测到的温度正相关。
对于目标设备为风扇的场景,指定传感器可以是温度传感器,该温度传感器的数量可以为一个或多个,温度传感器的设置位置可以根据需要进行配置,不同的温度传感器可以设置在不同的位置上。可选地,温度传感器的传感器数据用于表示温度传感器所检测到的温度,对此,第一控制任务可以根据温度传感器的传感器数据确定风扇的转速的目标转速值,这里,风扇的转速与温度传感器所检测到的温度正相关。
在温度传感器的数量为多个的情况下,可以根据每个温度传感器的传感器数据,确定多个温度传感器所检测到的最高温度,风扇的转速可以是根据多个温度传感器所检测到的最高温度确定的,相对于根据多个温度传感器所检测到的平均温度确定风扇的转速,可以保证设备运行的安全性。对于风扇的数量为多个的场景,也可以基于与每个风扇匹配的温度传感器所检测到的最高温度或者平均温度,确定每个风扇的转速。
例如,可以利用第一操作***(例如,RTOS***)代替CPLD、EC芯片、定制芯片等处理单元来控制风扇转速(可以是实时进行BMC风扇控制)。在***刚上电时,可以唤醒第一处理器核心(例如,CPU0,第一处理器核心可以是被硬件唤醒的),第一处理器核心运行引导加载程序(例如,Boot Rom中的指定程序),加载第一操作***启动,第一处理器核心将读取各种和温度相关的传感器(sensor)数据,进行风扇控制(例如,风扇转速控制),完全模拟上述处理单元完成风扇调控的功能。在进行风扇转速控制时,第一操作***可以根据温度传感器计算PWM值,继而风扇的转速进行调整。通过上述方式,可以在第二操作***启动的过程中,由第一操作***对风扇的转速进行控制。
在一个示例性实施例中,引导在处理器的第二处理器核心上启动第二操作***,包括:通过第一处理器核心执行二级程序加载器,以由二级程序加载器唤醒第二处理器核心;通过第二处理器核心运行第二操作***的通用引导加载器,以引导第二操作***在第一处理器核心上启动。
在本实施方式中,在进行操作***启动时,可以将二级程序加载器(SecondProgram Loader,简称为SPL)加载到内部内存中,例如,SOC内部的静态随机存取存储器(Static Random-Access Memory,SRAM),而SPL可以负责将通用引导加载程序(UniversalBoot Loader,简称为U-Boot)加载到随机存取存储器(Random-Access Memory,简称为RAM)中,二级程序加载器可以引导加载第二操作***,还可以引导加载第一操作***。
对于第二操作***,可以通过第一处理器核心执行二级程序加载器,以由二级程序加载器唤醒第二处理器核心;通过第二处理器核心,可以运行第二操作***的通用引导加载器(通用引导加载程序),从而引导第二操作***在第一处理器核心上启动。这里,通过二级程序加载器引导加载第二操作***的引导程序,第二操作***的引导程序可以包括通用引导加载器。
需要说明的是,二级程序加载器为通用引导加载程序第一阶段执行的代码,可负责搬运通用引导加载程序第二阶段的代码到***内存(System RAM,也叫片外内存)中运行。通用引导加载程序是一个遵循GPL(General Public License,通用公共许可协议)协议的开源软件,可以看作是一个裸机综合例程。
例如,***上电后,处理器首先会唤醒CPU0核,以便可以让RTOS***尽可能快地运行起来;然后利用Boot Rom中的程序引导RTOS***启动;RTOS***启动的过程中,会继续通过SPL加载U-Boot,由U-Boot引导在CPU1上启动第二操作***直到Linux***正常启动。
需要说明的是,Boot Rom是芯片(例如,SOC芯片)内部ROM固化程序,其是U-Boot的引导代码。Boot Rom读硬件的启动信息(例如,拨码开关设置),从指定启动介质(例如,SD、MMC等)中读取uboot-spl代码(即,SPL),SPL主要负责初始化外部RAM和环境,加载真正的U-Boot镜像到外部RAM中来执行,外部RAM可以是DDR(Double Data Rate SynchronousDynamic Random-Access Memory,双倍速率的同步动态随机存取内存),也可以是其他的RAM。
通过二级程序加载器唤醒第二处理器核心,再由第二处理器核心运行通用引导加载程序,从而引导在对应的处理器核心上第二操作***,可以提高操作***启动的便捷性和成功率。
作为一种可选示例,下面以RTOS***和Linux***为例对多核双***的启动过程进行解释说明。
为了尽快接管风扇管理,可以尽可能使RTOS***启动,在Linux***启动完成之后,由在Linux***接管风扇的控制权。多核双***的启动过程可以包括以下步骤:
步骤1,在***刚上电时,唤醒CPU0;
步骤2,CPU0运行Boot Rom中的指定程序,加载RTOS***启动;
步骤3,在RTOS***启动的过程中,唤醒CPU1去引导U-Boot,并启动第一操作***中的风扇控制程序(FanCtrl_RTOS_APP);
步骤4,CPU1引导U-Boot可以包括SPL阶段和U-Boot阶段,通过调用SPL进入到SPL阶段;
步骤5,在SPL阶段,SPL引导U-Boot启动;
步骤6,在U-Boot阶段,加载Linux核心(CPU1~CPUN),并启动BMC业务程序以及第二操作***中的风扇控制程序(FanCtrl_Linux_APP)。
通过本可选示例,在双***启动及运行的过程中,通过首先启动RTOS***对风扇进行控制,并在Linux***启动之后,由第二操作***接管风扇的控制权,可以保证在***上电时快速对风扇进行控制,提高风扇控制的效率。
在一个示例性实施例中,在通过第二操作***经由第一总线接管硬件控制器之后,还包括:在第二操作***待重启的情况下,通过第二操作***经由第二总线唤醒第一操作***,并由第一操作***经由第一总线接管硬件控制器,以接管目标设备的控制权;控制第二操作***进行***重启。
在由于***崩溃、接收到reboot(重加载)命令等原因需要重启时,第二操作***可以首先唤醒第一操作***,由第一操作***接管硬件控制器,以接管目标设备的控制权。唤醒第一操作***可以是经由第二总线执行的,第一操作***接管硬件控制器可以是经由第一总线执行的。
在第二操作***发生重启时,通过唤醒第一操作***接管目标设备的控制权,可以提高设备控制的可靠性。
在一个示例性实施例中,在第二操作***待重启的情况下,通过第二操作***经由第二总线唤醒第一操作***,包括:在第二操作***待重启的情况下,通过第二操作***经由第二总线向第一操作***发起***唤醒中断,其中,***唤醒中断用于唤醒第一操作***。
唤醒第一操作***可以是通过核间中断实现的。如果第二操作***待重启(例如,***崩溃、接收到reboot命令),第二操作***可以向第一操作***发起***唤醒中断,以唤醒第一操作***。该***唤醒中断可以是主动唤醒中断。在第一操作***接管硬件控制器之后,可以控制第二操作***进行***重启,而在第二操作***重启之后,可以重新接管硬件控制器,接管硬件控制器的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,第一操作***对于为其分配的处理器核心的占用可以但不限于享有更高的优先级,或者为第一操作***分配的处理器核心当前由哪个操作***使用可以但不限于在操作***之间进行协商决定。如果为第一操作***分配使用的目标处理器核心已被第二操作***占用,在第一操作***被唤醒运行时,可以检测目标处理器核心是否被释放,如果已被释放,则第一操作***基于目标处理器核心运行。如果没有被释放,则可以向第二操作***发送第七中断请求来请求第二操作***释放目标处理器核心,第二操作***响应该第七中断请求释放了目标处理器核心后第一操作***基于目标处理器核心运行。比如:在处理器中的目标处理器核心已被添加至第二操作***的调度资源池中,且,第一操作***被唤醒运行的情况下,检测目标处理器核心是否被释放,其中,调度资源池中包括处理器中为第二操作***分配的处理器核心;在检测到第二操作***在第一操作***被唤醒时已释放目标处理器核心的情况下,基于目标处理器核心运行第一操作***。
可选地,在本实施例中,目标处理器核心已被添加至第二操作***的调度资源池中可以但不限于表示目标处理器核心已被第二操作***占用,如果在这种情况下第一操作***被唤醒运行,那么第二操作***可以主动释放目标处理器核心。也可以继续占用目标处理器核心,直到第一操作***主动请求其释放目标处理器核心。
可选地,在本实施例中,第一操作***检测目标处理器核心是否被释放,如果检测到目标处理器核心未被释放,则可以通过中断请求来请求第二操作***释放目标处理器核心。比如:在检测到目标处理器核心未被释放的情况下,向第二操作***发送第七中断请求,其中,第七中断请求用于请求第二操作***释放目标处理器核心,第二操作***用于响应第七中断请求释放目标处理器核心。
可选地,在本实施例中,第二操作***可以但不限于在收到第七中断请求时直接释放目标处理器核心,也可以但不限于对于是否释放目标处理器核心进行判断,再决定是否立即将目标处理器核心释放给第一操作***,还是继续运行得到运行结果再释放目标处理器核心给第一操作***。
在上述可选的应用场景中,图6是根据本申请实施例的一种处理器资源控制过程的示意图二,如图6所示,在Linux调度CPU核0的时间片(T3,T4)内,此时RTOS处于休眠状态,在T3-1时刻RTOS可能由于硬件上报的中断事件导致被唤醒,Linux会将运行在CPU核0上的进程现场保留,RTOS占用CPU核0,处理完硬件上报的中断事件后,在T4-1时刻又进入休眠状态,此时RTOS上报释放CPU核0的中断给Linux,Linux继续按照设置的周期调度CPU核0,恢复现场运行进程。
操作***运行的过程中,可以进行业务数据的交互,交互的过程可以但不限于采用存储空间和中断请求配合传输的方式来实现,操作***之间通过存储空间来传递数据,通过中断请求来进行相互之间指令的通知。比如:获取第一操作***基于处理器运行的过程中产生的业务数据;将业务数据存储至处理器上的存储空间;向第二操作***发送第八中断请求,其中,第八中断请求用于请求第二操作***从存储空间读取业务数据,第二操作***用于响应第八中断请求从存储空间读取业务数据。
可选地,在本实施例中,第一操作***基于处理器运行的过程中产生的业务数据被存储在处理器上的存储空间中,通过第八中断请求通知第二操作***,由第二操作***从存储空间中读取出业务数据,从而实现业务数据的交互。
可选地,在本实施例中,操作***之间交互的业务数据可以但不限于是操作***运行操作业务过程中任何需要在***间进行传输的数据。比如:业务的过程数据,业务的结果数据等等。
可选地,在本实施例中,处理器上的存储空间中可以但不限于为操作***之间的交互过程配置专用的存储位置,可以称为共享内存,该共享内存可以但不限于按照操作***再继续分配,即每个操作***对应一段专用的共享内存。
第一操作***所对应的共享内存的信息(比如:存储地址)可以携带在用于请求第二操作***从存储空间读取业务数据的第八中断请求中,第二操作***响应第八中断请求到其指示的共享内存上读取业务数据。
在本实施例中,各个中断请求可以但不限于通过软件协议的方式在***间进行传输,或者也可以通过硬件模块进行传递。以硬件模块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、内存通道的大小、内存通道的被占用状态,第一操作***读取元数据存储区中的记录,根据读取的记录确定数据存储区中处于空闲状态、总空间大于等于目标数据的长度的至少一个存储单元,得到目标虚拟通道包括:遍历元数据存储区存储的记录,判断是否存在指示内存通道处于空闲状态、且内存通道的大小大于等于目标数据的长度的第一目标记录;在存在第一目标记录的情况下,将第一目标记录中记录的通道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_tChannelId表示通道ID;uint8_t SrcId表示源CPU ID,源CPU是指向内存通道写入数据的CPU;uint8_tNetFn和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
序号 中断号 触发源 响应源 含义
1 8 RTOS核心 Linux核心 RTOS***主动释放CPU核心
2 9 Linux核心 RTOS核心 Linux***请求接管CPU核心
3 10 RTOS核心 Linux核心 RTOS***被动释放CPU核心
4 11 RTOS核心 Linux核心 RTOS***拒绝释放CPU核心
5 12 RTOS核心 Linux核心 RTOS抢占CPU核心
在一个示例性实施例中,通过硬件中断的方式向第二操作***发送中断通知消息。
可选的,硬件中断是指通过硬件设备产生的中断,可以为私有外设中断,也可以为共享外设中断,需要说明的是,硬中断是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,则表明没有符合要求的内存页供操作***使用,释放动态申请内存的锁,本次动态申请内存失败。
此外,动态申请了空间之后发现空间不够用时还可以动态调整大小,可选,可以再次发出更新后的内存申请指令,并对内存执行加锁操作,在加锁成功的情况下,若更新后的内存申请指令需要申请的内存空间增大,判断已申请的目标连续内存之后是否存在所需的内存空间,在存在的情况下,申请成功,若更新后的内存申请指令需要申请的内存空间减小,则释放部分内存空间。
本实施例通过划分多个存储区,利用索引位置根据实际需要的空间大小动态申请,使用完成后释放掉,并且动态申请了空间之后发现空间不够用时还可以动态调整大小,可以达到提高共享内存灵活性以及使用效率的效果。
在本实施例中,图7是根据本申请实施例的一种业务数据交互过程的示意图,如图7所示,第一操作***在运行过程中产生业务数据并判定该业务数据是第二操作***需要的或者是需要发送给第二操作***的。此时,第一操作***将业务数据存储至存储空间中,并向第二操作***发送第八中断请求,第二操作***响应该第八中断请求从存储空间中读取业务数据,并进行后续的处理。
第一操作***可以但不限于具有不同的运行机制,比如:控制第一操作***基于处理器周期性运行;或者,响应接收到的唤醒请求,控制第一操作***基于处理器运行;或者,根据处理器上所产生的操作业务与第一操作***之间的匹配度,控制第一操作***基于处理器运行。
可选地,在本实施例中,第一操作***的运行机制可以但不限于包括:周期性运行和触发式运行。周期性运行又可以称为轮询模式,触发式运行也可以称为触发模式,其可以但不限于包括两种方式:一种可以是请求触发,由唤醒请求触发第一操作***的唤醒运行。另一种可以是条件触发,由操作业务与第一操作***之间的匹配度来触发第一操作***的唤醒运行。
可选地,在本实施例中,第一操作***在周期性运行的情况下,其单个运行周期的时长与两个运行周期之间的间隔时长可以相同也可以不同。两个运行周期之间的间隔时长中第一操作***可以但不限于处于休眠状态,由第二操作***来使用为第一操作***分配的处理器核心。如果单个运行周期的时长与两个运行周期之间的间隔时长相同,则第一操作***和第二操作***交替占用为第一操作***分配的处理器核心相同时长。如果单个运行周期的时长与两个运行周期之间的间隔时长不同,则第一操作***和第二操作***交替占用为第一操作***分配的处理器核心不同时长。可以第一操作***占用的时长大于第二操作***占用的时长,也可以第二操作***占用的时长大于第一操作***占用的时长。
依据不同的运行场景,不同的***功能可以但不限于采用不同的运行机制运行第一操作***,从而更加灵活地找到与当前的运行场景,***功能更加匹配的运行机制来运行第一操作***,提高操作业务的处理效率。
在一个可选的实施方式中,提供了一种轮询模式下第一操作***(比如RTOS)的唤醒策略,图8是根据本申请实施例的一种第一操作***运行过程的示意图一,如图8所示,轮循模式可以为一种基于时间片的轮询调度模式,可以根据设置的时间进行RTOS周期性唤醒运行,该模式下多***(以Linux和RTOS双***为例)运行过程中(T0,T1)=(Tn,T(n+1))其中n取非0正整数,也就是说双***交替占用CPU核0相同时间。(T0,T1)时间片内RTOS调度CPU核0运行其进程,(T1,T2)时间片内Linux调度CPU核0运行其进程,该时间片内RTOS是休眠状态,后面时间片以此类推按照周期分割进行。
对于触发模式中的请求触发方式来说,唤醒请求可以但不限于是第一操作***所连接的设备发起的,或者也可以但不限于是第二操作***发起的。
在一个可选的实施方式中,以设备触发第一操作***唤醒运行为例,提供了一种触发模式下第一操作***(比如RTOS)唤醒策略,图9是根据本申请实施例的一种第一操作***运行过程的示意图二,如图9所示,触发模式可以由RTOS总线域的设备发起的中断启动,RTOS总线域连接了设备0至设备N,当RTOS处于休眠状态时,假设某一时刻设备0触发中断给RTOS,RTOS随即被唤醒,唤醒后的RTOS先触发抢占CPU核0的中断给Linux,Linux收到中断后首先释放CPU核0,并保存现场(将运行的数据压入堆栈),然后RTOS***调度CPU核0处理设备0触发的中断所指示的操作业务,如果当前处于轮询模式下,后续处理过程与上述轮询模式相同,这里不再赘述。
如果是第二操作***触发的第一操作***唤醒运行,第二操作***如果当前正在占用分配给第一操作***的处理器核心,可以直接释放该处理器核心,由第一操作***唤醒后使用该处理器核心处理第二操作***分配的操作业务。
在一个可选的实施方式中,第一操作***上运行的业务可以但不限于包括硬件接口信号的生成业务,在本实施方式中提供了一种硬件接口信号的生成过程,该过程包括如下步骤:
步骤11,通过第一操作***获取请求命令。
在步骤11中,请求命令可以是一种硬件接口信号的生成命令,例如,硬件接口信号可以是PECI信号,则请求命令是基于PECI协议的一种PECI请求命令。
可选地,硬件接口信号还可以是其他协议类型的硬件接口信号,例如,HDMI(highdefinition multimedia interface,高清多媒体接口)信号、RGMII(reduced gigabitmedia independent interface,并行总线)信号、SGMII(serial gigabit mediaindependent interface,单路传输的串行总线)信号、GPIO(general-purpose input/output,通用型输入输出端口)信号、SPI(serial peripheral interface,串行外设接口)信号等等。在此基础上,请求命令也可以是其他协议类型的请求命令,例如,在硬件接口信号为GPIO信号时,请求命令为GPIO请求命令。本申请对于请求命令和硬件接口信号的可选类型不作特殊限定。
步骤12,确定请求命令对应的多个逻辑位信息。
在步骤12中,第一操作***在得到请求命令之后,可以分析得到请求命令对应的多个逻辑位信息,其中,多个逻辑位信息之间存在先后顺序,第一操作***通过请求命令对应的多个逻辑位信息可以生成请求命令对应的波形信号(即硬件接口信号),从而通过硬件接口信号将请求命令包含的信息传输给其他设备。
可选地,请求命令中包括有至少一个字段,每个字段可以通过逻辑位0或1进行表示,在此基础上,每个字段与逻辑位1或0之间对应的转换关系即为该字段对应的逻辑位信息,在请求命令对应多个字段的情况下,请求命令对应有多个逻辑位信息。此外,每个逻辑位可通过高电平信号和低电平信号的结合使用来表示,例如,对于逻辑位0,可使用第一预设时长的高电平信号和第二预设时长的低电平信号来组合表示,对于逻辑位1,可使用第二预设时长的高电平信号和第一预设时长的低电平信号来组成表示,其中,第一预设时长和第二预设时长不同。在此基础上,由于每个逻辑位既包含有高电平信号,也包含有低电平信号,因此每个逻辑位实际上是通过一段波形信号(高低电平信号之间的变换呈现为一个波形)来表示的,由于请求命令对应有多个逻辑位信息,也就是对应有多个逻辑位,因此请求命令对应的硬件接口信号是由每个逻辑位信息对应的波形信号组合得到的一个波形信号。
步骤13,根据多个逻辑位信息和定时器生成请求命令对应的硬件接口信号。
可选地,步骤13中的定时器可以是第一操作***中的一个计时程序,定时器还可以是第一操作***所在芯片上的一个寄存器,其中,定时器至少可以提供计时功能以及计数功能。本申请采用定时器的计时功能和计数功能,结合多个逻辑位信息生成请求命令对应的硬件接口信号。
需要注意到的是,以芯片为BMC芯片、硬件接口信号为PECI信号为例,在相关技术中,为了实现BMC芯片与CPU等元器件之间的PECI通信,相关技术需要BMC芯片本身具备PECI控制器的硬件逻辑设计,从而导致了BMC芯片的设计成本较高的问题。换言之,相关技术中,为了在BMC芯片上生成PECI信号,则必须要预先在BMC芯片上实现PECI控制器的硬件逻辑设计,而在本申请中,仅需要第一操作***即可在BMC芯片上生成PECI信号,无需必须在BMC芯片上实现PECI控制器的硬件逻辑设计,从而降低了BMC芯片的设计难度和设计成本。
基于步骤11至步骤13的内容可知,在本实施方式中,采用由第一操作***生成请求命令对应的硬件接口信号的方式,首先通过第一操作***获取请求命令,然后确定请求命令对应的多个逻辑位信息,最后根据多个逻辑位信息和定时器生成请求命令对应的硬件接口信号。
由上述内容可知,本实施方式中通过第一操作***生成请求命令对应的硬件接口信号,从而实现了使用软件方式模拟生成硬件接口信号的技术效果,进而达到了无需芯片本身具备相关硬件接口信号的硬件逻辑设计的目的,不仅能够降低芯片的设计难度,还能减低芯片的设计成本。
由此可见,本实施方式达到了在无需对芯片进行硬件接口信号的硬件逻辑设计的基础上利用软件***生成硬件接口信号的目的,从而降低了芯片的设计难度,进而解决了相关技术中需要芯片本身具备控制器的硬件逻辑设计,从而导致的芯片的设计成本较高的技术问题。
可选地,在通过第一操作***检测到第二操作***触发的第一请求的情况下,获取请求数据,其中,第一操作***和第二操作***在同一处理器上运行,请求数据由第二操作***生成,第二操作***的业务响应速度小于第一操作***的业务响应速度。最后,由第一操作***对请求数据进行解析,得到请求命令。
可选地,在获取请求数据之前,可以通过第二操作***将请求数据存储至目标内存(即处理器上的存储空间)中,并在请求数据存储完毕之后,通过第二操作***触发第一请求,其中,第一请求用于通知第一操作***从目标内存中读取请求数据,目标内存为第一操作***和第二操作***均能够访问的内存。
在一种可选的实施例中,第一操作***还可以接收硬件接口信号对应的响应数据,其中,响应数据的传输形式与硬件接口信号的传输形式相同。其次,第一操作***还将响应数据的数据结构调整为第二数据结构。
另外,在将响应数据的数据结构调整为第二数据结构之后,通过第一操作***触发第二请求,其中,第二请求用于通知第二操作***读取响应数据。
以第一操作***为RTOS***,第二操作***为Linux***,硬件接口信号为PECI信号为例。针对命令请求过程,首先由Linux***中涉及PECI业务的上层应用(如故障诊断、CPU温度获取等)根据需要主动发起PECI请求命令,这些请求命令包括但不限于基本的Ping()命令,获取CPU温度命令及读取MSR寄存器(Machine Specific Register,机器特定寄存器)信息命令等,不同的PECI请求命令的代码实现由对应的接口函数完成。
可选地,Linux***按照PECI协议规范将各请求命令的目标地址、读写长度、命令码、para参数等请求数据写入目标内存中,待请求数据全部写入目标内存之后,Linux***产生第一请求通知RTOS***。其中,第一请求可以是一种SGI中断请求(softwaregenerated interrupt,一种处理器核之间的通信中断请求)。
需要注意到的是,在通过第二操作***将请求数据存储至目标内存中的过程中,第二操作***将请求数据按照第一数据结构的形式存储至目标内存中,其中,第一数据结构至少包括设备地址、写长度、读长度、命令码以及请求参数,设备地址用于表征目标器件的地址,目标器件为依据硬件接口信号生成响应数据的器件,命令码用于区别不同的请求命令,写长度用于表征从命令码开始到请求数据结束的字节数量,读长度用于表征请求数据中包含完成码以及读数据在内的字节数量,请求参数用于表征请求命令的参数。
针对命令响应过程,由RTOS***接收PECI总线传来的响应数据,然后完成数据解析,以将响应数据的信号形式从硬件接口信号的形式转换为软件信号的形式,例如,识别硬件接口信号中的高电平信号与低电平信号之间的波形变化,从而得到对应的逻辑位信息,基于逻辑为信息得到软件信号数据。解析后的响应数据经命令参数结构化模块进行调整并写入目标内存中。待解析后的响应数据全部写入完毕后,RTOS***触发第二请求通知Linux***。Linux***检测到第二请求,主动读取目标内存中存储的解析后的响应数据,数据经处理后返回给上层应用。其中,第二请求可以是一种SGI中断请求。
目标内存除了可以是共享内存之外,还可以是其他内存,例如,随机存取存储器(Random Access Memory,简称为RAM)、闪存存储器(Flash)等等。
在一种可选的实施例中,在根据逻辑位信息和定时器生成请求命令对应的硬件接口信号之后,第一操作***可以对硬件接口信号的电压进行转换,得到目标硬件接口信号。
可选地,第一操作***可以将硬件接口信号输入至电压转换器件中,得到电压转换器件输出的目标硬件接口信号。
可选地,上述的电压转换器件可以是CPLD,并且CPLD可以与目标器件相连接,其中,目标器件可以是服务器中的CPU。
需要注意到的是,上述业务除了可以应用于替代PECI接口生成PECI信号之外,还可以应用在其他硬件接口上。
由上述内容可知,联合嵌入式***的第一操作***与第二操作***,通过核间中断与共享内存的方式实现了嵌入式***中数据的交互,在RTOS***中构建请求命令的波形发生功能模块,通过软件模拟的方式实现嵌入式***与外部器件之间进行硬件接口信号的通信。另外,充分利用RTOS***的高实时性特点,保证了在模拟请求命令波形时时序的准确性,具有灵活高效的特点。能够显著降低芯片设计难度,由于采用软件模拟生成硬件接口信号,为嵌入式***中通信功能与其他业务功能间的优化设计提供了更多可能性,同时由于省去芯片中专门被设置为实现硬件接口信号通信的控制器,因此能够降低芯片的设计成本和制造成本。
在一个可选的实施方式中,第一操作***上运行的业务可以但不限于包括串口切换业务,在本实施方式中提供了一种串口的切换过程,该过程包括如下步骤:
步骤21,在检测到第二操作***接收到串口切换指令的情况下,通过第二操作***将串口切换指令发送至第一操作***。
可选的,在用户发起串口切换的时,可以通过第二操作***检测是否接收到用户发起的串口切换指令。需要说明的是,串口切换指令中需要包括待切换至的目标串口的信息,例如,串口切换指令包括待切换至的目标串口的串口号。
在一可选的实例中,串口切换指令的格式可以是<switch_command_app–nnumber–t sleep_time>,switch_command_app表征切换指令程序,-n代表切换的目标串口号,number的取值可以为1、2、3,-t代表从指令发起后休眠多久后执行切换动作,sleep_time单位为秒。
需要说明的是,在实现串口切换时可以为当前可以进行串口切换的串口进行编号,以便后续在进行串口切换时,通过串口号实现对目标串口的切换。
在一可选的实施例中,当前可以进行串口切换的串口包括:BMC Linux***串口、服务器BIOS(Basic Input Output System,基本输入输出***)串口以及SMART NIC(network interface controller,智能网络接口控制器)串口,对应的可以用1代表BMCLinux***串口、2代表服务器BIOS串口,以及3代表SMART NIC串口。
步骤22,通过第一操作***依据串口切换指令执行串口切换。
可选的,在检测到第二操作***接收到串口切换指令的情况下,第二操作***会立刻将串口切换指令发送至第一操作***中。需要说明的是,可以将第一操作***与第二操作***分别运行两个处理器核心中,然后第一操作***与第二操作***之间采用核间通信,这样可以有助于提高信号传递的可靠性。
需要说明的是,第一操作***对指令的响应速度远远快于第二操作***对指令的响应速度,这样通过第一操作***可以快速响应串口切换指令,并且在极短的时间内完成切换工作。
综上,通过运行于同一个处理器中的第一操作***和第二操作***来代替CPLD或FPGA实现串口切换软件功能,在第二操作***接收到串口切换指令的情况下,通过第二操作***将串口切换指令转发至第一操作***中,第一操作***根据串口切换指令实现串口的切换,避免了相关技术中需要通过CPLD或者FPGA将各个串口连接起来,然后利用CPLD或者FPGA中的开关结构的方式来实现串口切换,减少了硬件成本,并且在第一操作***接收到串口切换指令之后,可以迅速在很短的时间内完成串口切换,因此,通过本方案提出的技术方法既可以有效降低串口切换成本,还可以有效提高串口切换的效率。
为了第二操作***能够实现串口切换,在本实施方式提供的串口切换过程中,串口切换指令中至少包括:目标串口的串口号,在通过第一操作***依据串口切换指令执行串口切换之前,包括以下步骤:通过第一操作***从目标存储器中获取串口切换指令的解析规则;依据解析规则对串口切换指令中的目标串口的串口号进行解析,确定串口号对应的设备,其中,目标串口为设备的串口,目标串口连接于芯片中。
通过第一操作***依据串口切换指令执行串口切换包括:通过第一操作***确定设备的串口地址;依据串口地址将目标串口映射至芯片的目标输出接口。
为了使得第一操作***能够实现串口切换,第一操作***可以对串口切换指令进行解析,进而能够得到目标串口对应的设备。
在一可选的实施例中,可根据芯片或者服务器主板的不同来定制对串口切换指令的解析规则,并将解析规则保存在目标存储器中,目标存储器可以是带电可擦可编程只读存储器(eeprom)、非易失性内存(flash)等存储介质。需要说明的是,目标存储器可以部署在芯片中,还可以不部署在芯片中。通过目标存储器存储解析规则,提高了数据的安全性,以及可根据芯片或服务器主板的不同来定制解析规则,使得可编程性和可扩展性比较好。
在第一操作***接收到串口切换指令之后,从目标存储器中读取串口切换指令的解析规则,然后利用解析规则对串口切换指令中的目标串口的串口号进行解析,得到这个串口号对应的设备。
在得到串口号对应的设备之后,第一操作***就可以通过设备的串口地址将目标串口映射至芯片的目标输出接口。将设备的串口地址映射到目标输出接口之后,就可以通过目标输出接口实现对设备的访问。
需要说明的是,串口切换指令和解析规则可以根据使用的芯片的型号以及第一操作***、第二操作***的类型进行设置。
在本申请实施例一提供的串口切换方法中,芯片包括:串行数据总线,在通过第一操作***确定设备的串口地址之前,该方法还包括:确定与串行数据总线的串口连接的多个设备;通过串行数据总线将每个设备的串口映射至芯片的内存中,以得到每个设备的串口地址。
可选的,在上述的芯片中还包括串行数据总线,当前多个设备的串口的TX和RX与串行数据总线相连,比如当前的串口包括BMC Linux***串口(UART1)、服务器BIOS串口(UART2)以及SMART NIC串口(UART3)。UART,Universal Asynchronous Receiver/Transmitter,通用异步收发传输器。串口数据总线会将UART1、UART2和UART3不同串口的TX和RX数据映射到BMC内存的不同地址空间中,也就是上述的通过串行数据总线将每个设备的串口映射至芯片的内存中。例如,UART1 TX和RX buffer为串口UART1的串口地址,UART2TX和RX buffer为串口UART2的串口地址,UART3 TX和RX buffer为串口UART3的串口地址。
当用户下发串口切换指令时,第一操作***(RTOS)选择UART映射的不同三段内存(三选一),将其中一段内存数据交互给客户,达到模拟CPLD硬件串口切换电路的目的。
需要说明的是,如果不能区分不同设备的串口,那么开发人员在维修时不能准确定位哪一个设备的串口是存在问题的,因此,需要通过串口切换实现对异常问题的定位。
在本实施方式中,在依据串口地址将目标串口映射至芯片的目标输出接口之后,若目标输出接口与目标智能网卡连接,包括:通过智能网卡检测是否接收到对目标串口的访问请求;若接收到对目标串口的访问请求,则通过智能网卡将访问请求转发至目标串口。
可选的,在芯片的目标输出接口中还可以与目标智能网卡连接,然后通过智能网卡检测是否接收到用户对目标串口的访问请求,如果接收到对目标串口的访问请求,可以直接通过目标智能网卡实现对设备的串口访问,实现SOL(Serial over LAN,一种数据封包格式和协议的规范)功能。通过上述步骤,提高了对设备的串口访问效率。
在一可选的实施例中,在依据串口地址将目标串口映射至芯片的目标输出接口之后,还包括以下步骤:通过第一操作***获取串口切换指令的执行结果,其中,执行结果为以下之一:切换成功和切换失败;通过第一操作***将执行结果发送至第二操作***。
通过第二操作***接收串口切换指令的执行结果,其中,执行结果由第一操作***发送至第二操作***,执行结果为以下之一:串口切换成功和串口切换失败。
在第一操作***在切换完串口之后,会获取串口切换指令的执行结果,然后把串口切换指令的执行结果反馈到第二操作***中,告知第二操作***串口成功或者失败。
为了提高串口切换的成功率,在本实施方式中,在通过第二操作***接收串口切换指令的执行结果之后,还包括:若执行结果为执行失败,则重复执行通过第二操作***下发串口切换指令至第一操作***的步骤,直至执行结果为成功,或者,执行串口切换的次数超过预设次数。若执行串口切换的次数超过预设次数,通过第二操作***触发提示信号,其中,提示信号用于提示串口切换失败。
如果串口切换指令的执行结果为执行失败,那么需要重复执行通过第二操作***下发串口切换指令至第一操作***的步骤,直至执行结果为成功,或者,执行串口切换的次数超过预设次数,预设次数可以设置为3次。如果执行串口切换的次数超过了预设次数,对应的第二操作***触发提示信号,来提示串口切换失败,以便对这种情况及时处理。
在检测到第一操作***检测接收到串口切换指令之前,还包括:在第二操作***启动完成后,第二处理器核心触发第一中断,并发送第一信号至第一操作***;通过第一操作***依据第一信号检测芯片中的多个串口的运行状态,得到检测结果;通过第一处理器核心触发第二中断,并将检测结果通过第二信号发送至第二操作***;通过第二操作***接收检测结果,以确定芯片中的运行正常的串口数量。
在第二处理器核心触发第一中断,并发送第一信号至第一操作***之后,检测第一操作***是否接收到第一信号;若第一操作***接收到第一信号,则通过第一操作***检测芯片中多个串口的运行状态,得到检测结果。
当第二操作***启动完成之后,第二处理器核心触发第一中断(IPI中断,IPI,inter-processor interrupts,处理器间中断),来将第一信号发送到第一操作***,第一操作***通过第一信号可以得知第二操作***已正常启动,可以和第二操作***进行正常交互,并且第一操作***会根据第一信号检测芯片中的多个串口的运行状态,确定所有的串口是否运行正常。
在第一操作***检测得到检测结果之后,第一处理器核心会触发第二中断来将检测结果通过第二信号发送至第二操作***,第二操作***通过检测结果确定可切换的串口数量(即上述的运行正常的串口数量),以便后续对这些串口进行串口切换。同时为了第一操作***能够更加快速的实现串口切换,在第一操作***检测完成后,第一操作***开始阻塞等待接收第二操作***发出的串口切换指令。
在一可选的实施例中,第一操作***为RTOS,当第二操作***为Linux时,第一操作***运行在CPU0,第二操作***运行在CPU1,串口切换前的准备步骤包括:当CPU1上的Linux***启动到特定的阶段时候,CPU1会触发一个IPI中断,通知CPU0上的RTOS***,Linux已正常启动,可以和CPU1上的Linux进行正常交互,RTOS***收到来自CPU1上的IPI中断后,会启动串口切换控制器程序,检查UART1、UART2、UART3是否正常,然后CPU0再触发一个IPI中断,通知CPU1上的Linux操作***,RTOS***已启动完成,同时上报的信息包含CPU0上的RTOS操作***拥有可切换的串口数量,然后CPU0上的RTOS操作***开始阻塞等待接收CPU1上的操作***发出的切换指令。
在第二操作***运行存在异常的情况下,通过服务终端将串口切换指令下发至第一操作***;通过第一操作***依据串口切换指令执行串口切换。
由于第二操作***运行的功能较多、承担的业务量也比较大,因此,可以存在运行异常或者需要重启的情况,那么当第二操作***运行存在异常时,可以直接通过服务终端将串口切换指令下发至第一操作***,保证第一操作***正常执行串口切换。需要说明的是,服务终端可以是芯片所处的服务器上的终端。
通过上述步骤,保证了第一操作***不依赖于第二操作***来实现对串口的切换,提高了第一操作***执行串口切换的独立性。
综上,在本实施方式提供的串口切换过程中,通过运行于同一个处理器中的第一操作***和第二操作***来代替CPLD或FPGA实现串口切换软件功能,在第二操作***接收到串口切换指令的情况下,通过第二操作***将串口切换指令转发至第一操作***中,第一操作***根据串口切换指令实现串口的切换,避免了采用硬件的方式来实现串口切换,减少了硬件成本,并且第一操作***接收到串口切换指令之后,可以迅速在很短的时间内完成串口切换,因此,上述过程既可以有效降低串口切换成本,还可以有效提高串口切换的效率。
对于触发模式中的条件触发方式来说,当前操作业务与第一操作***之间的匹配度可以但不限于表示处理器上产生的操作业务是否适合由第一操作***来处理,将适合的操作业务分到第一操作***处理,从而实现了操作业务的合理分配,也提高了操作业务的处理效率。
在本实施例中,可以但不限于通过以下方式控制第一操作***基于处理器运行:检测处理器上所产生的当前操作业务的业务信息;在检测到业务信息与第一操作***之间的匹配度高于匹配度阈值的情况下,控制第一操作***基于处理器运行当前操作业务。
可选地,在本实施例中,操作业务与第一操作***之间的匹配度可以但不限于由操作业务的业务信息与第一操作***之间的匹配度来表示,业务信息可以但不限于是任何具有处理要求的维度,比如:业务响应速度,业务资源占用率,业务耦合度,业务重要性等等。
可选地,在本实施例中,业务信息与第一操作***之间的匹配度高于匹配度阈值可以表示操作业务是适合在第一操作***上运行的。匹配度阈值可以但不限于是根据第一操作***当前的资源使用情况或者运行要求动态调整的。从而使得第一操作***的适应性和灵活性更高。
在本实施例中,可以但不限于通过以下方式检测处理器上所产生的当前操作业务的业务信息:检测当前操作业务的目标响应速度,和/或,目标资源占用量,其中,业务信息包括:目标响应速度,和/或,资源占用量,目标响应速度是当前操作业务需要处理器达到的响应速度,目标资源占用量是当前操作业务需要处理器提供的资源量;在目标响应速度小于或者等于速度阈值,和/或,目标资源占用量小于或者等于占用量阈值的情况下,确定业务信息与第一操作***之间的匹配度高于匹配度阈值。
可选地,在本实施例中,业务信息可以但不限于包括:目标响应速度,和/或,资源占用量,目标响应速度是当前操作业务需要处理器达到的响应速度,目标资源占用量是当前操作业务需要处理器提供的资源量。可以单独考虑当前操作业务对处理器响应速度的需求,或者,单独考虑当前操作业务对处理器上可用资源的需求。也可以综合考虑二者进行当前操作业务的分配。
在一个可选的实施方式中,可以但不限于采用以下方式为各个操作***分配操作业务和处理资源:
根据资源动态分配规则将一组待分配业务分配给嵌入式***中对应的操作***,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率,业务耦合度,业务重要性,嵌入式***包括第一操作***和第二操作***,第一操作***和第二操作***运行于处理器上,第一操作***的响应速度高于第二操作***;
确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;
根据与每个待分配业务对应的操作***以及资源分配结果,将处理器的处理资源分配给第一操作***和第二操作***。
在处理器运行的过程中,可以获取一组待分配业务,即,待分配给第一操作***和第二操作***的业务。由于不同的待分配业务对于响应速度、业务资源占用率、与其他业务的业务耦合度、业务重要性等维度上可能会存在区别,因此,可以预先配置资源动态分配规则,资源动态分配规则可以包括用于进行业务分配的规则,将业务分配给对应的操作***,以便由对应的操作***的处理资源执行分配给自己的业务。可选地,资源动态分配规则可以包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率,业务耦合度,业务重要性,不同的分配规则可以具有对应的优先级,例如,优先级按照由高到低的顺序依次为:业务重要性,业务耦合度,业务响应速度,业务资源占用率。根据源动态分配规则,可以将一组待分配业务(或者待分配任务,不同的待分配业务可以对应于不同的进程)分配给嵌入式***中对应的操作***,得到业务分配结果。
可选地,基于对响应时间的约束,第一操作***可以是具有明确固定的时间约束的操作***,所有处理过程(任务调度)需要在固定的时间约束内完成,否则***会出错,其可以是实时操作***(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控制器可从板卡的SPI Flash(闪存)中读取配置文件;通过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***。整个调度过程可以由第二操作***主导。
通过本实施例,基于资源分配结果将未分配的处理器资源调度给对应的操作***,可以提高处理器资源的利用率。
在第一操作***运行结束后,可以控制其进入休眠状态。比如:控制第一操作***在运行结束后进行休眠。
第一操作***的运行结束可以是运行周期结束,也可以是唤醒请求处理完成,或者还可以是当前操作业务处理完成。
在第一操作***休眠后,可以由第二操作***占用分配给第一操作***的处理器核心,从而提高资源的利用率。比如:在控制第一操作***在运行结束后进行休眠之后,通知第二操作***允许占用第一操作***所使用的处理器核心,其中,第二操作***用于在第一操作***休眠期间将第一操作***所使用的目标处理器核心添加至第二操作***的调度资源池中,调度资源池中包括处理器中除目标处理器核心以外的其他处理器。
可选地,在本实施例中,通知第二操作***允许占用第一操作***所使用的处理器核心的方式可以但不限于包括向第二操作***发送中断请求的方式等等。第一操作***休眠后,向第二操作***发送中断请求来通知允许其占用第一操作***所使用的处理器核心,第二操作***响应该中断请求将第一操作***所使用的目标处理器核心添加至调度资源池中来进行调度和使用。
在一个示例性实施例中,可以但不限于对第二操作***上执行的操作业务进行监控,如果监控到异常操作业务,可以由第一操作***来接管异常操作业务的运行,从而避免操作业务运行异常对整个处理过程的影响,提高业务运行的成功率和效率。比如:监控第二操作***上执行的操作业务;在监控到第二操作***上执行的操作业务中存在异常操作业务的情况下,通过第一操作***接管异常操作业务。
可选地,在本实施例中,可以但不限于由处理器或者第一操作***对第二操作***进行监控,监控到的异常操作业务(比如业务线程挂死的操作业务)由第一操作***进行接管。或者也可以将监控到的异常操作业务分配到多操作***中与异常操作业务匹配度较高的操作***上接管
可选地,在本实施例中,对第二操作***上执行的操作业务进行监控的方式可以但不限于包括心跳信号的监控,业务日志的监控等等。比如:如果监控到生成了异常日志则确定操作业务异常。
在一个示例性实施例中,可以但不限于采用以下方式监控第二操作***上执行的操作业务:接收第二操作***上执行的每个操作业务的心跳信号;将心跳信号的频率不符合所对应的目标频率的操作业务确定为异常操作业务。
可选地,在本实施例中,第二操作***上执行的每个操作业务会产生心跳信号,不同操作业务的心跳信号具有不同的频率,将第二操作***上执行的每个操作业务的心跳信号接入操作业务的监控方,比如处理器或者第一操作***,将接入的心跳信号的频率与该操作业务对应的目标频率进行比对,对于心跳信号的频率不符合所对应的目标频率的操作业务作为异常操作业务进行接管。
可选地,在本实施例中,心跳信号的频率与所对应的目标频率是否符合可以但不限于通过比对二者是否完全一致来判定,如果完全一致则判定为符合,如果不完全一致则判定为不符合。或者,也可以但不限于给出一定的误差范围,通过比对心跳信号的频率是否落入目标频率的误差范围来判定二者是否符合,如果落入误差范围则判定为符合,如果未落入误差范围则判定为不符合。
在一个示例性实施例中,在通过第一操作***接管异常操作业务之后,可以但不限于通过以下方式重启第二操作***上的异常操作业务:向第二操作***发送重启指令,其中,重启指令用于指示重启异常操作业务。
可选地,在本实施例中,重启指令用于指示重启异常操作业务,第二操作***接收到重启指令后可以对异常操作业务进行初始化直至重新运行。
可选地,在本实施例中,第二操作***上的异常操作业务重新运行后第一操作***可以将接管的该异常操作业务返还给第二操作***,第一操作***可以将异常操作业务当前的运行现场保存至共享内存中,并发送中断请求给第二操作***,第二操作***从共享内存中读取异常操作业务当前的运行现场并加载至其运行的异常操作业务中,使得异常操作业务能够继续运行,提高了业务运行效率。
图10是根据本申请实施例的一种***异常监控过程的示意图,如图10所示,第一操作***接收第二操作***上执行的操作业务的心跳信号,检测出心跳信号的频率不符合目标频率的异常操作业务,由第一操作***接管第二操作***上的异常操作业务继续执行。并且第一操作***向第二操作***发送重启指令,使得第二操作***能够重启异常操作业务。
在一个示例性实施例中,可以但不限于通过以下方式启动双***:引导第一操作***启动;引导第二操作***启动。
可选地,在本实施例中,先引导第一操作***启动,再引导第二操作***启动,第一操作***可以但不限于是启动过程较快较简单的操作***,在第二操作***启动的过程中第一操作***可以执行一些紧急的或者有助于第二操作***启动的操作业务,从而可以提高操作***的启动效率,或者提高操作业务的处理效率。
可选地,在本实施例中,第一操作***和第二操作***可以但不限于先后启动,第一操作***可以但不限于比第二操作***启动更快,第一操作***也可以但不限于比第二操作***启动所需的条件更简单,在第一操作***先启动后可以运行能够满足第二操作***启动所需的条件,或者能够加快第二操作***启动的业务,从而使得多***能够更加高效快速地启动并运行业务。
比如:引导第一操作***启动后可以由第一操作***运行能够控制芯片环境参数达到第二操作***启动要求的业务(比如:风扇运行,参数控制等业务),使得芯片环境参数迅速达成第二操作***启动运行的环境,提高操作***的启动效率和运行效率。
可选地,在本实施例中,第一操作***可以但不限于由第一操作***的引导程序引导启动,第二操作***可以但不限于由第二操作***的引导程序引导启动。或者,二者可以由同一个引导程序先后引导启动。
在一个示例性实施例中,可以但不限于采用以下方式引导第一操作***启动:芯片启动上电,通过处理器唤醒处理器中为第一操作***分配的第一处理器核心;通过第一处理器核心执行第一操作***的引导程序引导第一操作***启动。
可选地,在本实施例中,可以但不限于根据第一操作***所在的处理器所具有的处理器核心确定第一操作***的第一处理器核心,比如:第一操作***所在的处理器可以但不限于包括多个处理器核心(处理器核心0至处理器核心N),可以但不限于将多个处理器核心中的一个或者多个处理器核心(比如处理器核心0)分配给第一操作***作为第一操作***的第一处理器核心。
可选地,在本实施例中,上述第一操作***的引导程序可以但不限于存储于芯片上的特定存储空间中专门用于启动第一操作***。
可选地,在本实施例中,上述第一操作***的第一处理器核心可以但不限于被设置为执行第一操作***的引导程序,可以但不限于通过执行第一操作***的引导程序启动第一操作***。
在一个示例性实施例中,可以但不限于采用以下方式通过第一处理器核心执行第一操作***的引导程序引导第一操作***启动:通过第一处理器核心执行二级程序加载器,其中,第一操作***的引导程序包括二级程序加载器;通过二级程序加载器加载第一操作***。
可选地,在本实施例中,第一操作***的引导程序可以但不限于包括二级程序加载器,第一处理器核心可以但不限于通过执行二级程序加载器(Second Program Loader,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)加载第二操作***。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
在本实施例中还提供了一种被设置为实施上述操作***的运行控制方法的嵌入式***,图11是根据本申请实施例的一种嵌入式***的示意图一,如图11所示,该嵌入式***可以包括:芯片和至少两个操作***,其中,芯片包括处理器1102、硬件控制器1104、第一总线1106和第二总线1108,其中,第一总线1106的带宽高于第二总线1108带宽,且第一总线1106被配置为多主多从模式,第二总线1108被配置为一主多从模式;至少两个操作***基于处理器1102运行;至少两个操作***通过第一总线1106进行通信;至少两个操作***通过第二总线1108实现对硬件控制器的控制。
其中,上述芯片可以是BMC芯片;上述处理器可以是多核处理器,上述硬件控制器可以被设置为控制连接到对应的对外接口的外部设备;上述第一总线被配置为多主多从模式,其可以是处理器的多个处理器内核之间进行通信所使用的总线,例如,AHB(AdvancedHigh Performance Bus,高级高性能总线),上述第二总线被配置为一主多从模式,其可以是处理器对硬件控制器之间控制所使用的总线,例如,APB(Advanced Peripheral Bus,***总线),第一总线的带宽高于第二总线带宽。
嵌入式***可以包括至少两个操作***,至少两个操作***基于处理器运行,而处理器的处理资源被动态分配给至少两个操作***,处理器的处理资源包括处理器核心,至少两个操作***通过第一总线进行通信,至少两个操作***通过第二总线实现对硬件控制器的控制。
可选地,硬件控制器可以包括一种或多种,可以包括但不限于以下至少之一的芯片外设对应的控制器:I2C,USB(Universal Serial Bus,通用串行总线),UART,ADC(Analogto Digital Converter,模拟数字转换器),JTAG(Joint Test Action Group,联合测试工作组),RTC(Real_Time Clock,实时时钟),GPIO(General Purpose Input/Output,通用输入输出),WDT(Watch Dog Timer,看门狗),虚拟UART(Virtual UART),超级I/O(Super I/O),SGPIO(Serial General Purpose Input/Output,串行通用输入输出),PWM(PulseWidth Modulation,脉冲宽度调制),FanTach(风扇调速),Timer(时钟),PECI(PlatformEnvironment Control Interface,平台环境式控制接口),邮箱(MailBox),还可以包括其他类型的控制器。对外接口可以包括一种或多种,可以包括但不限于与上述任一控制器对应的对外接口。
例如,BMC芯片的一个示例可以如图12所示,BMC芯片的硬件可以但不限于包括SOC子模块和BMC带外子模块,其中,SOC子模块主要包含ARM核心(ARM Core 1,ARM Core2,...,ARM Core 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(StaticRandom-Access Memory,静态随机存取存储器)及SPI控制器。
上述核心与各控制器通过第二总线互连,实现核心与各控制器间的交互。同时,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、GPIO、FanTech(风扇调速)、mailbox(邮箱)等芯片外设对应的控制器,通过这些控制器能够实现对BMC的PECI通信(比如使用GPIO模拟PECI)、风扇调控等带外管理功能。由图12可知,该BMC带外子模块可以但不限于通过第二总线实现与SOC子模块的交互。
BMC芯片通过第一总线与第二总线实现片内ARM核、存储单元及控制器硬件资源间的互连。处理器资源的动态均衡调度主要涉及BMC芯片的ARM核心资源调度,核间通信指ARM核之间进行的通信。以Linux***抢占RTOS***核心为例,Linux***首先在核2~N的某个核上通过片上第一总线向核1发送核间中断(中断号9)。如果此时RTOS***处于空闲状态允许抢占,核1通过第一总线回复核间中断(中断号10),并释放当前核1映射的外设控制器资源(如,PWM/PECI),Linux***收到核间中断10,发起抢占流程,把核1加入Linux SMP调度中,同时获得了PWM/PECI外设的控制权,可以通过第二总线对其进行控制。
一方面,至少两个操作***包括第一操作***和第二操作***,其中,芯片将通信值装载至第一总线,第一总线将携带有通信值的通信信号发送至第二操作***对应的通信寄存器,以实现第一操作***和第二操作***之间的通信,其中,通信值用于指示第一操作***和第二操作***之间的通信内容。
另一方面,芯片将控制值装载至第二总线,第二总线将携带有控制值的控制信号发送至硬件控制器对应的寄存器,以实现操作***对硬件控制器的控制,其中,控制值用于指示操作***对硬件控制器的控制内容。
操作***通过访问(比如执行读操作与写操作)各硬件控制器的寄存器来控制硬件控制器,操作***访问硬件控制器的寄存器的方式可以但不限于是通过对各硬件控制器的寄存器地址进行读或写,而这些寄存器的地址可以但不限于是在芯片设计时唯一且确定的。例如,操作***向特定的地址(即上述通信寄存器或者硬件控制器对应的寄存器)写特定的值(即上述通信值或者控制值)就能实现特定的功能(比如上述操作***之间的通信功能或者操作***对硬件控制器的控制功能)。也就是说,不同功能对应了不同的控制值,芯片中维护了硬件控制器的功能与控制值之间的对应关系,比如:控制值00表示空调加速一档,控制值01表示空调减速一档等等。
各个操作***之间,操作***与硬件控制器之间可以但不限于通过总线进行通信,控制等等的交互。上述操作***对各硬件控制器的寄存器的读写操作最终会转换为第一总线(或第二总线)对该硬件控制器的控制信号,这部分转换工作及第一总线(或第二总线)对硬件控制器的控制过程可以但不限于是由芯片内部硬件自动实现的。其实现过程遵循总线规范。其中,第一总线(或第二总线)的操作过程中一方面可以传输控制与总线协议相关的物理信号,另一方面还可以通过其物理数据通道传输有效数据至各硬件控制器。
第一总线***可以但不限于包括主模块、从模块和基础结构(Infrastructure)3部分,整个第一总线上的传输都由主模块发出,由从模块负责回应。基础结构则可以但不限于包括仲裁器(arbiter)、主模块到从模块的多路器、从模块到主模块的多路器、译码器(decoder)、虚拟从模块(dummy Slave)、虚拟主模块(dummy Master)。对于第一总线的多主(master)多从(slave)模式,master会首先向仲裁器发送发文请求,仲裁器决定何时让master获取总线访问的权限,master获取权限之后会将数据与控制信号发送到仲裁器,仲裁器通过地址解析判断对应的slave通路,然后将请求发送到对应的目的端。同样响应的数据会通过Decoder解析,然后返回给对应的master。通过这种多路复用的机制实现多对多的访问。
对于第二总线的一主多从模式,第二总线可以挂在第一总线***下,通Bridge(桥结构)将事务在总线***之间进行转化,此时Bridgre即为第二总线的master,其他的***设备(即硬件控制器)均为slave。数据请求只能由master发向slave,slave收到请求后返回相应的响应数据给master,此过程可以实现一对多的访问,且访问可以不涉及第一总线中的仲裁和Decoder解析操作。
通过上述第一总线被配置为多主多从模式,第二总线被配置为一主多从模式的嵌入式***,多主多从模式的第一总线能够利用相对更加复杂的逻辑电路和总线协议更高效地完成***间的通信,一主多从模式的第二总线能够利用相对较为简单的逻辑电路和总线协议在完成***对硬件控制器的控制的同时降低结构的复杂度,降低整个嵌入式***的功耗,总线上多种模式的配置和配合能够更加提高嵌入式***的运行性能。
通过上述嵌入式***,第一操作***和第二操作***基于处理器运行,并通过不同功能的总线实现操作***间的通信和硬件控制器的控制。由于第一操作***和第二操作***均是基于同一个处理器运行,避免了硬件器件的增加和部署,降低了***成本,并且合理利用处理器资源支持***之间的运行,因此,可以解决操作***的运行效率较低的技术问题,达到了提高操作***的运行效率的技术效果。
在一个示例性实施例中,至少两个操作***包括第一操作***和第二操作***,其中,第一操作***基于处理器控制目标硬件控制器运行目标操作业务;第一操作***在目标操作业务运行到目标业务状态时通过第二总线释放目标硬件控制器;第二操作***通过第二总线控制目标硬件控制器运行目标操作业务。
可选地,在本实施例中,目标操作业务由目标硬件控制器运行,第一操作***基于处理器控制目标硬件控制器。第二操作***可以通过接管目标硬件控制器来接管目标操作业务。
可选地,在本实施例中,目标操作业务的接管过程与前述实施例中类似,在此不做赘述。
第一操作***在目标操作业务运行到目标业务状态时,写禁用目标硬件控制器对应的特定的值(即上述控制值)到目标硬件控制器的寄存器以实现禁用目标硬件控制器的目的。上述需要写入的特定的值由芯片硬件自动装载到第二总线的数据通道中,最终以硬件方式实现对硬件控制器的控制(即实现释放操作)。
第二操作***写目标操作业务对应的特定的值(即上述控制值)到目标硬件控制器的寄存器以实现控制目标硬件控制器运行目标操作业务的目的。上述需要写入的特定的值由芯片硬件自动装载到第二总线的数据通道中,最终以硬件方式实现对硬件控制器的控制(即实现目标操作业务的运行)。
在一个示例性实施例中,第二操作***通过第一总线向第一操作***发送第一中断请求,其中,第一中断请求用于请求接管目标硬件控制器;第一操作***响应第一中断请求通过第二总线释放目标硬件控制器;或者,第一操作***在目标操作业务的业务属性达到目标业务属性时通过第二总线释放目标硬件控制器。
可选地,在本实施例中,第二操作***可以主动请求接管目标硬件控制器从而接管目标操作业务,第一操作***也可以主动释放目标硬件控制器从而释放目标操作业务。
可选地,在本实施例中,目标硬件控制器释放和接管的过程与前述实施例中类似,在此不做赘述。
第二操作***写第一中断请求对应的特定的值(即上述通信值)到中断寄存器中,以实现向第一操作***发送第一中断请求。上述需要写入的特定的值由芯片硬件自动装载到第一总线的数据通道中,最终以硬件方式实现中断请求功能。
在一个示例性实施例中,第一操作***响应第一中断请求确定是否由第二操作***接管目标硬件控制器;第一操作***在由第二操作***接管目标硬件控制器的情况下通过第二总线释放目标硬件控制器。
可选地,在本实施例中,第一操作***可以对于是否由第二操作***接管目标硬件控制器进行判定,判定过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,第一操作***在不由第二操作***接管目标硬件控制器的情况下通过第一总线向第二操作***发送第二中断请求,其中,第二中断请求用于指示拒绝第二操作***接管目标硬件控制器。
可选地,在本实施例中,第一操作***拒绝第二操作***接管目标硬件控制器的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,第一操作***向第二操作***发送第三中断请求,其中,第三中断请求用于指示第一操作***已释放目标硬件控制器;第二操作***响应第三中断请求通过第二总线控制目标硬件控制器运行目标操作业务。
可选地,在本实施例中,第一操作***向第二操作***通知已释放目标硬件控制器的过程与前述实施例中类似,在此不做赘述。
第二操作***写目标操作业务对应的特定的值(即上述控制值)到目标硬件控制器的寄存器以实现控制目标硬件控制器运行目标操作业务的目的。上述需要写入的特定的值由芯片硬件自动装载到第二总线的数据通道中,最终以硬件方式实现对硬件控制器的控制。
在一个示例性实施例中,至少两个操作***包括第一操作***和第二操作***,其中,第一操作***基于处理器中的目标处理器核心运行;第一操作***在运行到目标***状态时释放目标处理器核心;第二操作***将目标处理器核心添加至第二操作***的调度资源池中,其中,调度资源池中包括处理器中为第二操作***分配的处理器核心。
可选地,在本实施例中,至少两个操作***占用目标处理器核心的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,第二操作***通过第一总线向第一操作***发送第四中断请求,其中,第四中断请求用于请求占用目标处理器核心;第一操作***响应第四中断请求释放目标处理器核心;或者,第一操作***在***属性达到目标***属性时释放目标处理器核心。
可选地,在本实施例中,第二操作***可以主动抢占目标处理器核心,第一操作***也可以主动释放目标处理器核心。
可选地,在本实施例中,目标处理器核心的抢占和释放的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,第一操作***响应第四中断请求确定是否由第二操作***占用目标处理器核心;第一操作***在由第二操作***占用目标处理器核心的情况下释放目标处理器核心。
可选地,在本实施例中,第一操作***可以判定是否由第二操作***占用目标处理器核心,该过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,第一操作***在不由第二操作***占用目标处理器核心的情况下通过第一总线向第二操作***发送第五中断请求,其中,第五中断请求用于指示拒绝第二操作***占用目标处理器核心。
可选地,在本实施例中,第一操作***拒绝第二操作***占用目标处理器核心的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,第一操作***向第二操作***发送第六中断请求,其中,第六中断请求用于指示第一操作***已释放目标处理器核心;第二操作***响应第六中断请求将目标处理器核心添加至调度资源池中。
可选地,在本实施例中,第一操作***向第二操作***通知已释放目标处理器核心的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,至少两个操作***包括第一操作***和第二操作***,其中,处理器中的目标处理器核心已被添加至第二操作***的调度资源池中,其中,调度资源池中包括处理器中为第二操作***分配的处理器核心;第二操作***在第一操作***被唤醒时释放目标处理器核心;第一操作***基于目标处理器核心运行。
可选地,在本实施例中,第一操作***唤醒使用目标处理器核心的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,第二操作***在检测到第一操作***被唤醒时释放目标处理器核心;或者,第一操作***在被唤醒时向第二操作***发送第七中断请求,其中,第七中断请求用于请求第二操作***释放目标处理器核心;第二操作***响应第七中断请求释放目标处理器核心。
可选地,在本实施例中,第二操作***在第一操作***唤醒时主动释放目标处理器核心或者由第一操作***主动请求其释放目标处理器核心,该过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,至少两个操作***包括第一操作***和第二操作***,芯片还包括存储空间,至少两个操作***通过第一总线控制存储空间,其中,第一操作***基于处理器运行的过程中产生业务数据;第一操作***通过第一总线将业务数据存储至存储空间,并通过第一总线向第二操作***发送第八中断请求,其中,第八中断请求用于请求第二操作***从存储空间读取业务数据;第二操作***响应第八中断请求从存储空间读取业务数据。
可选地,在本实施例中,第一操作***和第二操作***可以但不限于通过存储空间和中断请求的传输实现***间业务数据的交互,***间业务数据的交互过程与前述实施例中类似,在此不做赘述。
第一操作***写特定的值到存储控制器的特定地址以实现将业务数据存储至存储空间的目的。上述需要写入的特定的值由芯片硬件自动装载到第一总线的数据通道中,最终以硬件方式实现对存储控制器的控制以及业务数据的存储(即实现了通过其物理数据通道传输有效数据)。
在一个示例性实施例中,第一操作***基于处理器周期性运行;或者,第一操作***响应接收到的唤醒请求基于处理器运行;或者,第一操作***根据处理器上所产生的当前操作业务与第一操作***之间的匹配度基于处理器运行。
可选地,在本实施例中,第一操作***的运行机制与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,第一操作***在运行结束后进行休眠;第二操作***在第一操作***休眠期间将第一操作***所使用的目标处理器核心添加至第二操作***的调度资源池中,其中,调度资源池中包括处理器中除目标处理器核心以外的其他处理器。
可选地,在本实施例中,在第一操作***休眠期间由第二操作***占用目标处理器核心的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,至少两个操作***通过第一总线部署的通信协议进行通信;或者,至少两个操作***通过第一总线,第二总线和硬件控制器中的通信硬件控制器进行通信。
可选地,在本实施例中,至少两个操作***可以但不限于通过第一总线部署的通信协议进行通信,即可以但不限于通过软件形式实现核间通信。
可选地,在本实施例中,至少两个操作***还可以但不限于通过第一总线,第二总线和硬件控制器中的通信硬件控制器进行通信,即可以但不限于通过硬件形式实现核间通信。
在一个示例性实施例中,至少两个操作***通过第一总线发送处理器间中断请求进行通信;或者,至少两个操作***中的一个操作***向第一总线发送***中断请求;第一总线将***中断请求转发至第二总线;第二总线向通信硬件控制器所控制的邮箱硬件模块发送***中断请求;邮箱硬件模块通过第二总线和第一总线将***中断请求发送至少两个操作***中的另一个操作***。
可选地,在本实施例中,在不同操作***之间进行处理器资源的抢占和释放,以及业务数据的交互可以但不限于通过核间中断完成,例如,SGI(Software GeneratedInterrupt,软件触发中断,Linux***中的核间中断),一个操作***可以通过IPI(Inter-Processor Interrupt,处理器间中断)向另一个操作***发出资源抢占请求(例如,核心抢占请求)或者资源释放请求(例如,核心释放请求),以请求进行处理资源的抢占或者释放。
可选地,在本实施例中,还可以但不限于通过带外子模块中邮箱控制器连接的邮箱通道mailbox实现核间通信。
在一个示例性实施例中,至少两个操作***包括第一操作***和第二操作***,其中,第一操作***通过第一总线监控第二操作***上执行的操作业务;第一操作***在第二操作***上执行的操作业务中存在异常操作业务时,通过第一总线接管异常操作业务。
可选地,在本实施例中,第一操作***对第二操作***上异常操作业务的监控过程与前述实施例中类似,在此不做赘述。
第二操作***的各操作业务以一定频率向存储控制器特定地址写值,第一操作***读存储控制器的特定地址以实现对第二操作***上执行的操作业务进行监控的目的。上述需要读取的存储控制器的特定地址由芯片硬件自动装载到第一总线的地址通道中,以硬件方式实现对存储控制器的特定地址的读取,读取的值从第一总线的数据通道以硬件的形式返回给第一操作***,最终实现对第二操作***上执行的操作业务的监控。
第一操作***接管异常操作业务可以是对异常操作业务对应的硬件控制器的控制。第一操作***写特定的值到上述异常操作业务的硬件控制器的寄存器以实现控制该硬件控制器。上述需要写入的特定的值由芯片硬件自动装载到第一总线的数据通道中,最终以硬件方式实现对硬件控制器的控制及异常操作业务的接管。
在一个示例性实施例中,第一操作***通过第一总线接收第二操作***上执行的操作业务的心跳信号;第一操作***通过第一总线将心跳信号的频率不符合所对应的目标频率的操作业务作为异常操作业务接管。
可选地,在本实施例中,第一操作***通过监控心跳信号的频率对第二操作***上异常操作业务进行监控的过程与前述实施例中类似,在此不做赘述。
第一操作***读存储控制器的特定地址的值以实现对第二操作***上执行的操作业务的心跳信号接收的目的。上述需要读取的存储控制器的特定地址由芯片硬件自动装载到第一总线的地址通道中,以硬件方式实现对存储控制器的特定地址的读取,读取的值由从第一总线的数据通道以硬件的形式返回给第一操作***,最终实现对第二操作***上执行的操作业务的心跳信号的接收。
在一个示例性实施例中,第一操作***在接管异常操作业务之后,通过第一总线向第二操作***发送重启指令,其中,重启指令用于指示重启异常操作业务。
可选地,在本实施例中,第一操作***在接管第二操作***上异常操作业务之后对异常操作业务的重启过程与前述实施例中类似,在此不做赘述。
第一操作***在接管异常操作业务之后,写特定的值到存储控制器的特定地址以实现重启第二操作***异常操作业务的目的。上述需要写入的特定的值由芯片硬件自动装载到第一总线的数据通道中,以硬件方式实现对存储控制器的特定地址的值更新。第二操作***读取上述特定值并解析,进而重启相应的异常操作业务。
在一个示例性实施例中,芯片还包括:存储器,存储器中存储了启动引导模块,芯片上电后运行启动引导模块引导至少两个操作***中的一个操作***启动,启动引导模块至少两个操作***中的其他操作***启动。
可选地,在本实施例中,多操作***的启动引导过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,至少两个操作***包括第一操作***和第二操作***,其中,第一操作***基于处理器控制目标硬件控制器运行目标操作业务;第一操作***在目标操作业务运行到目标业务状态时通过第二总线释放目标硬件控制器;第二操作***通过第二总线控制目标硬件控制器运行目标操作业务;第一操作***基于处理器中的目标处理器核心运行;第一操作***在运行到目标***状态时释放目标处理器核心;第二操作***将目标处理器核心添加至第二操作***的调度资源池中,其中,调度资源池中包括处理器中为第二操作***分配的处理器核心;芯片还包括存储空间,至少两个操作***通过第一总线控制存储空间,其中,第一操作***基于处理器运行的过程中产生业务数据;第一操作***通过第一总线将业务数据存储至存储空间,并通过第一总线向第二操作***发送第八中断请求,其中,第八中断请求用于请求第二操作***从存储空间读取业务数据;第二操作***响应第八中断请求从存储空间读取业务数据。
可选地,在本实施例中,操作***之间可以即接管硬件控制器,又抢占处理器核心,该过程与前述实施例中类似,在此不做赘述。
在本实施例中还提供了另一种被设置为实施上述操作***的运行控制方法的嵌入式***,上述嵌入式***可以运行于上述BMC芯片上,该嵌入式***包括:第一操作***,第二操作***,控制器和处理器,其中,第一操作***和第二操作***基于处理器运行,控制器被设置为检测第一操作***在运行过程中的运行状态,并根据运行状态控制第一操作***所使用的处理器资源。
通过上述嵌入式***,第一操作***和第二操作***基于处理器运行,控制器检测第一操作***在运行过程中的运行状态,并根据该运行状态对第一操作***所使用的处理器资源进行控制。由于第一操作***和第二操作***均是基于同一个处理器运行,避免了硬件器件的增加和部署,降低了***成本,并且可以在操作***运行的过程中对其使用的处理器资源进行控制,从而合理利用处理器资源支持***之间的运行,因此,可以解决操作***的运行效率较低的技术问题,达到了提高操作***的运行效率的技术效果。
在本实施例中,第一操作***和第二操作***可以与前述实施例中类似,第一操作***和第二操作***基于处理器运行,控制器可以是运行在第一操作***或者第二操作***下的软件模组。
可选地,在本实施例中,控制器的处理逻辑可以但不限于部署在处理器上,还可以部署在第一操作***上,或者也可以但不限于按照功能划分为第一控制单元和第二控制单元分别部署在第一操作***和第二操作***上,从而实现***间的处理器资源控制,操作业务管理和业务交互等功能。
在一个示例性实施例中,控制器,被设置为以下至少之一:检测第一操作***基于处理器所运行的目标操作业务的业务状态,其中,运行状态包括业务状态;检测第一操作***的***状态,其中,运行状态包括***状态,第一操作***基于处理器中的目标处理器核心运行。
可选地,在本实施例中,控制器对业务状态和***状态的检测与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,控制器,被设置为在检测到业务状态为目标业务状态的情况下,释放目标操作业务,其中,处理器资源包括目标操作业务;第二操作***,用于运行目标操作业务;和/或,控制器,被设置为在检测到***状态为目标***状态的情况下,释放目标处理器核心,其中,处理器资源包括目标处理器核心;第二操作***,用于将目标处理器核心添加至第二操作***的调度资源池中,调度资源池中包括处理器中为第二操作***分配的处理器核心。
可选地,在本实施例中,控制器控制目标操作业务以及目标处理器核心的释放过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的第一业务交互线程,运行于第二操作***上的第二业务交互线程,其中,控制器,被设置为在获取到第二业务交互线程向第一业务交互线程发送的第一中断请求的情况下,确定检测到业务状态为目标业务状态,其中,第一中断请求用于请求接管目标操作业务;或者,控制器,被设置为在目标操作业务的业务属性达到目标业务属性的情况下,确定检测到业务状态为目标业务状态。
可选地,在本实施例中,操作***间的交互过程可以但不限于通过各个操作***上分别部署的业务交互线程来控制。
可选地,在本实施例中,业务状态的检测过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,控制器,被设置为:响应第一中断请求,确定是否由第二操作***接管目标操作业务;在由第二操作***接管目标操作业务的情况下,释放目标操作业务。
可选地,在本实施例中,控制器对于是否由第二操作***接管目标操作业务的判定过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的第一业务交互线程,运行于第二操作***上的第二业务交互线程,其中,第一业务交互线程,用于在不由第二操作***接管目标操作业务的情况下,向第二业务交互线程发送第二中断请求,其中,第二中断请求用于指示拒绝第二操作***接管目标操作业务。
可选地,在本实施例中,拒绝第二操作***接管目标操作业务的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的第一业务交互线程,运行于第二操作***上的第二业务交互线程,其中,第一业务交互线程,用于向第二业务交互线程发送第三中断请求,其中,第三中断请求用于指示已释放目标硬件控制器;第二操作***,用于响应第三中断请求控制目标硬件控制器运行目标操作业务。
可选地,在本实施例中,对于已释放目标硬件控制器的通知过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的第一业务交互线程,运行于第二操作***上的第二业务交互线程,其中,控制器,被设置为在获取到第二业务交互线程向第一业务交互线程发送的第四中断请求的情况下,确定检测到***状态为目标***状态,其中,第四中断请求用于请求占用目标处理器核心;或者,控制器,被设置为在第一操作***的***属性达到目标***属性的情况下,确定检测到***状态为目标***状态。
可选地,在本实施例中,***状态的检测过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,控制器,被设置为:响应第四中断请求,确定是否由第二操作***占用目标处理器核心;在由第二操作***占用目标处理器核心的情况下,释放目标处理器核心。
可选地,在本实施例中,控制器对于是否由第二操作***占用目标处理器核心的判定过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的第一业务交互线程,运行于第二操作***上的第二业务交互线程,其中,第一业务交互线程,用于在不由第二操作***占用目标处理器核心的情况下,向第二业务交互线程发送第五中断请求,其中,第五中断请求用于指示拒绝第二操作***占用目标处理器核心。
可选地,在本实施例中,拒绝第二操作***占用目标处理器核心的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的第一业务交互线程,运行于第二操作***上的第二业务交互线程,其中,第一业务交互线程,用于向第二业务交互线程发送第六中断请求,其中,第六中断请求用于指示第一操作***已释放目标处理器核心;第二操作***,用于响应第八中断请求将目标处理器核心添加至调度资源池中。
可选地,在本实施例中,已释放目标处理器核心的通知过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,控制器,还被设置为:在处理器中的目标处理器核心已被添加至第二操作***的调度资源池中,且,第一操作***被唤醒运行的情况下,检测目标处理器核心是否被释放,其中,调度资源池中包括处理器中为第二操作***分配的处理器核心;在检测到第二操作***在第一操作***被唤醒时已释放目标处理器核心的情况下,基于目标处理器核心运行第一操作***。
可选地,在本实施例中,第一操作***唤醒时的操作过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的第一业务交互线程,运行于第二操作***上的第二业务交互线程,其中,第一业务交互线程,用于在检测到目标处理器核心未被释放的情况下,向第二业务交互线程发送第七中断请求,其中,第七中断请求用于请求第二操作***释放目标处理器核心;第二操作***,用于响应第七中断请求释放目标处理器核心。
可选地,在本实施例中,第二操作***释放目标处理器核心的协商过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的第一业务交互线程,运行于第二操作***上的第二业务交互线程,其中,第一业务交互线程,用于获取第一操作***基于处理器运行的过程中产生的业务数据;将业务数据存储至处理器上的存储空间;向第二业务交互线程发送第八中断请求,其中,第八中断请求用于请求第二操作***从存储空间读取业务数据;第二操作***,用于响应第八中断请求从存储空间读取业务数据。
可选地,在本实施例中,操作***之间业务数据的交互过程与前述实施例中类似,在此不做赘述。
在一个可选的实施方式中,提供了一种基于硬件模块实现操作***间业务数据通信的过程,以第一操作***为RTOS,第二操作***为Linux为例,图13是根据本申请可选的实施方式的一种操作***间的业务数据通信过程的示意图,如图13所示,Linux与RTOS间具备业务交互能力,这种能力可以但不限于是通过核间通信来实现的,比如采用基于共享内存的通信架构来实现,采用mailbox作为硬件模块,其作用是将内存的指针从一个Linux所在的核传送给RTOS所在的核,并且指针的发送和接收采用独立的mailbox通道。共享内存Shared Memory可以被所有核访问,该共享内存空间可以来自***内存DDR的固定存储区域。Linux核首先将数据写入共享内存,然后mailbox将中断请求传递到RTOS核上,而RTOS核拿到中断请求后,可以直接从Share Memory读取数据,整个过程由于不涉及数据拷贝操作,通信效率高,尤其适合大数据量传输。
运行在Linux上的***间业务交互线程(即上述第二业务交互线程)简称为Linux线程,运行在RTOS上的***间业务交互线程(即上述第一业务交互线程)简称为RTOS线程,上述异构的多***核间通信过程可以但不限于包括如下步骤:
步骤1,Linux线程拷贝数据到共享内存Share Memory中的指定位置1。
步骤2,Linux线程将共享内存Share Memory中的指定位置1的地址1和中断请求等信息写入硬件模块mailbox的通道A。
步骤3,RTOS线程接收硬件模块mailbox的通道A中的中断请求和地址1。
步骤4,RTOS线程从共享内存Share Memory中读取地址1中存储的数据。
步骤5,RTOS线程拷贝数据到共享内存Share Memory的指定位置2。
步骤6,RTOS线程将共享内存Share Memory中的指定位置2的地址2和中断请求等信息写入硬件模块Mailbox的通道B。
步骤7,Linux线程接收硬件模块mailbox的通道B中的中断请求和地址2。
步骤8,Linux线程从共享内存Share Memory中的地址2读取数据。
通过上述核间通信机制,实现了Linux的***间业务交互线程和RTOS的***间业务交互线程之间的消息传递、处理和响应。
在一个示例性实施例中,控制器还被设置为:控制第一操作***基于处理器周期性运行;或者,响应接收到的唤醒请求,控制第一操作***基于处理器运行;或者,根据处理器上所产生的操作业务与第一操作***之间的匹配度,控制第一操作***基于处理器运行。
可选地,在本实施例中,控制器对于第一操作***唤醒控制过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,控制器,被设置为:检测处理器上所产生的当前操作业务的业务信息;在检测到业务信息与第一操作***之间的匹配度高于匹配度阈值的情况下,控制第一操作***基于处理器运行当前操作业务。
可选地,在本实施例中,控制器对于操作业务与第一操作***之间匹配度的判定过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,控制器,被设置为:检测当前操作业务的目标响应速度,和/或,目标资源占用量,其中,业务信息包括:目标响应速度,和/或,资源占用量,目标响应速度是当前操作业务需要处理器达到的响应速度,目标资源占用量是当前操作业务需要处理器提供的资源量;在目标响应速度小于或者等于速度阈值,和/或,目标资源占用量小于或者等于占用量阈值的情况下,确定业务信息与第一操作***之间的匹配度高于匹配度阈值。
可选地,在本实施例中,控制器对于业务信息的处理过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,控制器,还被设置为:控制第一操作***在运行结束后进行休眠。
可选地,在本实施例中,控制器对于第一操作***的休眠控制过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的第一业务交互线程,运行于第二操作***上的第二业务交互线程,其中,第一业务交互线程,用于通知第二业务交互线程允许占用第一操作***所使用的处理器核心;第二操作***,用于在第一操作***休眠期间将第一操作***所使用的目标处理器核心添加至第二操作***的调度资源池中,调度资源池中包括处理器中除目标处理器核心以外的其他处理器。
可选地,在本实施例中,第二操作***在第一操作***休眠期间对于处理器核心的占用过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:运行于第一操作***上的业务接管线程,其中,业务接管线程,用于监控第二操作***上执行的操作业务;在监控到第二操作***上执行的操作业务中存在异常操作业务的情况下,接管异常操作业务。
可选地,在本实施例中,第一操作***上部署了业务接管线程对第二操作***上执行的操作业务进行监控。
可选地,在本实施例中,第二操作***上执行的操作业务的监控过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,业务接管线程,用于:接收第二操作***上执行的每个操作业务的心跳信号;将心跳信号的频率不符合所对应的目标频率的操作业务确定为异常操作业务。
可选地,在本实施例中,业务接管线程通过心跳信号的频率监控异常操作业务的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,业务接管线程,还用于:在通过第一操作***接管异常操作业务之后,向第二操作***发送重启指令,其中,重启指令用于指示重启异常操作业务。
可选地,在本实施例中,业务接管线程控制第二操作***重启异常操作业务的过程与前述实施例中类似,在此不做赘述。
在一个示例性实施例中,嵌入式***还包括:启动引导模块,被设置为引导第一操作***启动;引导第二操作***启动。
可选地,在本实施例中,多操作***的启动引导过程与前述实施例中类似,在此不做赘述。
在一个可选的实施方式中,提供了一种嵌入式***中业务管理的过程,以第一操作***为RTOS,第二操作***为Linux为例,图14是根据本申请可选的实施方式的一种嵌入式***中业务管理过程的示意图,如图14所示,嵌入式***的处理器上部署了n+1个CPU核,分别为核0,核1,……,核n。将核0分配给RTOS,将核1至核n分配给Linux,其中的核0为可动态配置型CPU核,即RTOS可以在上述的某种情况下释放核0以供Linux调度使用,而Linux也可以在上述的某种机制下抢占核0,调度核0的资源运行自身的任务。
对于RTOS,其可以包含任务调度器和各种线程(比如:实时控制线程、任务管理线程和***间业务交互线程等)。其中,任务调度器被设置为各线程的调度管理,各线程调度可采用轮询或者线程优先级的方式进行。
图15是根据本申请可选的实施方式的一种任务调度过程的示意图,如图15所示,任务调度器在采用轮询方式时为各个实时线程分配时间片,比如为实时线程A,实时线程B和实时线程C分别分配了时间片。实时线程C之后的时间片属于空调度状态,任务调度器可以唤醒定时器启动,将实时线程C之后的时间片分配给Linux,由Linux调度业务线程1和业务线程2占用核0。
实时控制线程用于处理RTOS中的高实时性线程。任务接管线程主要为了保障***的健壮性以及业务的连续性而设计,一旦Linux由于某种原因发生错误而无法运行传统业务线程时,RTOS将通过任务接管线程接管该业务,然后复位Linux,待Linux运行正常后,再次将该业务交还给Linux。而***间业务交互线程则用于RTOS和Linux的核间通信功能。
对于Linux***,其包含传统业务线程、核间调度器及***间业务交互线程等。传统业务线程用于处理***中数量多且复杂的非实时性业务(比如传统业务线程A,传统业务线程B和传统业务线程C等等)。核间调度器被设置为完成核0的抢占和调度。***间业务交互线程用于实现Linux与RTOS之间的通信。
上述嵌入式***可以但不限于采用如下的运行过程:
步骤a,***上电,首先引导RTOS启动,再引导Linux***启动,RTOS占用CPU核0,Linux***占用其余的核1至核n。
步骤b,RTOS***启动后其任务调度器根据轮询时间片策略分配时间片给需要调度的线程,若存在空闲的时间片,将其记录在空闲时间片链表中,并配置唤醒寄存器(即定时器);否则不进行空闲时间片记录和唤醒寄存器操作。
步骤c,RTOS***启动***间业务交互线程,等待交互过程,实际交互时使用上述核间通信机制。
步骤d,Linux***正常启动,传统业务被调度,而核间调度器、任务接管线程处于静默状态。
步骤e,Linux***启动核间调度器,该启动过程涉及两种情形,第一种情形为当RTOS任务调度器发现一个调度周期内无任何线程需要调度时,触发释放核0的核间中断给Linux***,RTOS将正在运行的数据压入堆栈,然后进入休眠状态,上述中断将触发Linux启动核间调度器,当该调度器接收到中断后,通知Linux***接管核0,Linux中负责调度均衡的模块将会给核0分配线程进行调度。第二种情形为当Linux***检测到其CPU占用率过高时,将启动Linux核间调度器并触发抢占核0的核间中断给RTOS,RTOS收到中断后会将正在运行的数据压入堆栈,然后进入休眠状态,同时Linux***接管核0进行调度。
步骤f,一旦Linux***由于某种原因出现错误并导致传统业务线程无法运行时,RTOS将通过任务接管线程接管该业务,然后复位Linux***,待Linux***运行正常时,再次将接管的业务交还给Linux***。
通过上述嵌入式***的运行过程,对嵌入式***中的多个操作***进行并行的管理和控制,利用RTOS实时***代替传统的CPLD、EC芯片、实时控制芯片等硬件器件,实现了嵌入式***的实时管理控制。采用通用嵌入式***加实时操作***的嵌入式异构***架构,有效改善了传统嵌入式***实时业务处理能力不足的现状,与此同时,通过将传统嵌入式***实时敏感性任务分配给实时操作***,显著减轻了传统嵌入式***的工作负载,提升了***运行效率。并且通过CPU核0的休眠和唤醒策略,使得嵌入式CPU算力得到充分发挥,有效提升了嵌入式***CPU资源的利用率。此外,采用RTOS实时***代替传统的CPLD、EC芯片、实时控制芯片等硬件逻辑器件,最直接的收益为硬件成本的节省,此外,由于是软件实现,相比传统基于硬件器件的实现方式具有更高的灵活性与扩展能力。
根据本申请实施例的另一个方面,还提供了另一种嵌入式***,上述嵌入式***可以运行于上述BMC芯片上,图16是本申请实施例的可选的嵌入式***的示意图二,如图16所示,上述嵌入式***可以包括:
第一操作***和第二操作***,第一操作***和第二操作***运行于处理器上,第一操作***的响应速度高于第二操作***;
业务管理模块,被设置为根据资源动态分配规则将一组待分配业务分配给对应的操作***,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率;
资源动态分配模块,被设置为确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;
资源自适应调度模块,被设置为根据与每个待分配业务对应的操作***以及资源分配结果,将处理器的处理资源分配给第一操作***和第二操作***。
在本实施例中,第一操作***和第二操作***可以与前述实施例中类似,在此不做赘述,业务管理模块、资源动态分配模块和资源自适应调度模块可以是运行在第一操作***或者第二操作***下的软件模组,通过进行上述模块划分,可以方便进行不同功能模块的开发与维护,同时,对于资源动态分配规则,通过对资源动态分配规则进行灵活设置,提高资源分配的灵活性。
通过上述嵌入式***,将处理器的处理资源分配给第一操作***和第二操作***,解决了相关技术中存在由于多核处理器多数的处理资源处于空闲状态导致的核心资源的整体利用率较低的问题,提高了处理资源的利用率。
在本实施例中还提供了一种操作***的运行控制装置,该装置被设置为实现上述实施例及可选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图17是根据本申请实施例的操作***的运行控制装置的结构框图,如图17所示,该装置包括:
第一检测模块1702,被设置为检测第一操作***在运行过程中的运行状态,其中,第一操作***和第二操作***基于处理器运行;
控制模块1704,被设置为根据运行状态控制第一操作***所使用的处理器资源。
通过上述装置,第一操作***和第二操作***基于处理器运行,第一检测模块检测第一操作***在运行过程中的运行状态,控制模块根据该运行状态对第一操作***所使用的处理器资源进行控制。由于第一操作***和第二操作***均是基于同一个处理器运行,避免了硬件器件的增加和部署,降低了***成本,并且可以在操作***运行的过程中对其使用的处理器资源进行控制,从而合理利用处理器资源支持***之间的运行,因此,可以解决操作***的运行效率较低的技术问题,达到了提高操作***的运行效率的技术效果。
在一个示例性实施例中,第一检测模块,被设置为以下至少之一:
检测第一操作***基于处理器所运行的目标操作业务的业务状态,其中,运行状态包括业务状态;
检测第一操作***的***状态,其中,运行状态包括***状态,第一操作***基于处理器中的目标处理器核心运行。
在一个示例性实施例中,第一检测模块,被设置为以下至少之一:
在检测到业务状态为目标业务状态的情况下,释放目标操作业务,其中,处理器资源包括目标操作业务,第二操作***用于运行目标操作业务;
在检测到***状态为目标***状态的情况下,释放目标处理器核心,其中,处理器资源包括目标处理器核心,第二操作***用于将目标处理器核心添加至第二操作***的调度资源池中,调度资源池中包括处理器中为第二操作***分配的处理器核心。
在一个示例性实施例中,上述装置还包括:
第一确定模块,被设置为在获取到第二操作***向第一操作***发送的第一中断请求的情况下,确定检测到业务状态为目标业务状态,其中,第一中断请求用于请求接管目标操作业务;或者,
第二确定模块,被设置为在目标操作业务的业务属性达到目标业务属性的情况下,确定检测到业务状态为目标业务状态。
在一个示例性实施例中,第一检测模块,被设置为:
响应第一中断请求,确定是否由第二操作***接管目标操作业务;
在由第二操作***接管目标硬件控制器的情况下,释放目标操作业务。
在一个示例性实施例中,上述装置还包括:
第一发送模块,被设置为在确定是否由第二操作***接管目标操作业务之后,在不由第二操作***接管目标操作业务的情况下,向第二操作***发送第二中断请求,其中,第二中断请求用于指示拒绝第二操作***接管目标操作业务。
在一个示例性实施例中,上述装置还包括:
第二发送模块,被设置为在检测到业务状态为目标业务状态的情况下,释放目标操作业务之后,向第二操作***发送第三中断请求,其中,第三中断请求用于指示已释放目标操作业务,第二操作***用于响应第三中断请求运行目标操作业务。
在一个示例性实施例中,上述装置还包括:
第三确定模块,被设置为在获取到第二操作***向第一操作***发送的第四中断请求的情况下,确定检测到***状态为目标***状态,其中,第四中断请求用于请求占用目标处理器核心;或者,
第四确定模块,被设置为在第一操作***的***属性达到目标***属性的情况下,确定检测到***状态为目标***状态。
在一个示例性实施例中,第三确定模块,被设置为:
响应第四中断请求,确定是否由第二操作***占用目标处理器核心;
在由第二操作***占用目标处理器核心的情况下,释放目标处理器核心。
在一个示例性实施例中,上述装置还包括:
第三发送模块,被设置为在确定是否由第二操作***占用目标处理器核心之后,在不由第二操作***占用目标处理器核心的情况下,向第二操作***发送第五中断请求,其中,第五中断请求用于指示拒绝第二操作***占用目标处理器核心。
在一个示例性实施例中,上述装置还包括:
第四发送模块,被设置为在检测到***状态为目标***状态的情况下,释放目标处理器核心之后,向第二操作***发送第六中断请求,其中,第六中断请求用于指示第一操作***已释放目标处理器核心,第二操作***用于响应第六中断请求将目标处理器核心添加至调度资源池中。
在一个示例性实施例中,上述装置还包括:
第二检测模块,被设置为在处理器中的目标处理器核心已被添加至第二操作***的调度资源池中,且,第一操作***被唤醒运行的情况下,检测目标处理器核心是否被释放,其中,调度资源池中包括处理器中为第二操作***分配的处理器核心;
运行模块,被设置为在检测到第二操作***在第一操作***被唤醒时已释放目标处理器核心的情况下,基于目标处理器核心运行第一操作***。
在一个示例性实施例中,上述装置还包括:
第五发送模块,被设置为在检测目标处理器核心是否被释放之后,在检测到目标处理器核心未被释放的情况下,向第二操作***发送第七中断请求,其中,第七中断请求用于请求第二操作***释放目标处理器核心,第二操作***用于响应第七中断请求释放目标处理器核心。
在一个示例性实施例中,上述装置还包括:
获取模块,被设置为获取第一操作***基于处理器运行的过程中产生的业务数据;
存储模块,被设置为将业务数据存储至处理器上的存储空间;
第六发送模块,被设置为向第二操作***发送第八中断请求,其中,第八中断请求用于请求第二操作***从存储空间读取业务数据,第二操作***用于响应第八中断请求从存储空间读取业务数据。
在一个示例性实施例中,上述装置还包括:
第一控制模块,被设置为控制第一操作***基于处理器周期性运行;或者,
响应模块,被设置为响应接收到的唤醒请求,控制第一操作***基于处理器运行;或者,
第二控制模块,被设置为根据处理器上所产生的操作业务与第一操作***之间的匹配度,控制第一操作***基于处理器运行。
在一个示例性实施例中,第二控制模块,被设置为:
检测处理器上所产生的当前操作业务的业务信息;
在检测到业务信息与第一操作***之间的匹配度高于匹配度阈值的情况下,控制第一操作***基于处理器运行当前操作业务。
在一个示例性实施例中,第二控制模块,被设置为:
检测当前操作业务的目标响应速度,和/或,目标资源占用量,其中,业务信息包括:目标响应速度,和/或,资源占用量,目标响应速度是当前操作业务需要处理器达到的响应速度,目标资源占用量是当前操作业务需要处理器提供的资源量;
在目标响应速度小于或者等于速度阈值,和/或,目标资源占用量小于或者等于占用量阈值的情况下,确定业务信息与第一操作***之间的匹配度高于匹配度阈值。
在一个示例性实施例中,上述装置还包括:
第三控制模块,被设置为控制第一操作***在运行结束后进行休眠。
在一个示例性实施例中,上述装置还包括:
通知模块,被设置为在控制第一操作***在运行结束后进行休眠之后,通知第二操作***允许占用第一操作***所使用的处理器核心,其中,第二操作***用于在第一操作***休眠期间将第一操作***所使用的目标处理器核心添加至第二操作***的调度资源池中,调度资源池中包括处理器中除目标处理器核心以外的其他处理器。
在一个示例性实施例中,上述装置还包括:
监控模块,被设置为监控第二操作***上执行的操作业务;
接管模块,被设置为在监控到第二操作***上执行的操作业务中存在异常操作业务的情况下,通过第一操作***接管异常操作业务。
在一个示例性实施例中,监控模块,被设置为:
接收第二操作***上执行的每个操作业务的心跳信号;
将心跳信号的频率不符合所对应的目标频率的操作业务确定为异常操作业务。
在一个示例性实施例中,上述装置还包括:
第七发送模块,被设置为在通过第一操作***接管异常操作业务之后,向第二操作***发送重启指令,其中,重启指令用于指示重启异常操作业务。
在一个示例性实施例中,上述装置还包括:
第一引导模块,被设置为引导第一操作***启动;
第二引导模块,被设置为引导第二操作***启动。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种芯片,其中,该芯片包括可编程逻辑电路以及可执行指令中的至少之一,该芯片在电子设备中运行,被设置为实现上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种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 (66)

1.一种嵌入式***,其特征在于,包括:芯片和至少两个操作***,其中,
所述芯片包括处理器、硬件控制器、第一总线和第二总线,其中,所述第一总线的带宽高于所述第二总线带宽,且所述第一总线被配置为多主多从模式,所述第二总线被配置为一主多从模式;
所述至少两个操作***基于所述处理器运行;
所述至少两个操作***通过所述第一总线进行通信;
所述至少两个操作***通过所述第二总线实现对硬件控制器的控制。
2.根据权利要求1所述的嵌入式***,其特征在于,所述至少两个操作***包括第一操作***和第二操作***,其中,
所述第一操作***基于所述处理器控制目标硬件控制器运行目标操作业务;
所述第一操作***在所述目标操作业务运行到目标业务状态时通过所述第二总线释放所述目标硬件控制器;
所述第二操作***通过所述第二总线控制所述目标硬件控制器运行所述目标操作业务。
3.根据权利要求2所述的嵌入式***,其特征在于,
所述第二操作***通过所述第一总线向所述第一操作***发送第一中断请求,其中,所述第一中断请求用于请求接管所述目标硬件控制器;所述第一操作***响应所述第一中断请求通过所述第二总线释放所述目标硬件控制器;或者,
所述第一操作***在所述目标操作业务的业务属性达到目标业务属性时通过所述第二总线释放所述目标硬件控制器。
4.根据权利要求3所述的嵌入式***,其特征在于,
所述第一操作***响应所述第一中断请求确定是否由所述第二操作***接管所述目标硬件控制器;
所述第一操作***在由所述第二操作***接管所述目标硬件控制器的情况下通过所述第二总线释放所述目标硬件控制器。
5.根据权利要求4所述的嵌入式***,其特征在于,
所述第一操作***在不由所述第二操作***接管所述目标硬件控制器的情况下通过所述第一总线向所述第二操作***发送第二中断请求,其中,所述第二中断请求用于指示拒绝所述第二操作***接管所述目标硬件控制器。
6.根据权利要求2所述的嵌入式***,其特征在于,
所述第一操作***向所述第二操作***发送第三中断请求,其中,所述第三中断请求用于指示所述第一操作***已释放所述目标硬件控制器;
所述第二操作***响应所述第三中断请求通过所述第二总线控制所述目标硬件控制器运行所述目标操作业务。
7.根据权利要求1至6中任一项所述的嵌入式***,其特征在于,所述至少两个操作***包括第一操作***和第二操作***,其中,
所述第一操作***基于所述处理器中的目标处理器核心运行;
所述第一操作***在运行到目标***状态时释放所述目标处理器核心;
所述第二操作***将所述目标处理器核心添加至所述第二操作***的调度资源池中,其中,所述调度资源池中包括所述处理器中为所述第二操作***分配的处理器核心。
8.根据权利要求7所述的嵌入式***,其特征在于,
所述第二操作***通过所述第一总线向所述第一操作***发送第四中断请求,其中,所述第四中断请求用于请求占用所述目标处理器核心;所述第一操作***响应所述第四中断请求释放所述目标处理器核心;或者,
所述第一操作***在***属性达到目标***属性时释放所述目标处理器核心。
9.根据权利要求8所述的嵌入式***,其特征在于,
所述第一操作***响应所述第四中断请求确定是否由所述第二操作***占用所述目标处理器核心;
所述第一操作***在由所述第二操作***占用所述目标处理器核心的情况下释放所述目标处理器核心。
10.根据权利要求9所述的嵌入式***,其特征在于,
所述第一操作***在不由所述第二操作***占用所述目标处理器核心的情况下通过所述第一总线向所述第二操作***发送第五中断请求,其中,所述第五中断请求用于指示拒绝所述第二操作***占用所述目标处理器核心。
11.根据权利要求7所述的嵌入式***,其特征在于,
所述第一操作***向所述第二操作***发送第六中断请求,其中,所述第六中断请求用于指示所述第一操作***已释放所述目标处理器核心;
所述第二操作***响应所述第六中断请求将所述目标处理器核心添加至所述调度资源池中。
12.根据权利要求1所述的嵌入式***,其特征在于,所述至少两个操作***包括第一操作***和第二操作***,其中,
所述处理器中的目标处理器核心已被添加至所述第二操作***的调度资源池中,其中,所述调度资源池中包括所述处理器中为所述第二操作***分配的处理器核心;
所述第二操作***在所述第一操作***被唤醒时释放所述目标处理器核心;
所述第一操作***基于所述目标处理器核心运行。
13.根据权利要求12所述的嵌入式***,其特征在于,
所述第二操作***在检测到所述第一操作***被唤醒时释放所述目标处理器核心;或者,
所述第一操作***在被唤醒时向所述第二操作***发送第七中断请求,其中,所述第七中断请求用于请求所述第二操作***释放所述目标处理器核心;所述第二操作***响应所述第七中断请求释放所述目标处理器核心。
14.根据权利要求1所述的嵌入式***,其特征在于,所述至少两个操作***包括第一操作***和第二操作***,所述芯片还包括存储空间,所述至少两个操作***通过所述第一总线控制所述存储空间,其中,
所述第一操作***基于所述处理器运行的过程中产生业务数据;
所述第一操作***通过所述第一总线将所述业务数据存储至所述存储空间,并通过所述第一总线向所述第二操作***发送第八中断请求,其中,所述第八中断请求用于请求所述第二操作***从所述存储空间读取所述业务数据;
所述第二操作***响应所述第八中断请求从所述存储空间读取所述业务数据。
15.根据权利要求1所述的嵌入式***,其特征在于,
所述第一操作***基于所述处理器周期性运行;或者,
所述第一操作***响应接收到的唤醒请求基于所述处理器运行;或者,
所述第一操作***根据所述处理器上所产生的当前操作业务与所述第一操作***之间的匹配度基于所述处理器运行。
16.根据权利要求15所述的嵌入式***,其特征在于,
所述第一操作***在运行结束后进行休眠;
所述第二操作***在所述第一操作***休眠期间将所述第一操作***所使用的目标处理器核心添加至所述第二操作***的调度资源池中,其中,所述调度资源池中包括所述处理器中除所述目标处理器核心以外的其他处理器。
17.根据权利要求1所述的嵌入式***,其特征在于,
所述至少两个操作***通过所述第一总线部署的通信协议进行通信;或者,
所述至少两个操作***通过所述第一总线,所述第二总线和所述硬件控制器中的通信硬件控制器进行通信。
18.根据权利要求17所述的嵌入式***,其特征在于,
所述至少两个操作***通过所述第一总线发送处理器间中断请求进行通信;或者,
所述至少两个操作***中的一个操作***向所述第一总线发送***中断请求;所述第一总线将所述***中断请求转发至所述第二总线;所述第二总线向所述通信硬件控制器所控制的邮箱硬件模块发送***中断请求;所述邮箱硬件模块通过所述第二总线和所述第一总线将所述***中断请求发送至所述至少两个操作***中的另一个操作***。
19.根据权利要求1所述的嵌入式***,其特征在于,所述至少两个操作***包括第一操作***和第二操作***,其中,
所述第一操作***通过所述第一总线监控所述第二操作***上执行的操作业务;
所述第一操作***在所述第二操作***上执行的操作业务中存在异常操作业务时,通过所述第一总线接管所述异常操作业务。
20.根据权利要求19所述的嵌入式***,其特征在于,
所述第一操作***通过所述第一总线接收所述第二操作***上执行的操作业务的心跳信号;
所述第一操作***通过所述第一总线将所述心跳信号的频率不符合所对应的目标频率的操作业务作为所述异常操作业务接管。
21.根据权利要求19所述的嵌入式***,其特征在于,
所述第一操作***在接管所述异常操作业务之后,通过所述第一总线向所述第二操作***发送重启指令,其中,所述重启指令用于指示重启所述异常操作业务。
22.根据权利要求1所述的嵌入式***,其特征在于,所述芯片还包括:存储器,所述存储器中存储了启动引导模块,
所述芯片上电后运行所述启动引导模块引导所述至少两个操作***中的一个操作***启动,所述启动引导模块引导所述至少两个操作***中的其他操作***启动。
23.根据权利要求1所述的嵌入式***,其特征在于,所述至少两个操作***包括第一操作***和第二操作***,其中,
所述第一操作***基于所述处理器控制目标硬件控制器运行目标操作业务;所述第一操作***在所述目标操作业务运行到目标业务状态时通过所述第二总线释放所述目标硬件控制器;所述第二操作***通过所述第二总线控制所述目标硬件控制器运行所述目标操作业务;
所述第一操作***基于所述处理器中的目标处理器核心运行;所述第一操作***在运行到目标***状态时释放所述目标处理器核心;所述第二操作***将所述目标处理器核心添加至所述第二操作***的调度资源池中,其中,所述调度资源池中包括所述处理器中为所述第二操作***分配的处理器核心;
所述芯片还包括存储空间,所述至少两个操作***通过所述第一总线控制所述存储空间,其中,所述第一操作***基于所述处理器运行的过程中产生业务数据;所述第一操作***通过所述第一总线将所述业务数据存储至所述存储空间,并通过所述第一总线向所述第二操作***发送第八中断请求,其中,所述第八中断请求用于请求所述第二操作***从所述存储空间读取所述业务数据;所述第二操作***响应所述第八中断请求从所述存储空间读取所述业务数据。
24.根据权利要求1所述的嵌入式***,其特征在于,所述至少两个操作***包括第一操作***和第二操作***,其中,
所述芯片将通信值装载至所述第一总线,所述第一总线将携带有所述通信值的通信信号发送至所述第二操作***对应的通信寄存器,以实现所述第一操作***和所述第二操作***之间的通信,其中,所述通信值用于指示所述第一操作***和所述第二操作***之间的通信内容。
25.根据权利要求1所述的嵌入式***,其特征在于,
所述芯片将控制值装载至所述第二总线,所述第二总线将携带有所述控制值的控制信号发送至所述硬件控制器对应的寄存器,以实现操作***对所述硬件控制器的控制,其中,所述控制值用于指示操作***对所述硬件控制器的控制内容。
26.一种嵌入式***,其特征在于,包括:第一操作***,第二操作***,控制器和处理器,其中,所述第一操作***和所述第二操作***基于所述处理器运行,
所述控制器用于检测所述第一操作***在运行过程中的运行状态,并根据所述运行状态控制所述第一操作***所使用的处理器资源。
27.根据权利要求26所述的嵌入式***,其特征在于,所述控制器,用于以下至少之一:
检测所述第一操作***基于所述处理器所运行的目标操作业务的业务状态,其中,所述运行状态包括所述业务状态;
检测所述第一操作***的***状态,其中,所述运行状态包括所述***状态,所述第一操作***基于所述处理器中的目标处理器核心运行。
28.根据权利要求27所述的嵌入式***,其特征在于,
所述控制器,用于在检测到所述业务状态为目标业务状态的情况下,释放所述目标操作业务,其中,所述处理器资源包括所述目标操作业务;所述第二操作***,用于运行所述目标操作业务;和/或,
所述控制器,用于在检测到所述***状态为目标***状态的情况下,释放所述目标处理器核心,其中,所述处理器资源包括所述目标处理器核心;所述第二操作***,用于将所述目标处理器核心添加至所述第二操作***的调度资源池中,所述调度资源池中包括所述处理器中为所述第二操作***分配的处理器核心。
29.根据权利要求28所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的第一业务交互线程,运行于所述第二操作***上的第二业务交互线程,其中,
所述控制器,用于在获取到所述第二业务交互线程向所述第一业务交互线程发送的第一中断请求的情况下,确定检测到所述业务状态为所述目标业务状态,其中,所述第一中断请求用于请求接管所述目标操作业务;或者,
所述控制器,用于在所述目标操作业务的业务属性达到目标业务属性的情况下,确定检测到所述业务状态为所述目标业务状态。
30.根据权利要求29所述的嵌入式***,其特征在于,所述控制器,用于:
响应所述第一中断请求,确定是否由所述第二操作***接管所述目标操作业务;
在由所述第二操作***接管所述目标操作业务的情况下,释放所述目标操作业务。
31.根据权利要求30所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的第一业务交互线程,运行于所述第二操作***上的第二业务交互线程,其中,
所述第一业务交互线程,用于在不由所述第二操作***接管所述目标操作业务的情况下,向所述第二业务交互线程发送第二中断请求,其中,所述第二中断请求用于指示拒绝所述第二操作***接管所述目标操作业务。
32.根据权利要求28所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的第一业务交互线程,运行于所述第二操作***上的第二业务交互线程,其中,
所述第一业务交互线程,用于向所述第二业务交互线程发送第三中断请求,其中,所述第三中断请求用于指示已释放所述目标硬件控制器;
所述第二操作***,用于响应所述第三中断请求控制所述目标硬件控制器运行所述目标操作业务。
33.根据权利要求28所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的第一业务交互线程,运行于所述第二操作***上的第二业务交互线程,其中,
所述控制器,用于在获取到所述第二业务交互线程向所述第一业务交互线程发送的第四中断请求的情况下,确定检测到所述***状态为所述目标***状态,其中,所述第四中断请求用于请求占用所述目标处理器核心;或者,
所述控制器,用于在所述第一操作***的***属性达到目标***属性的情况下,确定检测到所述***状态为所述目标***状态。
34.根据权利要求33所述的嵌入式***,其特征在于,所述控制器,用于:
响应所述第四中断请求,确定是否由所述第二操作***占用所述目标处理器核心;
在由所述第二操作***占用所述目标处理器核心的情况下,释放所述目标处理器核心。
35.根据权利要求34所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的第一业务交互线程,运行于所述第二操作***上的第二业务交互线程,其中,
所述第一业务交互线程,用于在不由所述第二操作***占用所述目标处理器核心的情况下,向所述第二业务交互线程发送第五中断请求,其中,所述第五中断请求用于指示拒绝所述第二操作***占用所述目标处理器核心。
36.根据权利要求28所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的第一业务交互线程,运行于所述第二操作***上的第二业务交互线程,其中,
所述第一业务交互线程,用于向所述第二业务交互线程发送第六中断请求,其中,所述第六中断请求用于指示所述第一操作***已释放所述目标处理器核心;
所述第二操作***,用于响应所述第八中断请求将所述目标处理器核心添加至所述调度资源池中。
37.根据权利要求26所述的嵌入式***,其特征在于,所述控制器,还用于:
在所述处理器中的目标处理器核心已被添加至所述第二操作***的调度资源池中,且,所述第一操作***被唤醒运行的情况下,检测所述目标处理器核心是否被释放,其中,所述调度资源池中包括所述处理器中为所述第二操作***分配的处理器核心;
在检测到所述第二操作***在所述第一操作***被唤醒时已释放所述目标处理器核心的情况下,基于所述目标处理器核心运行所述第一操作***。
38.根据权利要求37所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的第一业务交互线程,运行于所述第二操作***上的第二业务交互线程,其中,
所述第一业务交互线程,用于在检测到所述目标处理器核心未被释放的情况下,向所述第二业务交互线程发送第七中断请求,其中,所述第七中断请求用于请求所述第二操作***释放所述目标处理器核心;
所述第二操作***,用于响应所述第七中断请求释放所述目标处理器核心。
39.根据权利要求26至38中任一项所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的第一业务交互线程,运行于所述第二操作***上的第二业务交互线程,其中,
所述第一业务交互线程,用于获取所述第一操作***基于所述处理器运行的过程中产生的业务数据;将所述业务数据存储至所述处理器上的存储空间;向所述第二业务交互线程发送第八中断请求,其中,所述第八中断请求用于请求所述第二操作***从所述存储空间读取所述业务数据;
所述第二操作***,用于响应所述第八中断请求从所述存储空间读取所述业务数据。
40.根据权利要求26所述的嵌入式***,其特征在于,所述控制器还用于:
控制所述第一操作***基于所述处理器周期性运行;或者,
响应接收到的唤醒请求,控制所述第一操作***基于所述处理器运行;或者,
根据所述处理器上所产生的操作业务与所述第一操作***之间的匹配度,控制所述第一操作***基于所述处理器运行。
41.根据权利要求40所述的嵌入式***,其特征在于,所述控制器,用于:
检测所述处理器上所产生的当前操作业务的业务信息;
在检测到所述业务信息与所述第一操作***之间的所述匹配度高于匹配度阈值的情况下,控制所述第一操作***基于所述处理器运行所述当前操作业务。
42.根据权利要求41所述的嵌入式***,其特征在于,所述控制器,用于:
检测所述当前操作业务的目标响应速度,和/或,目标资源占用量,其中,所述业务信息包括:目标响应速度,和/或,资源占用量,所述目标响应速度是所述当前操作业务需要所述处理器达到的响应速度,所述目标资源占用量是所述当前操作业务需要所述处理器提供的资源量;
在所述目标响应速度小于或者等于速度阈值,和/或,所述目标资源占用量小于或者等于占用量阈值的情况下,确定所述业务信息与所述第一操作***之间的所述匹配度高于所述匹配度阈值。
43.根据权利要求40所述的嵌入式***,其特征在于,所述控制器,还用于:
控制所述第一操作***在运行结束后进行休眠。
44.根据权利要求43所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的第一业务交互线程,运行于所述第二操作***上的第二业务交互线程,其中,
所述第一业务交互线程,用于通知所述第二业务交互线程允许占用所述第一操作***所使用的处理器核心;
所述第二操作***,用于在所述第一操作***休眠期间将所述第一操作***所使用的目标处理器核心添加至所述第二操作***的调度资源池中,所述调度资源池中包括所述处理器中除所述目标处理器核心以外的其他处理器。
45.根据权利要求26所述的嵌入式***,其特征在于,所述嵌入式***还包括:运行于所述第一操作***上的业务接管线程,其中,
所述业务接管线程,用于监控所述第二操作***上执行的操作业务;在监控到所述第二操作***上执行的操作业务中存在异常操作业务的情况下,接管所述异常操作业务。
46.根据权利要求45所述的嵌入式***,其特征在于,所述业务接管线程,用于:
接收所述第二操作***上执行的每个操作业务的心跳信号;
将所述心跳信号的频率不符合所对应的目标频率的操作业务确定为所述异常操作业务。
47.根据权利要求45所述的嵌入式***,其特征在于,所述业务接管线程,还用于:
在所述通过所述第一操作***接管所述异常操作业务之后,向所述第二操作***发送重启指令,其中,所述重启指令用于指示重启所述异常操作业务。
48.根据权利要求26所述的嵌入式***,其特征在于,所述嵌入式***还包括:启动引导模块,
所述启动引导模块,用于引导所述第一操作***启动;引导所述第二操作***启动。
49.一种操作***的运行控制方法,其特征在于,包括:
检测第一操作***在运行过程中的运行状态,其中,所述第一操作***和第二操作***基于处理器运行;
根据所述运行状态控制所述第一操作***所使用的处理器资源。
50.根据权利要求49所述的方法,其特征在于,所述检测第一操作***在运行过程中的运行状态,包括以下至少之一:
检测所述第一操作***基于所述处理器所运行的目标操作业务的业务状态,其中,所述运行状态包括所述业务状态;
检测所述第一操作***的***状态,其中,所述运行状态包括所述***状态,所述第一操作***基于所述处理器中的目标处理器核心运行。
51.根据权利要求50所述的方法,其特征在于,所述根据所述运行状态控制所述第一操作***所使用的处理器资源,包括以下至少之一:
在检测到所述业务状态为目标业务状态的情况下,释放所述目标操作业务,其中,所述处理器资源包括所述目标操作业务,所述第二操作***用于运行所述目标操作业务;
在检测到所述***状态为目标***状态的情况下,释放所述目标处理器核心,其中,所述处理器资源包括所述目标处理器核心,所述第二操作***用于将所述目标处理器核心添加至所述第二操作***的调度资源池中,所述调度资源池中包括所述处理器中为所述第二操作***分配的处理器核心。
52.根据权利要求51所述的方法,其特征在于,所述方法还包括:
在获取到所述第二操作***向所述第一操作***发送的第一中断请求的情况下,确定检测到所述业务状态为所述目标业务状态,其中,所述第一中断请求用于请求接管所述目标操作业务;或者,
在所述目标操作业务的业务属性达到目标业务属性的情况下,确定检测到所述业务状态为所述目标业务状态。
53.根据权利要求52所述的方法,其特征在于,所述在检测到所述业务状态为目标业务状态的情况下,释放所述目标操作业务,包括:
响应所述第一中断请求,确定是否由所述第二操作***接管所述目标操作业务;
在由所述第二操作***接管所述目标硬件控制器的情况下,释放所述目标操作业务。
54.根据权利要求51所述的方法,其特征在于,所述方法还包括:
在获取到所述第二操作***向所述第一操作***发送的第四中断请求的情况下,确定检测到所述***状态为所述目标***状态,其中,所述第四中断请求用于请求占用所述目标处理器核心;或者,
在所述第一操作***的***属性达到目标***属性的情况下,确定检测到所述***状态为所述目标***状态。
55.根据权利要求54所述的方法,其特征在于,所述在检测到所述***状态为目标***状态的情况下,释放所述目标处理器核心,包括:
响应所述第四中断请求,确定是否由所述第二操作***占用所述目标处理器核心;
在由所述第二操作***占用所述目标处理器核心的情况下,释放所述目标处理器核心。
56.根据权利要求49至55中任一项所述的方法,其特征在于,所述方法还包括:
获取所述第一操作***基于所述处理器运行的过程中产生的业务数据;
将所述业务数据存储至所述处理器上的存储空间;
向所述第二操作***发送第八中断请求,其中,所述第八中断请求用于请求所述第二操作***从所述存储空间读取所述业务数据,所述第二操作***用于响应所述第八中断请求从所述存储空间读取所述业务数据。
57.根据权利要求49所述的方法,其特征在于,所述方法还包括:
控制所述第一操作***基于所述处理器周期性运行;或者,
响应接收到的唤醒请求,控制所述第一操作***基于所述处理器运行;或者,
根据所述处理器上所产生的操作业务与所述第一操作***之间的匹配度,控制所述第一操作***基于所述处理器运行。
58.根据权利要求57所述的方法,其特征在于,所述根据所述处理器上所产生的当前操作业务与所述第一操作***之间的匹配度,控制所述第一操作***基于所述处理器运行,包括:
检测所述处理器上所产生的当前操作业务的业务信息;
在检测到所述业务信息与所述第一操作***之间的所述匹配度高于匹配度阈值的情况下,控制所述第一操作***基于所述处理器运行所述当前操作业务。
59.根据权利要求49所述的方法,其特征在于,所述方法还包括:
监控所述第二操作***上执行的操作业务;
在监控到所述第二操作***上执行的操作业务中存在异常操作业务的情况下,通过所述第一操作***接管所述异常操作业务。
60.一种操作***的运行控制装置,其特征在于,包括:
第一检测模块,被设置为检测第一操作***在运行过程中的运行状态,其中,所述第一操作***和第二操作***基于处理器运行;
控制模块,被设置为根据所述运行状态控制所述第一操作***所使用的处理器资源。
61.一种芯片,其特征在于,所述芯片包括可编程逻辑电路以及可执行指令中的至少之一,所述芯片在电子设备中运行,用于实现权利要求49至59任一项所述的方法。
62.一种BMC芯片,其特征在于,包括:存储单元以及与所述存储单元连接的处理单元,所述存储单元被设置为存储程序,所述处理单元被设置为运行所述程序,以执行如权利要求49至59任一项所述的方法。
63.一种主板,其特征在于,包括:
至少一个处理器;
至少一个存储器,被设置为存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求49至59任一项所述的方法。
64.一种服务器,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,被设置为存放计算机程序;
处理器,被设置为执行存储器上所存放的程序时,实现权利要求49至59任一项所述的方法。
65.一种非易失性可读存储介质,其特征在于,所述非易失性可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求49至59任一项中所述的方法的步骤。
66.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求49至59任一项中所述的方法的步骤。
CN202380009034.4A 2023-04-28 2023-04-28 操作***的运行控制方法和装置,以及嵌入式***和芯片 Pending CN116868167A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2023091864 2023-04-28

Publications (1)

Publication Number Publication Date
CN116868167A true CN116868167A (zh) 2023-10-10

Family

ID=88234550

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202380009034.4A Pending CN116868167A (zh) 2023-04-28 2023-04-28 操作***的运行控制方法和装置,以及嵌入式***和芯片

Country Status (1)

Country Link
CN (1) CN116868167A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112380025A (zh) * 2020-12-03 2021-02-19 王志平 一种基于hsc的进程同步实现方法
CN117472588A (zh) * 2023-12-27 2024-01-30 山东方寸微电子科技有限公司 一种用于网络密码设备的混合式软件架构及密码设备
CN117555760A (zh) * 2023-12-29 2024-02-13 苏州元脑智能科技有限公司 服务器监测方法及装置、基板控制器及嵌入式***

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112380025A (zh) * 2020-12-03 2021-02-19 王志平 一种基于hsc的进程同步实现方法
CN117472588A (zh) * 2023-12-27 2024-01-30 山东方寸微电子科技有限公司 一种用于网络密码设备的混合式软件架构及密码设备
CN117472588B (zh) * 2023-12-27 2024-04-09 山东方寸微电子科技有限公司 一种用于网络密码设备的混合式软件架构及密码设备
CN117555760A (zh) * 2023-12-29 2024-02-13 苏州元脑智能科技有限公司 服务器监测方法及装置、基板控制器及嵌入式***
CN117555760B (zh) * 2023-12-29 2024-04-12 苏州元脑智能科技有限公司 服务器监测方法及装置、基板控制器及嵌入式***

Similar Documents

Publication Publication Date Title
CN116868167A (zh) 操作***的运行控制方法和装置,以及嵌入式***和芯片
EP3414662B1 (en) Virtualizing sensors
CN116257364B (zh) ***间的资源占用方法、装置、存储介质及电子装置
US20060143617A1 (en) Method, apparatus and system for dynamic allocation of virtual platform resources
US20120192000A1 (en) Method and apparatus for cost and power efficient, scalable operating system independent services
CN116244229B (zh) 硬件控制器的访问方法、装置、存储介质和电子设备
CN116830082A (zh) 嵌入式***的启动控制方法和装置、存储介质和电子设备
CN116302617B (zh) 共享内存的方法、通信方法、嵌入式***以及电子设备
KR102285749B1 (ko) 세마포어 기능을 갖는 시스템 온 칩 및 그것의 세마포어 구현 방법
CN116243995B (zh) 通信方法、装置、计算机可读存储介质以及电子设备
CN116541227B (zh) 故障诊断方法、装置、存储介质、电子装置及bmc芯片
US7398378B2 (en) Allocating lower priority interrupt for processing to slave processor via master processor currently processing higher priority interrupt through special interrupt among processors
CN111684426A (zh) 多节点***低功率管理
CN116627520B (zh) 基板管理控制器的***运行方法以及基板管理控制器
CN116243996B (zh) 业务的运行切换方法、装置、存储介质及电子装置
WO2012016472A1 (zh) 多核CPU加载Linux操作***的方法及***
CN116521209B (zh) 操作***的升级方法及装置、存储介质及电子设备
EP3770759A1 (en) Wake-up and scheduling of functions with context hints
CN116868170A (zh) 嵌入式***的运行方法和装置、嵌入式***及芯片
US8799625B2 (en) Fast remote communication and computation between processors using store and load operations on direct core-to-core memory
CN116302141B (zh) 串口切换方法、芯片及串口切换***
CN116521324B (zh) 中断虚拟化处理方法、装置及电子设备
CN116848519A (zh) 硬件接口信号的生成方法、装置及电子设备
Monaco et al. Shared resource orchestration extensions for kubernetes to support real-time cloud containers
CN117149472B (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