CN116830082A - 嵌入式系统的启动控制方法和装置、存储介质和电子设备 - Google Patents
嵌入式系统的启动控制方法和装置、存储介质和电子设备 Download PDFInfo
- Publication number
- CN116830082A CN116830082A CN202380009071.5A CN202380009071A CN116830082A CN 116830082 A CN116830082 A CN 116830082A CN 202380009071 A CN202380009071 A CN 202380009071A CN 116830082 A CN116830082 A CN 116830082A
- Authority
- CN
- China
- Prior art keywords
- operating system
- memory
- target
- processor
- service
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 203
- 238000003860 storage Methods 0.000 title claims abstract description 196
- 230000004044 response Effects 0.000 claims abstract description 79
- 238000012545 processing Methods 0.000 claims description 127
- 238000013507 mapping Methods 0.000 claims description 89
- 238000013500 data storage Methods 0.000 claims description 65
- 230000006854 communication Effects 0.000 claims description 53
- 238000004891 communication Methods 0.000 claims description 51
- 230000008878 coupling Effects 0.000 claims description 47
- 238000010168 coupling process Methods 0.000 claims description 47
- 238000005859 coupling reaction Methods 0.000 claims description 47
- 238000013468 resource allocation Methods 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 19
- 230000003993 interaction Effects 0.000 claims description 16
- 230000002618 waking effect Effects 0.000 claims description 16
- 238000009826 distribution Methods 0.000 claims description 13
- 230000007958 sleep Effects 0.000 claims description 9
- 230000000977 initiatory effect Effects 0.000 claims description 6
- 230000000875 corresponding effect Effects 0.000 description 112
- 230000008569 process Effects 0.000 description 67
- 230000006870 function Effects 0.000 description 47
- 238000007726 management method Methods 0.000 description 47
- 230000001276 controlling effect Effects 0.000 description 32
- 230000002093 peripheral effect Effects 0.000 description 26
- 230000001976 improved effect Effects 0.000 description 22
- 230000005540 biological transmission Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 14
- 238000013461 design Methods 0.000 description 11
- 238000011156 evaluation Methods 0.000 description 10
- 230000009977 dual effect Effects 0.000 description 9
- 230000000694 effects Effects 0.000 description 9
- 230000003044 adaptive effect Effects 0.000 description 7
- 238000012546 transfer Methods 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000002955 isolation Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 101100498818 Arabidopsis thaliana DDR4 gene Proteins 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 238000013075 data extraction Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000035772 mutation Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000008093 supporting effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000005059 dormancy Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 230000005855 radiation Effects 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Hardware Redundancy (AREA)
Abstract
本发明公开了一种嵌入式系统的启动控制方法和装置、存储介质和电子设备。其中,该方法包括:通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对目标设备的运行状态进行控制,其中,嵌入式系统包括第一操作系统;引导在处理器的第二处理器核心上启动第二操作系统,其中,嵌入式系统还包括第二操作系统,第一操作系统的响应速度高于第二操作系统,第一操作系统和第二操作系统通过第二总线进行通信,第二总线的带宽高于第一总线带宽;在第二操作系统启动之后,通过第二操作系统经由第一总线接管硬件控制器,以接管目标设备的控制权。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种嵌入式系统的启动控制方法和装置、存储介质和电子设备。
背景技术
对于如服务器、个人电脑、工控机等设备可以配备一些特定设备执行与设备运行相关的操作,例如,配备风扇进行散热。相关技术中,通常在系统上电后,这些特定设备就开始工作。而由于系统上电后,运行在处理器上的操作系统会经过一段时间才能正常接管特定设备,进行特定设备的运行状态控制,而在操作系统启动的过程中,特定设备是不可控的。
为实现在操作系统启动的过程中对特定设备的运行状态进行控制,通常采用额外的芯片在操作系统启动的过程中对特定设备的运行状态进行控制,然而,上述操作系统的启动控制方法,由于需要增加额外的芯片,增加了设备成本。由此可见,相关技术中的操作系统的启动控制方式,存在需要增加额外的芯片导致的设备成本高的问题。
发明内容
本发明实施例提供了一种嵌入式系统的启动控制方法和装置、存储介质和电子设备,以至少解决相关技术中的操作系统的启动控制方式存在需要增加额外的芯片导致的设备成本高的技术问题。
根据本发明实施例的一个方面,提供了一种嵌入式系统的启动控制方法,包括:通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对所述目标设备的运行状态进行控制,其中,所述嵌入式系统包括所述第一操作系统;引导在所述处理器的第二处理器核心上启动第二操作系统,其中,所述嵌入式系统还包括所述第二操作系统,所述第一操作系统的响应速度高于所述第二操作系统,所述第一操作系统和所述第二操作系统通过第二总线进行通信,所述第二总线的带宽高于所述第一总线带宽;在所述第二操作系统启动之后,通过所述第二操作系统经由所述第一总线接管所述硬件控制器,以接管所述目标设备的控制权。
根据本发明实施例的另一方面,还提供了一种嵌入式系统的启动控制装置,包括:第一控制单元,用于通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对所述目标设备的运行状态进行控制,其中,所述嵌入式系统包括所述第一操作系统;启动单元,用于引导在所述处理器的第二处理器核心上启动第二操作系统,其中,所述嵌入式系统还包括所述第二操作系统,所述第一操作系统的响应速度高于所述第二操作系统,所述第一操作系统和所述第二操作系统通过第二总线进行通信,所述第二总线的带宽高于所述第一总线带宽;第一执行单元,用于在所述第二操作系统启动之后,通过所述第二操作系统经由所述第一总线接管所述硬件控制器,以接管所述目标设备的控制权。
在一个示例性实施例中,所述第一控制单元包括:第一执行模块,用于在所述第一处理器核心上执行所述第一操作系统的第一控制任务,其中,所述第一控制任务用于对所述硬件控制器进行控制;读取模块,用于通过所述第一处理器核心读取与所述目标设备对应的指定传感器的传感器数据;第一发送模块,用于通过所述第一控制任务根据所述指定传感器的传感器数据经由所述第一总线向所述硬件控制器发送设备控制指令,以由所述硬件控制器按照所述设备控制指令对所述目标设备的运行状态进行控制。
在一个示例性实施例中,所述第一发送模块包括:第一确定子模块,用于通过所述第一控制任务根据所述指定传感器的传感器数据确定所述目标设备的设备运行参数的目标参数值,其中,所述设备运行参数为控制所述目标设备的运行状态的参数;发送子模块,用于通过所述第一控制任务将携带有所述目标参数值的所述设备控制指令经由所述第一总线发送给所述硬件控制器。
在一个示例性实施例中,所述第一确定子模块包括:确定子单元,用于在所述目标设备为风扇的情况下,通过所述第一控制任务根据所述指定传感器的传感器数据确定所述风扇的风扇运行参数的目标参数值。
在一个示例性实施例中,所述确定子单元包括:确定次子单元,用于在所述目标设备为风扇、且所述指定传感器为温度传感器的情况下,通过所述第一控制任务根据所述温度传感器的传感器数据确定所述风扇的转速的目标转速值,其中,所述风扇的转速与所述温度传感器所检测到的温度正相关。
在一个示例性实施例中,所述第一执行单元包括:第二发送模块,用于通过所述第二操作系统经由所述第二总线向所述第一操作系统发送第一核间中断,其中,所述第一核间中断用于请求由所述第二操作系统接管所述硬件控制器;控制模块,用于在接收到所述第一操作系统响应于所述第一核间中断返回的、用于指示同意由所述第二操作系统接管所述硬件控制器的第二核间中断的情况下,通过所述第二操作系统的第二控制任务经由所述第一总线对所述硬件控制器进行控制,其中,所述第二控制任务用于对所述硬件控制器进行控制。
在一个示例性实施例中,所述装置还包括:第二控制单元,用于在所述通过所述第二操作系统经由所述第二总线向所述第一操作系统发送第一核间中断之后,响应于获取到的所述第一核间中断,控制所述第一操作系统的第三控制任务进行休眠,其中,所述第三控制任务用于对所述硬件控制器进行控制;第一发送单元,用于在所述第三控制任务已休眠的情况下,通过所述第一操作系统经由所述第二总线向所述第二操作系统发送所述第二核间中断。
在一个示例性实施例中,所述装置还包括:第二执行单元,用于在所述第三控制任务已休眠的情况下,将所述第一操作系统的系统运行数据压入堆栈,其中,所述第二核间中断还用于指示所述第二操作系统接管所述第一处理器核心。
在一个示例性实施例中,所述装置还包括:唤醒单元,用于在所述通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制之前,在所述处理器所在的芯片上电之后,通过所述处理器唤醒所述第一处理器核心;运行单元,用于通过所述第一处理器核心运行所述第一操作系统的引导加载程序,以引导所述第一操作系统在所述第一处理器核心上启动。
在一个示例性实施例中,所述启动单元包括:第二执行模块,用于通过所述第一处理器核心执行二级程序加载器,以由所述二级程序加载器唤醒所述第二处理器核心;运行模块,用于通过所述第二处理器核心运行所述第二操作系统的通用引导加载器,以引导所述第二操作系统在所述第一处理器核心上启动。
在一个示例性实施例中,所述装置还包括:第三执行单元,用于在所述通过所述第二操作系统经由所述第一总线接管所述硬件控制器之后,在所述第二操作系统待重启的情况下,通过所述第二操作系统经由所述第二总线唤醒所述第一操作系统,并由所述第一操作系统经由所述第一总线接管所述硬件控制器,以接管所述目标设备的控制权;第三控制单元,用于控制所述第二操作系统进行系统重启。
在一个示例性实施例中,所述第三执行单元包括:发起模块,用于所述第二操作系统待重启的情况下,通过所述第二操作系统经由所述第二总线向所述第一操作系统发起系统唤醒中断,其中,所述系统唤醒中断用于唤醒所述第一操作系统。
在一个示例性实施例中,所述装置还包括:第一分配单元,用于根据资源动态分配规则将一组待分配业务分配给所述第一操作系统和所述第二操作系统中对应的操作系统,其中,所述资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率,业务耦合度,业务重要性;第一确定单元,用于确定与所述一组待分配业务对应的资源分配结果,其中,所述资源分配结果用于指示所述处理器的处理资源中与所述一组待分配业务中的每个待分配业务对应的处理资源,所述处理器的处理资源包括处理器核心;第二分配单元,用于根据与所述每个待分配业务对应的操作系统以及所述资源分配结果,将所述处理器的处理资源分配给所述第一操作系统和所述第二操作系统。
在一个示例性实施例中,所述第一分配单元包括以下至少之一:第一分配模块,用于将所述一组待分配业务中业务响应速度要求大于或者等于设定响应速度阈值的待分配业务分配给所述第一操作系统,以及,将所述一组待分配业务中业务响应速度要求小于设定响应速度阈值的待分配业务分配给所述第二操作系统;第二分配模块,用于将所述一组待分配业务中业务资源占用率小于第一占用率阈值的待分配业务分配给所述第一操作系统,以及,将所述一组待分配业务资源占用率大于或者等于第一占用率阈值的待分配业务分配给所述第二操作系统;第三分配模块,用于将所述一组待分配业务中包含敏感信息的待分配业务,分配给目标操作系统,其中,所述目标操作系统是所述第一操作系统和所述第二操作系统中,与使用对象交互频率低的操作系统。
在一个示例性实施例中,所述第一分配单元包括以下至少之一:第四分配模块,用于将所述一组待分配业务中与所述第一操作系统的已分配业务的业务耦合度大于或者等于第一耦合度阈值的待分配业务,分配给所述第一操作系统;第五分配模块,用于将所述一组待分配业务中与所述第二操作系统的已分配业务的业务耦合度大于或者等于第二耦合度阈值的待分配业务,分配给所述第二操作系统。
在一个示例性实施例中,所述第一确定单元包括:生成模块,用于根据所述一组待分配业务的分配结果,结合所述第一操作系统的处理资源的资源利用情况和所述第二操作系统的处理资源的资源利用情况,生成所述一组待分配业务与所述处理器的处理资源的资源映射表。
在一个示例性实施例中,所述第二分配单元包括:第六分配模块,用于在根据所述资源分配结果确定所述处理器的处理资源中的未分配处理资源存在对应的待分配业务的情况下,将所述未分配处理资源分配给与所述未分配处理资源对应的待分配业务所分配给的操作系统。
在一个示例性实施例中,所述装置还包括:第二发送单元,用于通过所述第一操作系统将目标数据发送至所述处理器的内存中的目标虚拟通道;第三发送单元,用于向所述第二操作系统发送中断通知消息;获取单元,用于通过所述第二操作系统响应所述中断通知消息,从所述内存中的所述目标虚拟通道获取所述目标数据。
在一个示例性实施例中,所述内存中包含数据存储区和元数据存储区,所述数据存储区被划分为多个存储单元,每个存储单元用于存储业务数据,所述元数据存储区用于存储所述数据存储区的各个存储单元的大小以及被占用状态。
在一个示例性实施例中,所述第二发送单元包括:第三执行模块,用于通过所述第一操作系统读取所述元数据存储区中的记录,根据读取的记录确定所述数据存储区中处于空闲状态、总空间大于等于所述目标数据的长度的至少一个存储单元,得到所述目标虚拟通道;第四执行模块,用于将所述元数据存储区中所述目标虚拟通道对应的至少一个存储单元的状态设置为被占用状态,并将所述目标数据存储在所述目标虚拟通道。
在一个示例性实施例中,所述获取单元包括:第五执行模块,用于通过所述第二操作系统读取所述元数据存储区中的记录,根据读取的记录确定所述目标虚拟通道;第六执行模块,用于从所述目标虚拟通道对应的至少一个存储单元获取所述目标数据,并将所述至少一个存储单元的状态设置为空闲状态。
在一个示例性实施例中,所述数据存储区中包含多个内存通道,每个内存通道由一个或多个存储单元构成,所述元数据存储区存储有多条记录,每条记录用于记录一个内存通道的元数据,每个内存通道的元数据至少包含内存通道的通道ID、内存通道的大小、内存通道的被占用状态;所述第三执行模块包括:第一遍历子模块,用于遍历所述元数据存储区存储的记录,判断是否存在指示内存通道处于空闲状态、且内存通道的大小大于等于所述目标数据的长度的第一目标记录;第二确定子模块,用于在存在所述第一目标记录的情况下,将所述第一目标记录中记录的通道ID指示的内存通道确定为所述目标虚拟通道。
在一个示例性实施例中,在内存通道被占用的情况下,所述内存通道的元数据还包括所述目标数据的源CPU核的ID以及所述目标数据的目的CPU核的ID;所述第五执行模块包括:第二遍历子模块,用于遍历所述元数据存储区存储的记录,判断是否存在第二目标记录,其中,所述第二目标记录指示内存通道处于被占用状态、且目的CPU核的ID为所述第二操作系统的CUP核的ID,源CPU核的ID非所述第二操作系统的CUP核的ID;第三确定子模块,用于在存在所述第二目标记录的情况下,将所述第二目标记录中记录的通道ID指示的内存通道确定为所述目标虚拟通道。
在一个示例性实施例中,所述装置还包括:第四执行单元,用于接收所述第一操作系统的内存申请指令,并对所述处理器的内存执行加锁操作,其中,所述内存申请指令用于申请使用所述处理器的内存;第五执行单元,用于在对所述内存加锁成功的情况下,读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间,其中,所述目标内存空间的大小大于等于所述内存申请指令申请的内存的大小;反馈单元,用于在所述内存中存在所述目标内存空间的情况下,将所述目标内存空间的地址信息反馈至所述第一操作系统,更新所述内存的被占用状态。
在一个示例性实施例中,所述内存中包括元数据存储区和数据存储区,所述数据存储区用于存储业务数据,所述元数据存储区存储有状态映射表,所述状态映射表用于记录所述数据存储区的被占用状态,所述第五执行单元包括:第七执行模块,用于从所述元数据存储区中读取所述状态映射表中的记录,并根据所述状态映射表中的记录判断所述数据存储区中是否存在所述目标内存空间。
在一个示例性实施例中,所述装置还包括:判断单元,用于在对处理器的内存执行加锁操作之前,判断所述内存当前是否处于被加锁状态,其中,所述被加锁状态表征所述内存处于被申请使用的状态;第六执行单元,用于在所述内存当前未处于被加锁状态的情况下,对所述内存执行加锁操作。
在一个示例性实施例中,所述装置还包括:释放单元,用于在读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间之后,在所述内存中不存在空闲的所述目标内存空间的情况下,释放对所述内存的加锁。
根据本发明实施例的又一方面,还提供了一种嵌入式系统,包括:芯片和至少两个操作系统,其中,所述芯片包括处理器、硬件控制器、第一总线和第二总线,其中,所述第二总线的带宽高于所述第一总线带宽,且所述第二总线被配置为多主多从模式,所述第一总线被配置为一主多从模式;所述至少两个操作系统基于所述处理器运行,其中,所述处理器的处理资源被动态分配给所述至少两个操作系统,所述处理器的处理资源包括处理器核心;所述至少两个操作系统通过所述第二总线进行通信;所述至少两个操作系统通过所述第一总线实现对所述硬件控制器的控制;所述至少两个操作系统用于实现上述任一项方法实施例中的步骤。
根据本申请实施例的又一方面,还提供了一种芯片,其中,所述芯片包括可编程逻辑电路以及可执行指令中的至少之一,所述芯片在电子设备中运行,用于实现上述任一项方法实施例中的步骤。
根据本申请实施例的又一方面,还提供了一种BMC芯片,其中,包括:存储单元以及与所述存储单元连接的处理单元,所述存储单元用于存储程序,所述处理单元用于运行所述程序,以执行上述任一项方法实施例中的步骤。
根据本申请实施例的又一方面,还提供了一种主板,其中,包括:至少一个处理器;至少一个存储器,用于存储至少一个程序;当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现上述任一项方法实施例中的步骤。
根据本申请实施例的又一方面,还提供了一种服务器,其中,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
在本发明实施例中,在处理器的不同处理器核心上运行嵌入式系统的不同操作系统的方式,通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对目标设备的运行状态进行控制,其中,嵌入式系统包括第一操作系统;引导在处理器的第二处理器核心上启动第二操作系统,其中,嵌入式系统还包括第二操作系统,第一操作系统的响应速度高于第二操作系统,第一操作系统和第二操作系统通过第二总线进行通信,第二总线的带宽高于第一总线带宽;在第二操作系统启动之后,通过第二操作系统经由第一总线接管硬件控制器,以接管目标设备的控制权,由于在处理器上运行嵌入式系统的至少两个操作系统,不同的操作系统的响应速度不同,由响应速度快的第一操作系统先对特定设备的运行状态进行控制,并在第二操作系统启动之后,接管特定设备的控制权,无需增加额外的芯片,同时由于设备控制是由软件实现的,可扩展性强,可以达到提高核心资源利用率的技术效果,进而解决了相关技术中的操作系统的启动控制方式存在需要增加额外的芯片导致的设备成本高的技术问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是根据本申请实施例的一种嵌入式系统的启动控制方法的硬件环境示意图;
图2是根据本申请实施例的一种可选的嵌入式系统的启动控制方法的流程示意图;
图3是根据本申请实施例的一种可选的风扇控制器的示意图;
图4是根据本申请实施例的一种可选的系统上电启动流程的示意图;
图5是根据本申请实施例的一种可选的核间中断的示意图;
图6是根据本申请实施例的另一种可选的嵌入式系统的启动控制方法的流程示意图;
图7是根据本申请实施例的一种可选的嵌入式系统的启动控制方法的示意图;
图8是根据本申请实施例的另一种可选的嵌入式系统的启动控制方法的示意图;
图9是根据本申请实施例的又一种可选的嵌入式系统的启动控制方法的示意图;
图10是根据本申请实施例的一种可选的嵌入式系统的示意图;
图11是根据本申请实施例的另一种可选的嵌入式系统的示意图;
图12是根据本申请实施例的一种可选的嵌入式系统的启动控制装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例所提供的方法实施例可以在服务器、计算机终端、设备终端或者类似的运算装置中执行。以运行在服务器上为例,图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,通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对目标设备的运行状态进行控制,其中,嵌入式系统包括第一操作系统。
本实施例中的嵌入式系统的启动控制方法可以应用到通过在处理器的处理器核心上运行操作系统对特定设备的运行状态进行控制的场景中,其可以对应于嵌入式系统的启动过程。上述嵌入式系统可以是嵌入式异构多系统,异构多系统是指在嵌入式系统的多核处理器中运行多种不同的操作系统(例如,第一操作系统、第二操作系统等),且这些操作系统同时运行于同一嵌入式系统中。不同的操作系统可以运行在不同的处理器核心上,这里的处理器可以为多核处理器,例如,8核处理器,也可以是包含其他数量的处理器核心的处理器,本实施例中对于多核处理器包含的核心数不做限定。
对于如服务器、个人电脑、工控机等设备,可以配备一些特定设备执行与设备运行相关的操作。相关技术中,通常在系统上电后,这些特定设备就开始工作。而由于系统上电后,运行在处理器上的操作系统会经过一段时间才能正常接管特定设备,进行特定设备的运行状态控制,而在操作系统启动的过程中,特定设备是不可控的。
例如,在系统上电后风扇就开始工作,由于系统上电后跑在CPU(CentralProcessing Unit,中央处理器,作为计算机系统的运算和控制核心,CPU是信息处理、程序运行的最终执行单元)上的操作系统会经过一段时间才能正常接管风扇,进行风扇转速的设置,所以在操作系统启动过程中风扇是不可控的。
相关技术中,为了实现在操作系统启动的过程中对特定设备的运行状态进行控制,通常采用额外的芯片在操作系统启动过程中控制特定设备的运行状态,额外的芯片可以是CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)、EC(EmbeddedController,嵌入式控制器)芯片、定制芯片等,采用额外的芯片的主要原因是CPLD、EC芯片、定制芯片这三者上电后可以在极短的时间内启动(例如,1秒内),实时性较高。但是,这三种方式往往需要额外的芯片或复杂可编程逻辑器件,成本会增加,并且由于是定制硬件,没有很好的可扩展性。
例如,为了实现在操作系统启动的过程中对风扇可以控制,服务器通过采用BMC(Baseboard Management Controller,基板管理控制器,服务器平台中的管理控制芯片)结合CPLD的控制方式,个人电脑采用EC芯片的控制方式(EC芯片根据温度调整风扇转速的功能),工控机采用定制芯片的控制方式,在服务器、个人电脑、工控机操作系统启动过程中,CPLD、EC芯片、定制芯片就会介入控制风扇的转速,等待操作系统完全启动后,风扇的控制权就会交给操作系统中的应用程序进行控制。
为了至少部分解决上述技术问题,可以采用多核多系统(例如,多核双系统)的启动控制方式,在处理器的不同处理器核心上运行嵌入式系统的不同操作系统,不同的操作系统的响应速度不同,对于第二操作系统未启动、重启或者其他无法对特定设备的运行状态进行控制的情况,可以由响应速度高于第二操作系统的第一操作系统对特定设备的运行状态进行控制,可以降低特定设备的运行状态不可控的情况,同时,由于不需要增加额外的成本,此外还具有很好的可扩展性。
在处理器上可以运行嵌入式系统,处理器可以是多核处理器(例如,八核处理器),其可以包括多个处理器核心。嵌入式系统可以包括第一操作系统和第二操作系统,第一操作系统可以运行在处理器的第一处理器核心上,第二操作系统可以运行在处理器的第二处理器核心上,第一处理器核心可以是处理器的至少一个处理器核心,第二处理器核心可以是处理器的多个处理器核心中除了第一处理器核心以外的全部或者部分处理器核心。除了处理器核心以外,运行各个操作系统的处理器资源还可以包括其他类型的资源,例如,控制器逻辑单元。此外,不同操作系统所占用的处理器核心是可以动态调整的。
处理器可以是某一芯片上的处理器该芯片可以包括上述的处理器、硬件控制器、第一总线和第二总线,其中,硬件控制器可以用于控制连接到对应的对外接口的外部设备;第一总线可以被配置为一主多从模式,其可以是处理器对硬件控制器之间控制所使用的总线,例如,APB(Advanced Peripheral Bus,外围总线)总线;第二总线可以被配置为多主多从模式,其可以是处理器302的多个核心之间进行通信所使用的总线,例如,AHB(AdvancedHigh Performance Bus,高级高性能总线)总线,第二总线的带宽高于第一总线带宽。
这里,第二总线被配置为多主多从模式是指:第二总线可以用于在多个主设备(Master)和多个从设备(Slave)之间进行数据通信,即,该第二总线可以连接有多个主设备和多个从设备,主设备与主设备之间、主设备与从设备之间均可使用该第二总线进行数据通信。整个第二总线上的数据传输都由主设备发出,由从设备负责回应。第一总线被配置为一主多从模式是指:第一总线可以用于在一个主设备和多个从设备之间进行数据通信,即,该第一总线可以连接有一个主设备和多个从设备,主设备与从设备之间可使用该第一总线进行数据通信。数据请求只能由主设备发向从设备,从设备收到请求后返回相应的响应数据给主设备,此过程可以实现一对多的访问。
需要说明的是,通过在操作系统之间使用多主多从模式的总线进行数据通信,可以方便各个操作系统基于需求主动发起数据请求,而硬件控制器主要是基于操作系统的控制对相应的硬件进行控制,因此,在操作系统和硬件控制器之间使用一主多从模式的总线进行通信,数据请求均由操作系统发向硬件控制器,可以提高硬件控制器控制的效率。
前述的AHB总线在AMBA(Advanced Microcontroller Bus Architecture,高级微控制器总线架构)2中就已经定义,AHB总线主要是作为系统高速总线使用,适用于高性能、低功耗的系统设计,其可用于高性能模块之间的连接,作为SoC(System on Chip,片上系统)的片上系统总线,高性能模块可以是CPU、DMA(Direct Memory Access,直接内存访问)和DSP(Digital Signal Processing,数字信号处理器)等。在AMBA协议中,AHB主要面向系统级高带宽高性能的系统互联设计,它包括以下一些特性:单个时钟边沿操作;非三态的实现方式;支持突发传输;支持分段传输;支持多master,多slave的互联模式;可配置32位"128位总线宽度;支持字节、半字节和字的传输。AHB系统包括以下三部分:主模块(即,主设备),从模块(即,从设备)和基础结构(Infrastructure),整个AHB总线上的传输都由主模块发出,由从模块负责回应。基础结构则包括仲裁器(arbiter)、主模块到从模块的多路器、从模块到主模块的多路器、译码器(decoder)、虚拟从模块(dummy Slave)和虚拟主模块(dummy Master)。
APB主要用于低带宽的周边外设之间的连接,例如UART(Universal AsynchronousReceiver/Transmitter,通用异步收发传输器)、1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB桥。其特点包括:
①可工作在高频下;
②协议简单:无复杂的时序;
③同步总线:总线上所有的transaction(读写操作)都依赖于时钟的上升沿;
④一主多从:一般情况下,APB挂在AHB总线系统下,通过AHB-APB Bridge将事务在AHB总线系统之间进行转化,此时Bridge即为APB的master,其他的外围设备均为slave;
⑤接口简单:相对应AXI(Advanced eXtensible Interface,高级可扩展接口)、AHB来说,接口比较简单;
⑥低功耗;
⑦可连接多种外围设备,例如,通过前述硬件控制器可控制的外围设备。
对于APB总线,数据请求只能由Master发向slave,slave收到请求后返回相应的响应数据给master,此过程可以实现一对多的访问,且访问不涉及AHB总线中的仲裁和Decoder解析操作。这里,AHB总线具有高带宽特性,用于系统中高性能模块(CPU、DMA等)间的互联,APB总线带宽较低,用于系统中周边外设(UART、I2C等)之间的连接。AHB总线逻辑电路和总线协议复杂,APB总线接口电路和总线协议相对简单。
这里,上述芯片可以是BMC芯片,BMC芯片可以是基于ARM(Advanced RISCMachine,进阶精简指令集机器)多核架构的SOC芯片,集成多种外围硬件IP(IntelligentPeripheral,智能外设),BMC芯片在主板(服务器母板)上放置。
可选地,基于对响应时间的约束,第一操作系统可以是具有明确固定的时间约束的操作系统,所有处理过程(任务调度)需要在固定的时间约束内完成,否则系统就会出错,可称为实时操作系统(Real Time Operating System,简称RTOS)。第二操作系统不具备该特征,第二操作系统一般采用公平任务调度算法,线程/进程数量增加时,就需要分享CPU时间,任务调试具有不确定性,可称为非实时操作系统,例如,Linux(全称GNU/Linux)系统、Windows系统,Linux系统是一套可自由传播的类Unix操作系统,是一个基于POSIX(Portable Operating System Interface,可移植操作系统接口)的多用户、多任务、支持多线程和多CPU的操作系统,Windows系统是以图形用户界面为基础研发的操作系统,主要运用于计算机、智能手机等设备。
例如,以ARM架构的处理器芯片为例,该处理器芯片可以为ARM处理器,该处理器包含多核CPU,在CPU0核心可以运行RTOS系统,在CPU核(1,N)(N≥2,处理器包含的处理器核心的总数量为N+1)上可以运行Linux系统(也可以运行Windows或其它操作系统)。
在本实施例中,在第二操作系统未启动、重启或者其他无法对目标设备的运行状态进行控制的情况下,可以通过第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对目标设备的运行状态进行控制。这里的目标设备可以是风扇,或者其他需要在系统启动是运行的设备,对于风扇,其对应的硬件控制器为风扇控制器,例如,PWM(PulseWidth Modulation,脉冲宽度调制)控制器、FanTach(风扇转速)控制器。这里,使用第一操作系统(例如,RTOS系统)代替传统的CPLD、EC芯片、定制芯片,一方面节省硬件成本,另一方面由于设备控制是由软件实现的,可扩展性较高。
例如,基于BMC双核实现双系统,RTOS系统和Linux系统,基于多核双系统实现风扇,利用RTOS系统实时性高的特性,在Linux系统启动的过程中,可以由RTOS系统代替CPLD、EC芯片、定制芯片控制风扇,即,接管风扇控制权,以足够快的速度对风扇的运行状态进行控制。
步骤S204,引导在处理器的第二处理器核心上启动第二操作系统。
在系统上电时或者第二操作系统重启时,可以引导在处理器的第二处理器核心上启动第二操作系统,以使得第二操作系统在第二处理器核心上运行。这里,在第二处理器核心上启动第二操作系统是指将第二处理器核心调度给第二操作系统,操作系统的系统文件或者镜像文件可以存储在处理器所在芯片上或者芯片以外的存储器内,例如,外部RAM(Random Access Memory,随机存取存储器)内。
步骤S206,在第二操作系统启动之后,通过第二操作系统经由第一总线接管硬件控制器,以接管目标设备的控制权。
在第二操作系统启动完成之后,可以一直由第一操作系统对目标设备的运行状态进行控制,考虑到在多核处理器上运行多个操作系统需要在多个操作系统之间进行数据交互,以及方便由一个操作系统进行设备的总体控制,也可以由第二操作系统接管目标设备的控制权。例如,可以通过第二操作系统经由第一总线接管硬件控制器。第二操作系统接管目标设备的控制权的方式可以是:在第二操作系统启动之后,由第二操作系统向第一操作系统发送设备接管请求,例如,通过第二总线发送中断请求,以请求接管目标设备的硬件控制器。第一操作系统可以接收第二操作系统发送的设备接管请求,将目标设备的控制权转交给第二操作系统,还可以执行与目标设备的控制权交接相关的操作,例如,停止运行用于对目标设备的运行状态进行控制的业务(进程)。
例如,等到Linux系统完全启动后,RTOS系统将风扇的控制权转交给Linux系统,由Linux系统对风扇进行控制。上述过程可以是在系统上电之后执行的,即,采用多核双系统的启动方式,先启动RTOS系统,利于更早介入风扇控制,而等到Linux系统完全启动之后,RTOS系统将风扇的控制权转交给Linux系统进行控制。
这里,需要说明的是,针对服务器而言,服务器至少具有可扩展性高和稳定性高的特性,其中,由于企业网络是不可能长久不变的,在网络信息化的今天,如果服务器没有一定的可扩展性,会影响到服务器在企业的使用,进而影响到企业之后的发展,因此,可拓展性成为服务器所需的最基本特性,只有在拥有较高的可扩展性才能保证后期更好的利用。可扩展性除了硬件上的可扩展性之外,还包含软件上的可扩展性,由于服务器的功能与计算机相比较而言还是十分复杂,因此不仅仅是在硬件配置方面,还有就是软件配置也是很重要的,想要实现更多的功能,没有全面软件支持也是没有办法想象的。
此外,由于服务器需要处理大量的数据用以支撑业务的持续性运行,因此服务器还有一个很重要的特征,例如,稳定性高,如果服务器的数据传输不能稳定运行,则无疑会对业务开展造成极大的影响。
本申请的方案利用服务器可扩展性高的特点,引入了第一操作系统、第二操作系统双软件系统用于生成硬件接口信号,同时还可以引入GPLD、BMC芯片等硬件设备分别用于调整硬件接口信号的传输电压、监控服务器内部其他器件的运行状态。在此基础上,本申请中采用由第一操作系统生成请求命令对应的硬件接口信号的方式,首先通过第一操作系统获取请求命令,然后确定请求命令对应的多个逻辑位信息,最后根据多个逻辑位信息和定时器生成请求命令对应的硬件接口信号。由上述内容可知,本申请通过第一操作系统生成请求命令对应的硬件接口信号,从而实现了使用软件方式模拟生成硬件接口信号的技术效果,进而达到了无需芯片本身具备相关硬件接口信号的硬件逻辑设计的目的不仅能够降低芯片的设计难度,还能减低芯片的设计成本。本申请达到了在无需对芯片进行硬件接口信号的硬件逻辑设计的基础上利用软件系统生成硬件接口信号的目的,从而降低了芯片的设计难度,进而解决了相关技术中需要芯片本身具备控制器的硬件逻辑设计,从而导致的芯片的设计成本较高的技术问题。
另外,引入了第一操作系统、第二操作系统双软件系统还能确保服务器的稳定性,由于所述第二操作系统的业务响应速度小于所述第一操作系统的业务响应速度,因此,使用业务响应速度更快的第一操作系统生成硬件接口信号,能够保证硬件接口信号的生成不会中断,从而确保硬件接口信号能够持续稳定的输出。
通过上述步骤S202至步骤S206,通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对目标设备的运行状态进行控制,其中,嵌入式系统包括第一操作系统;引导在处理器的第二处理器核心上启动第二操作系统,其中,嵌入式系统还包括第二操作系统,第一操作系统的响应速度高于第二操作系统,第一操作系统和第二操作系统通过第二总线进行通信,第二总线的带宽高于第一总线带宽;在第二操作系统启动之后,通过第二操作系统经由第一总线接管硬件控制器,以接管目标设备的控制权,解决了相关技术中的操作系统的启动控制方式,存在需要增加额外的芯片导致的设备成本高的问题,节省了硬件成本,提高了设备控制的可扩展性。
在一个示例性实施例中,通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制之前,上述方法还包括:
S11,在处理器所在的芯片上电之后,通过处理器唤醒第一处理器核心;
S12,通过第一处理器核心运行第一操作系统的引导加载程序,以引导第一操作系统在第一处理器核心上启动。
整个系统按照工作时段可以划分为两个阶段,初始启动阶段和实时运行阶段,本实施例中的启动控制方法可以是在初始启动阶段或者实时运行阶段执行的。对于初始启动阶段,初始启动阶段起于系统上电,即,处理器所在的芯片上电,系统上电后会唤醒一个核心去执行操作系统的引导动作,其余核心暂时处于休眠状态,被唤醒的核心可以是第一处理器核心。
可选地,上电后系统将首先执行一个预置的核心调度策略(启动引导策略),即,由处理器的一个处理器核心执行核心调度策略,核心调度策略可以存储在SOC片上的RAM或Norflash(非易失闪存)中,该调度策略可以根据不同的设计需求进行灵活配置,其主要功能包括:指定不同操作系统需要运行的初始处理资源(处理器核心),确定异构操作系统的引导过程,芯片上电可以是指SOC芯片层面的上电。
可选地,芯片可以是BMC(Baseboard Management Controller,基板管理控制器,服务器平台中的管理控制芯片)芯片,是指基于ARM多核架构的SOC芯片,集成多种外围硬件IP(Intelligent Peripheral,智能外设),BMC芯片在主板(服务器母板)上放置,芯片上电是指SOC芯片层面的上电。
在第一处理器核心唤醒之后,可以通过引导加载程序在第一处理器核心上引导运行第一操作系统:可以,由第一处理器核心通过引导加载程序引导第一操作系统在第一处理器核心上启动。引导加载(BootLoader)程序可以位于电脑或其他计算机应用上,其是指用于引导操作系统加载的程序,例如,BootRom里的固有程序,固有程序指的是引导操作系统启动的代码,属于BootLoader程序,BootRom是CPU片上的嵌入处理器芯片内的一小块掩模ROM(Read-Only Memory,只读存储器)或者写保护闪存。
通过本实施例,在初始启动阶段,通过引导加载程序引导操作系统对应的处理器核心上启动,可以提高操作系统启动的成功率,同时为实时运行阶段做准备。
在一个示例性实施例中,通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,包括:
S21,在第一处理器核心上执行第一操作系统的第一控制任务,其中,第一控制任务用于对硬件控制器进行控制;
S22,通过第一处理器核心读取与目标设备对应的指定传感器的传感器数据;
S23,通过第一控制任务根据指定传感器的传感器数据经由第一总线向硬件控制器发送设备控制指令,以由硬件控制器按照设备控制指令对目标设备的运行状态进行控制。
在本实施例中,操作系统对目标设备的硬件控制器进行控制可以是由在该操作系统所运行的处理器核心上的控制任务(业务)对硬件控制器进行控制执行的,这里的控制任务可以指对应的控制任务。对于目标设备的硬件控制器,可以在第一处理器核心上执行第一操作系统的第一控制任务(第一控制进程),由第一控制任务对硬件控制器进行控制。
对硬件控制器进行控制可以是基于传感器的传感器数据进行的,对于不同的目标设备,影响其运行的参数可以是不同的,对应地,所需获取的传感器数据也可以存在区别。对于目标设备,其可以是在芯片上电以后即运行的设备,与其对应的传感器为指定传感器。指定传感器的类型可以有多种,可以包括但不限于以下至少之一:温度传感器,湿度传感器,噪音传感器等。由于第一控制任务运行在第一处理器核心上,因此,可以通过第一处理器核心读取指定传感器的传感器数据。指定传感器的传感器数据可以存储在指定传感器内的存储空间中,与可以由指定传感器传输到指定的存储空间内,本实施例中对于指定传感器的传感器数据的读取位置不做限定。
读取的指定传感器的传感器数据可以是在一个时间周期内的传感器数据,也可以是自目标设备启动之后的全部传感器数据,还可以是满足其他时间限制条件的传感器数据。在获取到指定传感器的传感器数据之后,第一控制任务可以根据指定传感器的传感器数据对目标设备的运行状态进行控制。对目标设备的运行状态进行控制可以是通过以下方式实现的:通过第一控制任务向目标设备的硬件控制器发送设备控制指令,以由硬件控制器按照设备控制指令对目标设备的运行状态进行控制。
可选地,第一控制任务可以基于指定传感器的传感器数据确定出目标设备预期的运行状态;在目标设备当前的运行状态与预期的运行状态不同的情况下,可以生成上述设备控制指令,设备控制指令可以控制将目标设备的运行状态调整为预期的运行状态。上述设备控制指令可以是经由第一总线发送给目标设备的硬件控制器的。第一总线与前述实施例中类似,在此不做赘述。
通过本实施例,通过读取指定传感器的传感器数据,并根据传感器数据对目标设备进行控制,控制其运行状态,提高了资源的利用率。
在一个示例性实施例中,通过第一控制任务根据指定传感器的传感器数据经由第一总线向硬件控制器发送设备控制指令,包括:
S31,通过第一控制任务根据指定传感器的传感器数据确定目标设备的设备运行参数的目标参数值,其中,设备运行参数为控制目标设备的运行状态的参数;
S32,通过第一控制任务将携带有目标参数值的设备控制指令经由第一总线发送给硬件控制器。
在本实施例中,第一控制任务可以根据指定传感器的传感器数据,确定出目标设备预期的运行状态。预期的运行状态可以是通过设备运行参数的参数值进行表示的,设备运行参数可以是控制目标设备的运行状态的参数,对于不同类型的设备,其对应的设备运行参数可以是不同的。例如,对于风扇,其对应的设备运行参数可以是转速,对于其他类型的设备,设备运行参数可以是其他的运行参数。预期的运行状态可以对应于目标设备的设备运行参数的目标参数值。
在确定出目标设备的设备运行参数的目标参数值之后,可以将目标参数值携带在上述的设备控制指令中,即,通过第一控制任务将携带有目标参数值的设备控制指令发送给硬件控制器,向硬件控制器发送设备控制指令的方式可以与前述实施例中类似,在此不做赘述。
通过本实施例,根据传感器数据确定目标设备的设备运行参数的参数值,并将确定的参数值携带在设备控制指令中,可以提高设备控制的精准度。
在一个示例性实施例中,通过第一控制任务根据指定传感器的传感器数据确定目标设备的设备运行参数的目标参数值,包括:
S41,在目标设备为风扇的情况下,通过第一控制任务根据指定传感器的传感器数据确定风扇的风扇运行参数的目标参数值。
在本实施例中,目标设备可以是风扇,其可以是用于对所在的服务器或者其他设备进行散热的风扇,即,散热风扇。在此情况下,设备运行参数可以是风扇运行参数,风扇运行参数可以包括一种或多种,可以包括但不限于以下至少之一:转速,转动周期,周期切换时间,还可以是其他的运行参数。本实施例中对此不做限定。
对应地,通过第一控制任务根据指定传感器的传感器数据确定目标设备的设备运行参数的目标参数值可以是:通过第一控制任务根据指定传感器的传感器数据确定风扇的风扇运行参数的目标参数值。在得到目标参数值之后,第一控制任务将携带有目标参数值的设备控制指令经由第一总线发送给风扇的硬件控制器,从而对风扇的运行状态进行控制。
通过本实施例,通过对风扇的运行状态进行控制,可以在如系统上电、系统重启或者其他场景下,快速对风扇的运行状态进行控制,提高风扇控制的及时性。
在一个示例性实施例中,在目标设备为风扇的情况下,通过第一控制任务根据指定传感器的传感器数据确定风扇的风扇运行参数的目标参数值,包括:
S51,在目标设备为风扇、且指定传感器为温度传感器的情况下,通过第一控制任务根据温度传感器的传感器数据确定风扇的转速的目标转速值,其中,风扇的转速与温度传感器所检测到的温度正相关。
对于目标设备为风扇的场景,指定传感器可以是温度传感器,该温度传感器的数量可以为一个或多个,温度传感器的设置位置可以根据需要进行配置,不同的温度传感器可以设置在不同的位置上。可选地,温度传感器的传感器数据用于表示温度传感器所检测到的温度,对此,第一控制任务可以根据温度传感器的传感器数据确定风扇的转速的目标转速值,这里,风扇的转速与温度传感器所检测到的温度正相关。
在温度传感器的数量为多个的情况下,可以根据每个温度传感器的传感器数据,确定多个温度传感器所检测到的最高温度,风扇的转速可以是根据多个温度传感器所检测到的最高温度确定的,相对于根据多个温度传感器所检测到的平均温度确定风扇的转速,可以保证设备运行的安全性。对于风扇的数量为多个的场景,也可以基于与每个风扇匹配的温度传感器所检测到的最高温度或者平均温度,确定每个风扇的转速。
例如,可以利用第一操作系统(例如,RTOS系统)代替CPLD、EC芯片、定制芯片等处理单元来控制风扇转速(可以是实时进行BMC风扇控制)。在系统刚上电时,可以唤醒第一处理器核心(例如,CPU0,第一处理器核心可以是被硬件唤醒的),第一处理器核心运行引导加载程序(例如,BootRom中的指定程序),加载第一操作系统启动,第一处理器核心将读取各种和温度相关的传感器(sensor)数据,进行风扇控制(例如,风扇转速控制),完全模拟上述处理单元完成风扇调控的功能。在进行风扇转速控制时,第一操作系统可以根据温度传感器计算PWM值,继而风扇的转速进行调整。通过上述方式,可以在第二操作系统启动的过程中,由第一操作系统对风扇的转速进行控制。
示例性地,风扇控制器的硬件如图3所示,多核处理器包括CPU0至CPUN,多核处理器正常运行系统的业务程序,由于Linux系统跑的系统业务程序比较多,所以初始分配的CPU核心数比较多:初始分配给RTOS系统的核心为CPU0,初始分配给Linux系统的核心为CPU1~CPUN。在系统刚上电时,唤醒CPU0,CPU0运行BootRom中的指定程序,加载RTOS系统启动。CPU0通过IIC(Inter-Integrated Circuit,集成电路总线)将读取各种和温度相关的传感器(sensor)数据,通过有刷控制器(或者,无刷控制器)进行有刷风扇(或者,无刷风扇)的转速控制。其中,第一总线、第二总线和IIC的关系可以是:第一总线可以是第二总线下属的总线,IIC可以是第一总线下属的总线,一个总线下属的总线可以是指:连接到该总线上的总线。
通过本实施例,利用处理器核心上运行的操作系统代替额外增加的处理单元进行风扇转速控制,可以在保证对风扇的控制力的同时,减少系统运行成本。
在一个示例性实施例中,引导在处理器的第二处理器核心上启动第二操作系统,包括:
S61,通过第一处理器核心执行二级程序加载器,以由二级程序加载器唤醒第二处理器核心;
S62,通过第二处理器核心运行第二操作系统的通用引导加载器,以引导第二操作系统在第一处理器核心上启动。
在本实施例中,在进行操作系统启动时,可以将二级程序加载器(Second ProgramLoader,简称为SPL)加载到内部内存中,例如,SOC内部的静态随机存取存储器(StaticRandom-Access Memory,SRAM),而SPL可以负责将通用引导加载程序(Universal BootLoader,简称为U-Boot)加载到随机存取存储器(Random-Access Memory,简称为RAM)中,二级程序加载器可以引导加载第二操作系统,还可以引导加载第一操作系统。
对于第二操作系统,可以通过第一处理器核心执行二级程序加载器,以由二级程序加载器唤醒第二处理器核心;通过第二处理器核心,可以运行第二操作系统的通用引导加载器(通用引导加载程序),从而引导第二操作系统在第一处理器核心上启动。这里,通过二级程序加载器引导加载第二操作系统的引导程序,第二操作系统的引导程序可以包括通用引导加载器。
需要说明的是,二级程序加载器为通用引导加载程序第一阶段执行的代码,可负责搬运通用引导加载程序第二阶段的代码到系统内存(System RAM,也叫片外内存)中运行。通用引导加载程序是一个遵循GPL(General Public License,通用公共许可协议)协议的开源软件,可以看作是一个裸机综合例程。
例如,系统上电后,处理器首先会唤醒CPU0核,以便可以让RTOS系统尽可能快地运行起来;然后利用BootRom中的程序引导RTOS系统启动;RTOS系统启动的过程中,会继续通过SPL加载U-Boot,由U-Boot引导在CPU1上启动第二操作系统直到Linux系统正常启动。
需要说明的是,Boot Rom是芯片(例如,SOC芯片)内部ROM固化程序,其是uboot的引导代码。Boot Rom读硬件的启动信息(例如,拨码开关设置),从指定启动介质(例如,SD、MMC等)中读取uboot-spl代码(即,SPL),SPL主要负责初始化外部RAM和环境,加载真正的uboot镜像到外部RAM中来执行,外部RAM可以是DDR(Double Data Rate SynchronousDynamic Random-Access Memory,双倍速率的同步动态随机存取内存),也可以是其他的RAM。
通过本实施例,通过二级程序加载器唤醒第二处理器核心,再由第二处理器核心运行通用引导加载程序,从而引导在对应的处理器核心上第二操作系统,可以提高操作系统启动的便捷性和成功率。
作为一种可选示例,下面以RTOS系统和Linux系统为例对多核双系统的启动过程进行解释说明。
为了尽快接管风扇管理,可以尽可能使RTOS系统启动,在Linux系统启动完成之后,由在Linux系统接管风扇的控制权。结合如图4,多核双系统的启动过程可以包括以下步骤:
步骤1,在系统刚上电时,唤醒CPU0;
步骤2,CPU0运行BootRom中的指定程序,加载RTOS系统启动;
步骤3,在RTOS系统启动的过程中,唤醒CPU1去引导u-boot,并启动第一操作系统中的风扇控制程序(FanCtrl_RTOS_APP);
步骤4,CPU1引导u-boot可以包括SPL阶段和Uboot阶段,通过调用SPL进入到SPL阶段;
步骤5,在SPL阶段,SPL引导Uboot启动;
步骤6,在Uboot阶段,加载Linux核心(CPU1~CPUN),并启动BMC业务程序以及第二操作系统中的风扇控制程序(FanCtrl_Linux_APP)。
通过本可选示例,在双系统启动及运行的过程中,通过首先启动RTOS系统对风扇进行控制,并在Linux系统启动之后,由第二操作系统接管风扇的控制权,可以保证在系统上电时快速对风扇进行控制,提高风扇控制的效率。
在一个示例性实施例中,通过第二操作系统经由第一总线接管硬件控制器,包括:
S71,通过第二操作系统经由第二总线向第一操作系统发送第一核间中断,其中,第一核间中断用于请求由第二操作系统接管硬件控制器;
S72,在接收到第一操作系统响应于第一核间中断返回的、用于指示同意由第二操作系统接管硬件控制器的第二核间中断的情况下,通过第二操作系统的第二控制任务经由第一总线对硬件控制器进行控制,其中,第二控制任务用于对硬件控制器进行控制。
在本实施例中,可以通过核间中断完成在不同操作系统间转移目标设备的控制权,例如,SGI(Software Generated Interrupt,软件触发中断,其为Linux系统的核间中断),一个操作系统可以通过IPI(Inter-Processor Interrupt,处理器间中断)向另一个操作系统发出核间中断,以请求接管目标设备的硬件控制器,从而获取到目标设备的控制权。这里,这里,有别于常见的外设中断,IPI是在SOC内多个核之间触发的中断,核心中专门预留了部分中断号给IPI,例如,在ARM64架构中,预留的中断号为0-15这16个中断号。
对于第二操作系统,在第二操作系统需要接管目标设备的硬件控制器时,可以向第一操作系统发送第一核间中断,以请求由第二操作系统接管该硬件控制器,第一核间中断可以是经由第二总线发送的。第一操作系统在接收到第一核间中断之后,可以判断当前是否允许第二操作系统接管该硬件控制器,如果允许,则可以向第二操作系统返回第二核间中断,该第二核间中断用于指示同意由第二操作系统接管硬件控制器。
在接收到第二核间中断之后,第二操作系统可以通过第二控制任务对硬件控制器进行控制,第二控制任务用于对硬件控制器进行控制,第二控制任务对硬件控制器进行控制可以是经由第一总线完成的。第二控制任务可以是在发送第一核间中断之前创建的,也可以是在接收到第二核间中断之后创建的,本实施例中对此不做限定。
例如,在Linux系统启动完成之后,CPU1开始向CPU0发送IPI中断,以请求获取风扇的控制权。
通过本实施例,通过核间中断完成在不同操作系统间转移目标设备的控制权,可以提高设备控制的可靠性。
在一个示例性实施例中,在通过第二操作系统经由第二总线向第一操作系统发送第一核间中断之后,上述方法还包括:
S81,响应于获取到的第一核间中断,控制第一操作系统的第三控制任务进行休眠,其中,第三控制任务用于对硬件控制器进行控制;
S82,在第三控制任务已休眠的情况下,通过第一操作系统经由第二总线向第二操作系统发送第二核间中断。
在本实施例中,对于第一操作系统,其上对目标设备的硬件控制器进行控制的任务为第三控制任务可以是前述第一控制任务,其对硬件控制器进行控制的逻辑与前述实施例中是类似的。在获取到第一核间中断之后,第一操作系统可以控制第三控制任务进行休眠,以避免两个操作系统中均有控制任务对硬件控制器进行控制导致出现设备控制混乱的情况。
在第三控制任务已休眠(即,第三控制任务处于休眠状态)之后,第一操作系统可以向第二操作系统发送上述的第二核间中断,该第二核间中断可以是经由第二总线发送的。
例如,RTOS系统收到CPU1发送的IPI中断,然后开始对RTOS系统上相关的业务进行陆续休眠,当RTOS系统上相关的业务完全休眠之后,CPU0发送IPI中断到CPU1,通知CPU1可以获取风扇的控制权。
通过本实施例,基于接收到的核间中断,可以将对应的控制任务休眠,并在对应的控制任务休眠之后再通过核间中断进行设备控制权的转移,可以提高设备控制的可靠性。
在一个示例性实施例中,上述方法还包括:
S91,在第三控制任务已休眠的情况下,将第一操作系统的系统运行数据压入堆栈,其中,第二核间中断还用于指示第二操作系统接管第一处理器核心。
在本实施例中,可以在第二操作系统无法对目标设备的运行状态进行控制时,暂时由第一操作系统对目标设备的运行状态进行控制。在此情况下,第一操作系统中运行的任务均是与对目标设备的运行状态进行控制相关的任务,例如,第三控制任务。如果第二操作系统已经能够对目标设备的运行状态进行控制,那么,如果第三控制任务已休眠,可以第一操作系统中没有任何业务进程在运行,第一处理器核心没有得到有效利用。
例如,Linux系统启动的过程中,风扇控制权在RTOS系统中,等到Linux正常启动之后,就会将风扇控制权从RTOS系统接管过来,此时,RTOS系统上没有任何业务进程在运行,CPU0核资源没有有效的利用起来。
在本实施例中,可以采用一种第一操作系统的处理器核心(例如,CPU0核)的资源回收机制,在第三控制任务已休眠的情况下,可以保存第一操作系统的现场,即,将第一操作系统的系统运行数据压入堆栈。同时,可以通过第二核间中断指示第二操作系统接管第一处理器核心。
例如,可以采用CPU0核的资源回收机制,在Linux系统完全启动(在CPU1…CPUN上启动)之后,RTOS系统将风扇控制权转交给Linux系统进行控制,释放CPU0核,供Linux系统调度:CPU0让RTOS系统进入睡眠,释放掉当前的所有业务,将运行的数据压入堆栈,将自身加入到Linux操作系统运行的队列中,供Linux系统调度资源,从而达到提高CPU核资源利用率的目的。对于Linux系统,在Linux系统接管风扇控制权之后,可以让RTOS系统进入睡眠,释放CPU0核,将CPU0核回收回来,使Linux系统可以正常调度CPU0核,达到CPU所有核心都为Linux系统服务,节省了资源,提高了CPU核的资源利用率。
通过本实施例,采用一种处理器核心的资源回收机制,在第二操作系统接管了目标设备的控制权之后,将第一操作系统的处理器核心上运行的第一操作系统的数据压入堆栈,并将第一操作系统的处理器核心释放给第二操作系统,可以提高处理器核心的资源利用率。
作为一种可选示例,下面以RTOS系统和Linux系统为例对通过核间中断交互风扇控制权的过程进行解释说明。
如图5所示,在Linux系统触发了请求接管风扇控制的中断后,FanCtrl_RTOS_APP进程将正在处理的事情做完,并且RTOS系统将系统运行数据压入堆栈后,返回同意接管风扇控制的中断,Linux系统接管CPU0核,并将FanCtrl_Linux_APP进程按照调度均衡算法分配给CPU0核或者其他Linux系统的CPU核心运行。
通过本可选示例,通过核间中断交互风扇控制权,可以提高信息交互的便捷性,同时,提高设备控制的可靠性。
在一个示例性实施例中,在通过第二操作系统经由第一总线接管硬件控制器之后,上述方法还包括:
S101,在第二操作系统待重启的情况下,通过第二操作系统经由第二总线唤醒第一操作系统,并由第一操作系统经由第一总线接管硬件控制器,以接管目标设备的控制权;
S102,控制第二操作系统进行系统重启。
在本实施例中,在由于系统崩溃、接收到reboot(重加载)命令等原因需要重启时,第二操作系统可以首先唤醒第一操作系统,由第一操作系统接管硬件控制器,以接管目标设备的控制权。唤醒第一操作系统可以是经由第二总线执行的,第一操作系统接管硬件控制器可以是经由第一总线执行的。
通过本实施例,在第二操作系统发生重启时,通过唤醒第一操作系统接管目标设备的控制权,可以提高设备控制的可靠性。
在一个示例性实施例中,在第二操作系统待重启的情况下,通过第二操作系统经由第二总线唤醒第一操作系统,包括:
S111,在第二操作系统待重启的情况下,通过第二操作系统经由第二总线向第一操作系统发起系统唤醒中断,其中,系统唤醒中断用于唤醒第一操作系统。
在本实施例中,唤醒第一操作系统可以是通过核间中断实现的。如果第二操作系统待重启(例如,系统崩溃、接收到reboot命令),第二操作系统可以向第一操作系统发起系统唤醒中断,以唤醒第一操作系统。该系统唤醒中断可以是主动唤醒中断。在第一操作系统接管硬件控制器之后,可以控制第二操作系统进行系统重启,而在第二操作系统重启之后,可以重新接管硬件控制器,接管硬件控制器的过程与前述实施例中类似,在此不做赘述。
例如,如图6所示,在风扇控制工作流程中,Linux系统在发生重启(崩溃、reboot命令)时,会发起主动唤醒中断,Linux系统发生重启后风扇控制的流程可以包括以下步骤:
步骤S602,Linux系统由于系统崩溃、接收到reboot命令等原因发生重启;
步骤S604,Linux系统触发主动唤醒中断;
步骤S606,唤醒RTOS系统,RTOS系统接管风扇控制权。
步骤S608,执行Linux系统重启过程。
通过本实施例,通过核间中断进行操作系统的主动唤醒,可以提高操作系统唤醒的便捷性和可靠性。
下面结合可选示例对本申请实施例中的嵌入式系统的启动控制方法进行解释说明。在本可选示例中,第一操作系统为RTOS系统,第二操作系统为Linux系统,目标设备为风扇。
本可选示例提供了一种多核双系统的实时风扇控制的方案,如图7所示,本可选示例中的嵌入式系统的启动控制方法的流程可以包括以下步骤:
步骤1,在T0-T1阶段,系统开始上电,CPU0被硬件唤醒,开始执行RTOS系统部分的代码,同时唤醒CPU1,让CPU1参与u-boot的启动过程;
步骤2,T1时刻开始,被唤醒的CPU1开始执行u-boot部分的代码,开始初始化部分硬件相关的数据,引导Linux操作系统启动;同时,CPU0上的RTOS系统上的风扇控制相关的任务一直持续运行到T5时刻;
步骤3,T2时刻开始,Linux操作系统开始启动;
步骤4,T3点为Linux系统启动完成,CPU1开始向CPU0发送IPI中断,请求获取风扇的控制权,以及让CPU0停止RTOS系统相关的业务,进而运行Linux系统相关的业务代码;
步骤5,T4时刻开始,RTOS系统收到CPU1发送的IPI中断,然后开始对RTOS系统上相关的业务进行陆续休眠,当RTOS系统上相关的业务完全休眠后,CPU0发送IPI中断到CPU1,通知CPU1可以获取风扇的控制权以及CPU0可以参与到Linux系统侧的业务运行。
其中,T5时刻开始,CPU0被回收到Linux系统侧,整个系统将会变成多核单系统的运行模式,正常运行后续的所有代码。
通过本可选示例,通过复用一个CPU核心达到代替硬件控制风扇的目的,提高了CPU核的资源利用率,同时,不需要增加额外的成本,此外还具有很好的可扩展性。
在一个示例性实施例中,可以但不限于采用以下方式为各个操作系统分配操作业务和处理资源:
根据资源动态分配规则将一组待分配业务分配给嵌入式系统中对应的操作系统,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率,业务耦合度,业务重要性,嵌入式系统包括第一操作系统和第二操作系统;
确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;
根据与每个待分配业务对应的操作系统以及资源分配结果,将处理器的处理资源分配给第一操作系统和第二操作系统。
在处理器运行的过程中,可以获取一组待分配业务,即,待分配给第一操作系统和第二操作系统的业务。由于不同的待分配业务对于响应速度、业务资源占用率、与其他业务的业务耦合度、业务重要性等维度上可能会存在区别,因此,可以预先配置资源动态分配规则,资源动态分配规则可以包括用于进行业务分配的规则,将业务分配给对应的操作系统,以便由对应的操作系统的处理资源执行分配给自己的业务。可选地,资源动态分配规则可以包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率,业务耦合度,业务重要性,不同的分配规则可以具有对应的优先级,例如,优先级按照由高到低的顺序依次为:业务重要性,业务耦合度,业务响应速度,业务资源占用率。根据源动态分配规则,可以将一组待分配业务(或者待分配任务,不同的待分配业务可以对应于不同的进程)分配给嵌入式系统中对应的操作系统,得到业务分配结果。
可选地,基于对响应时间的约束,第一操作系统可以是具有明确固定的时间约束的操作系统,所有处理过程(任务调度)需要在固定的时间约束内完成,否则系统会出错,其可以是实时操作系统,例如,FreeRTOS、RTLinux等,还可以是其他嵌入式系统中的实时操作系统。第二操作系统不具备该特征,第二操作系统一般采用公平任务调度算法,线程/进程数量增加时,就需要分享CPU时间,任务调试具有不确定性,可称为非实时操作系统,例如,contiki、HeliOS、Linux等,还可以是其他嵌入式系统中的非实时操作系统。
对应地,分配给第一操作系统的业务通常为实时性业务,实时性业务是指需要在规定的时间内得到调度的业务,该业务需要处理器以足够快的速度予以处理,其处理的结果又能在规定的时间内来控制生产过程或者对处理系统做出快速响应。作为一个典型的场景,工业控制中对机器手的控制属于实时性业务,系统需要在检测到机器手误操作之前及时采取措施,否则可能会造成严重后果。分配给第二操作系统的业务通常为非实时性业务,非实时性业务是指对调度时间不敏感的业务,对调度的延迟具有一定的容忍度,例如,服务器中读取温度传感器(sensor)的传感器数据。
需要说明的是,实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时业务,并控制所有实时业务协调一致运行的操作系统具有及时响应和高可靠性的特点。
可选地,将一组待分配业务分配给对应的操作系统可以是由业务管理模块执行的,如图8所示,该业务管理模块可以是运行在第一操作系统或者第二操作系统上的软件模组,以运行在第二操作系统上为例,业务管理模块可以由Linux系统中的软件实现。该业务管理模块可以根据资源动态分配规则,将一组待分配业务分配给所述嵌入式系统中对应的操作系统。
在将每个待分配业务分配至对应的操作系统之后,根据业务分配结果,可以为每个待分配业务分配对应的处理资源,得到与一组待分配业务对应的资源分配结果。在为待分配业务分配处理资源时,可以为分配给第一操作系统的业务分配第一操作系统的处理资源,分配给第二操作系统的业务分配第二操作系统的处理资源,同时,考虑到负载均衡,在存在未分配处理资源时,可以为部分业务分配未分配处理资源。
处理器的处理资源可以以时间片为单位进行处理资源的动态分配,考虑到频繁的切换处理资源所属的操作系统以及业务处理时间并不一定是时间片的整数倍,从而导致部分业务的响应时间被延长,可以以处理器核心为单位被分配给第一操作系统和第二操作系统,即,处理器的处理器核心是以整个处理器核心为单位被分配给对应的操作系统,每个操作系统所分配的处理器核心的数量为整数个,且不同的操作系统分配的处理器核心互不相同。
可选地,确定与一组待分配业务对应的资源分配结果可以是由资源动态分配模块执行的,如图8所示,该资源动态分配模块可以是运行在第一操作系统或者第二操作系统上的软件模组,以运行在第二操作系统上为例,资源动态分配模块可以由第二操作系统中的软件模组实现,其可以根据业务管理模块的输出,进行针对业务的处理资源的动态分配,这里,软件模组可以是具有预设功能的程序模块,例如,对于资源动态分配模块,其可以是具有资源动态分配功能的程序模块,对于业务管理模块,其可以是具有业务管理功能的程序模块,每种软件模组可以作为一个整体进行布设及调整,同时可以在不同的应用工程中应用。
根据与每个待分配业务对应的操作系统以及资源分配结果,可以将处理器的处理资源分配给第一操作系统和第二操作系统。可选地,可以将处理器的未分配处理资源分配给与其对应的操作系统,未分配处理资源可以是基于未分配处理资源与待分配业务的对应关系以及待分配业务与操作系统的对应关系确定的。
可选地,如图8所示,将处理器的处理资源分配给第一操作系统和第二操作系统可以是由资源自适应调度模块(例如,核心自适应调度模块)执行的,该资源自适应调度模块可以是运行在第一操作系统或者第二操作系统上的软件模组,以运行在第二操作系统上为例,资源自适应调度模块可以由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串口等,只要能从外界获取数据的通路即可。读取文件用到的硬件和具体的文件位置有不同的实现方案,例如,通过网络接口可从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系统。整个调度过程可以由第二操作系统主导。
通过本实施例,基于资源分配结果将未分配的处理器资源调度给对应的操作系统,可以提高处理器资源的利用率。
在一个示例性实施例中,在一个可选的实施方式中,提供了一种核间通信的方法。上述方法包括如下步骤:
步骤1,第一操作系统将目标数据(可以是业务数据)发送至处理器内存中的目标虚拟通道(可以是存储空间)。
可选地,目标数据为待发送的数据,目标虚拟通道是内存中的一段空闲存储空间,第一操作系统将目标数据发送至处理器内存中的目标虚拟通道是指第一操作系统的CPU核将待发送数据写入目标虚拟通道。
步骤2,第一操作系统向第二操作系统发送中断通知消息(可以是前述的核间中断请求)。可选地,第一操作系统的CPU核向第二操作系统的CPU核发送中断通知消息,中断通知消息中可以携带目标虚拟通道的地址,用于通知第二操作系统从目标虚拟通道中获取目标数据,中断通知消息可以是软件触发的,也可以是硬件触发的。
步骤3,第二操作系统响应中断通知消息,从内存中的目标虚拟通道获取目标数据。可选地,第二操作系统的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,就会去执行“helloword”对应的处理函数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中运行的软件执行中断指令引入的中断,是预先设定的,本实施例不限定产生中断通知消息的方式。
在一个可选的实施方式中,提供了一种共享内存的方法。该方法包括如下步骤:
步骤1,接收内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存。
可选地,内存申请指令是运行在处理器上的操作系统发出的申请使用处理器的内存的指令,其可以是第一操作系统发送的。需要说明的是,为防止多个操作系统同时申请使用处理器的内存时导致申请冲突,因此,在操作系统发送内存申请指令时,先对处理器的内存执行加锁操作,当加锁成功后才可以申请使用内存,加锁操作是指内存申请的排他操作,在当前操作系统加锁成功之后,若没有释放加锁,其他服务器没有申请使用处理器内存的权限。
在本申请实施例提供的共享内存的方法中,在对处理器的内存执行加锁操作之前,该方法还包括:判断内存当前是否处于被加锁状态,其中,被加锁状态表征内存处于被申请使用的状态;在内存当前未处于被加锁状态的情况下,对内存执行加锁操作。
可选地,由于多个系统或多个任务在同时申请使用内存时会导致申请冲突,处理器的内存在同一时间段内只能被一个系统或任务进行加锁,因此,在检测到当前内存未处于被加锁状态的情况下,当前操作系统才能对内存执行加锁操作。
可选地,通过判断内存中存储的预设变量是否为预设值来判断内存是否处于被加锁状态,若预设变量不为预设参值数,则表明内存未处于被加锁状态,没有其他系统或任务在申请内存空间,则加锁成功;反之,预设变量为预设参数,则表明在当前时刻内存处于被加锁状态,存在除该操作系统之外的其他系统或任务在申请内存空间,则加锁失败。
在该共享内存的方法中,在判断内存当前是否处于被加锁状态之后,还包括:在内存当前处于被加锁状态的情况下,确定对内存的加锁失败;在对内存的加锁失败的情况下,在预设时长后再次申请对处理器的内存进行加锁,直至对内存加锁成功,或者,直至申请加锁的次数大于预设次数。
可选地,若对内存进行加锁操作时存在加锁失败的情况下,通过预设时长的等待后再次申请内存的加锁,直至加锁成功,例如,预设时长可以为100微秒。
在一个示例性实施例中,若申请加锁失败,并且重复申请的次数超出了预设次数,表明当前时长中处理器中的内存处于不可分配状态,则停止申请操作。例如,预设次数可以为3次,在申请请加锁的次数大于3次的情况下,可以向发送申请的操作系统返回当前内存不可用的消息。
步骤2,在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小。
在申请加锁成功后,操作系统对处理器中的内存进行申请,可选地,根据操作系统发出的内存申请指令,扫描用于记录内存被占用状态的信息,判断是否存在目标内存空间,也即,判断处理器中是否存在处于未被占用状态的、连续的可以满足内存使用需求的内存空间,满足内存使用需求是指内存空间的大小大于等于操作系统申请的内存大小。在一个示例性实施例中,判断处于未被占用状态的、连续的内存空间的大小是否大于等于操作系统申请的内存大小,得到判断结果。
需要说明的是,申请内存时还可以使用不连续的内存空间,可以在非一个最小内存块后的后面增加一个指针,指向下一个申请获得的最小内存块,同时,在数据读写的时候,根据存储地址和指针实现数据跨数据块的数据读写。本实施例不限定目标内存空间的形式。
步骤3,在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁。这里,发送端是指发送内存申请指令的操作系统(例如,第一操作系统),需要说明的是,由于操作系统在核间通信时,通过使用共享内存发送和接收数据,并在收发数据的过程中使用申请的内存返回的地址进行数据的存取,因此需要确定已申请的内存空间的地址信息。
可选地,在处理器的内存空间中存在可供操作系统使用的目标内存空间(可以是由前述判断结果指示的)后,将该目标连续空间的地址信息发送给该操作系统,操作系统根据地址信息将需要传输的数据存储到相应的内存空间中。
在一个示例性实施例中,根据操作系统的数据写入情况更新处理器的内存空间的占用状态,即,将目标内存空间由未占用状态变为被占用状态,并释放在动态申请内存之前的加锁操作,以使其他操作系统可以申请使用处理器的内存空间。
通过上述步骤,可以解决多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作系统的问题,达到提高共享内存灵活性以及使用效率,并降低对操作系统的依赖的效果。
在该共享内存的方法中,内存中包括元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储有状态映射表,状态映射表用于记录数据存储区的被占用状态,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间包括:从元数据存储区中读取状态映射表中的记录,并根据状态映射表中的记录判断数据存储区中是否存在目标内存空间。
通过查询状态映射表中的记录的方式查询内存的被占用状态,可选地,获取处理器中存储的元数据存储区,并识别元数据存储区中的状态映射表,通过遍历状态映射表中的记录,读取数据存储区的被占用状态,判断数据存储区中是否存在连续的、处于空闲状态的、满足内存使用需求的内存空间。
在本申请实施例提供的共享内存的方法中,数据存储区由多个内存页构成,状态映射表中包含多条记录,每条记录用于记录一个内存页的被占用状态,从元数据存储区中读取状态映射表中的记录,并根据状态映射表中的记录判断数据存储区中是否存在目标内存空间包括:确定内存申请指令申请的内存页的预设数量;从状态映射表的初始位置依次扫描每条记录;在扫描到连续的预设数量的目标记录的情况下,确定内存中存在目标内存空间,其中,目标记录指示内存页处于空闲状态。
需要说明的是,数据存储区按照相同的内存大小划分为多个分配单元,将每一个分配单元记作一个内存页,例如,数据存储区的内存空间为A字节,划分的分配单元为B字节,则该数据存储区共包含A/B个内存页,状态映射表中的记录也即内存页记录,每条内存页记录用于记录一个内存页的被占用状态,状态映射表中的内存页记录和数据存储区中的内存页的数量相同。
图9是根据本申请实施例的共享内存的方法中状态映射表和内存页的关系示意图,如图9所示,数据存储区即为动态分配内存块区,元数据存储区包括动态分配内存映射表区,其中,映射表区按照数据存储区划分内存页的数量划分相同数量的记录,并将该记录记作内存页记录,并将所有内存页记录组合为状态映射表,状态映射表中所有内存页记录与数据存储区的所有内存页存在一一对应关系,每一内存页记录中表示对应的内存页的分配状态,也即内存页是否被占用。
可选地,由于操作系统进行协同的业务数据需要占用处理器中连续的内存页,因此,首先需要确定内存申请指令中的内存页的预设数量,由于每一内存页的内存空间相同,因此可以通过所需内存的空间大小计算出需要的连续内存页的预设数量,记作numb。
在一个示例性实施例中,在获取到处理器的元数据存储区中的状态映射表后,从状态映射表中的索引位置遍历内存页记录,索引位置可以为状态映射表的起始位置,从状态映射表的起始位置开始,依次查询状态映射表的每条内存页记录,确定是否存在连续的记录空闲内存页的大于等于numb的内存页记录,在存在符合上述条件的内存页记录的情况下,通过内存页记录与内存页的对应关系,确定处理器中存在目标内存空间。
在本申请实施例提供的共享内存的方法中,在从状态映射表的初始位置依次扫描每条记录之后,该方法还包括:在扫描完毕状态映射表中的所有记录,且不存在连续的预设数量的目标记录的情况下,确定内存中不存在目标内存空间。
可选地,从状态映射表的起始位置开始,查询状态映射表的内存页记录确定是否存在连续、并且内存页数量大于等于numb的空间,若扫描完毕整个状态映射表后仍未发现存在连续的、预设数量的空闲内存页,则表明不存在目标内存空间。
在本申请实施例提供的共享内存的方法中,通过计数器对扫描到的目标记录的数量进行记录,在从状态映射表的初始位置依次扫描每条记录的过程中,在当前扫描到目标记录的情况下,控制计数器加一,在当前扫描到非目标记录的情况下,控制计数器清零,其中,非目标记录指示内存页处于被占用状态。
可选地,通过利用计数器的数值与所需内存页数量的大小关系判断是否存在连续的预设数量的目标记录,也即是否存在目标内存空间,可选地,将计数器的计数记作cntr,若扫描到的一页内存页为空,则将cntr进行加1操作,若扫描到的内存页不为空,则将累加的连续、空闲状态的内存页的数量cntr清零,继续从该内存页后一个地址处开始寻找连续的空的内存页;直到cntr等于numb,表示已找到了满足内存需求的连续、处于空闲状态的内存页;如果在扫描完整个状态映射表的过程,cntr小于numb,则表明本次动态申请内存失败,不存在目标内存空间。
在本申请实施例提供的共享内存的方法中,在初始位置为状态映射表中的最后一个位置的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端包括:确定连续的预设数量的目标记录中最后扫描到的目标记录,将最后扫描到的目标记录指示的内存页的首地址反馈至发送端。
可选地,当对状态映射表进行扫描时,扫描方式可以选择从状态映射表的第一个位置扫描或者从状态映射表的最后一个位置开始扫描,当扫描方式为从状态映射表的最后一个位置扫描时,在计数器显示的数值cntr大于等于预设数量numb时,将扫描到的最后一个内存页记录对应的内存页的首地址,并再内存页记录中将这些内存页的状态置为非空,将首地址作为本次内存申请指令的整个连续内存页的首地址。
在一个示例性实施例中,将该地址反馈至发出内存申请指令的操作系统,由操作系统根据地址信息对内存进行数据写入操作。
在本申请实施例提供的共享内存的方法中,初始位置为状态映射表中的第一个位置,将目标内存空间的地址信息反馈给内存申请指令的发送端包括:确定连续的预设数量的目标记录中首个扫描到的目标记录,将首个扫描到的目标记录指示的内存页的首地址反馈至发送端。
可选地,当扫描方式为从状态映射表的第一个位置扫描时,在计数器显示的数值cntr大于等于预设数量numb的情况下,将扫描到的第一个内存页记录的地址作为首地址,将其发送到发出内存申请指令的操作系统中,由操作系统根据地址信息对内存进行数据写入操作。
在本申请实施例提供的共享内存的方法中,在从状态映射表的初始位置依次扫描每条记录的过程中,通过预设变量存储扫描到的连续的目标记录中的首个目标记录。
可选地,预设变量是指状态映射表中用于存储初始位置的地址信息的变量,并将其记作offset,每扫描到一个空闲、连续的内存页时,计数器显示的数值cntr进行加1操作,在计数器显示的数值cntr大于等于预设数量numb的情况下,将offset当前存储的地址信息作为首个目标记录的地址。
在本申请实施例提供的共享内存的方法中,在读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间之后,该方法还包括:在内存中不存在空闲的目标内存空间的情况下,释放对内存的加锁。
可选地,在对状态映射表中的内存页记录进行扫描后。检测到不包含预设数量的、连续、空闲的内存页,也即不包含目标内存空间时,表明处理器的内存中没有足够的空间内存页供该操作系统使用,本次动态申请内存失败,释放对内存的加锁。
在本申请实施例提供的共享内存的方法中,内存中包括元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储有内存管理信息,判断内存当前是否处于被加锁状态包括:读取元数据存储区存储的内存管理信息,判断内存管理信息是否包含预设信息,其中,预设信息表征内存处于被加锁状态;在内存管理信息包含预设信息的情况下,确定内存当前未处于被加锁状态;在内存管理信息不包含预设信息的情况下,确定内存当前处于被加锁状态。
对于判断处理器的内存是否处于被加锁状态,需要利用元数据存储区中的内存管理信息进行判断,可选地,在获取到元数据存储区的内存管理信息时,利用根据判断内存管理信息中是否包含预设信息,其中,预设信息是用于表征内存是否处于被加锁状态;若内存管理信息中未包含预设信息,则表明当前内存处于未被加锁状态,反之则处于被加锁状态。
在本申请实施例提供的共享内存的方法中,内存管理信息包括第一字段信息和第二字段信息,第一字段信息用于描述内存是否处于被加锁状态,第二字段用于描述内存是否初始化完成,在接收内存申请指令之前,该方法还包括:初始化数据存储区存储的第一字段信息和第二字段信息。
在嵌入式系统运行之前,需要将处理器中的元数据存储区以及数据存储区进行初始化操作,可选地,将元数据存储区中的状态映射表存储的内存页记录进行初始化,并将内存管理信息进行初始化操作。
可选地,内存管理信息由第一字段信息以及第二字段信息组成,第一字段信息表征是否被加锁,第二字段信息用于表征是否初始化完成。
在本申请实施例提供的共享内存的方法中,更新内存的被占用状态包括:将状态映射表中记录的目标内存空间对应的内存页的状态变更为被占用状态。
可选地,在操作系统需要占用目标内存空间的情况下,通过识别目标内存空间的多个内存页的地址信息,按照内存页与内存页记录的对应关系,更新元数据存储区的状态映射表区的内存页记录,使其由未占用状态变为被占用状态。进一步地,根据操作系统的数据写入情况更新处理器的内存空间的占用状态,也即将目标内存空间由未占用状态变为被占用状态,并释放在动态申请内存之前的加锁操作。
可选地,响应第一操作系统的存储操作,将目标数据存储至目标内存空间,并将连续内存空间的地址信息发送至第二操作系统;接收第二操作系统基于地址信息发送的获取指令,将目标内存空间存储的目标数据发送至第二操作系统。
这里,在申请内存成功后,第一操作系统将需要传递的目标数据存储值申请的目标内存空间,并向与第一操作系统协同的第二操作系统发送该目标内存空间的地址信息,通知第二操作系统进行数据获取。可选地,在第二操作系统接收到目标内存空间的地址信息后,发出数据的获取指令,嵌入式系统接收该指令并将存储在目标内存空间的目标数据发送到第二操作系统中。
通过上述步骤,接收第一操作系统的内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至内存申请指令的发送端,更新内存的被占用状态,并释放对内存的加锁;响应第一操作系统的存储操作,将目标数据存储至目标内存空间,并将连续内存空间的地址信息发送至第二操作系统;接收第二操作系统基于地址信息发送的获取指令,将目标内存空间存储的目标数据发送至第二操作系统,解决了多个内核间共享内存的使用效率低、灵活性差以及过于依赖操作系统的问题,达到提高共享内存灵活性以及使用效率,并降低对操作系统的依赖的效果。
在一个示例性实施例中,在第一操作系统使用物理地址作进行数据读写操作,第二操作系统使用虚拟地址作进行数据读写操作的情况下,第二操作系统将目标内存空间的地址信息转换为虚拟地址,并采用虚拟地址访问内存,从目标内存空间读取目标数据。
由于在核间通信使用共享内存发送和接收数据时,会使用动态申请内存返回的地址,但是不同的系统使用地址系统可能不同,例如,实时操作系统为第一操作系统,非实时操作系统为第二操作系统,实时操作系统中访问共享内存可以直接使用物理地址,非实时操作系统中不能直接使用物理地址访问共享内存,则需要使用映射后的虚拟地址,在第二操作系统接收到目标内存空间的地址信息后,通过地址信息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,则表明没有符合要求的内存页供操作系统使用,释放动态申请内存的锁,本次动态申请内存失败。
此外,动态申请了空间之后发现空间不够用时还可以动态调整大小,可以再次发出更新后的内存申请指令,并对内存执行加锁操作,在加锁成功的情况下,若更新后的内存申请指令需要申请的内存空间增大,判断已申请的目标连续内存之后是否存在所需的内存空间,在存在的情况下,申请成功,若更新后的内存申请指令需要申请的内存空间减小,则释放部分内存空间。
本实施例通过划分多个存储区,利用索引位置根据实际需要的空间大小动态申请,使用完成后释放掉,并且动态申请了空间之后发现空间不够用时还可以动态调整大小,可以达到提高共享内存灵活性以及使用效率的效果。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
根据本申请实施例的又一个方面,还提供了一种用于实施上述嵌入式系统的启动控制方法的嵌入式系统,图10是根据本申请实施例的一种可选的嵌入式系统的示意图,上述嵌入式系统可以包括:
芯片和至少两个操作系统,其中,
芯片包括处理器1002、硬件控制器1004、第一总线1006和第二总线1008,其中,
第二总线1008的带宽高于第一总线1006带宽,且第二总线1008被配置为多主多从模式,第一总线1006被配置为一主多从模式;
至少两个操作系统基于处理器1002运行,其中,处理器的处理资源被动态分配给至少两个操作系统,处理器的处理资源包括处理器核心;
至少两个操作系统通过第一总线1006进行通信;
至少两个操作系统通过第二总线1008实现对硬件控制器的控制。
其中,上述芯片可以是前述BMC芯片;上述处理器可以是前述多核处理器,上述硬件控制器可以用于控制连接到对应的对外接口的外部设备;上述第一总线被配置为一主多从模式,其可以是处理器对硬件控制器之间控制所使用的总线,例如,APB,上述第二总线被配置为多主多从模式,其可以是处理器的多个处理器核心之间进行通信所使用的总线,例如,AHB,第二总线的带宽高于第一总线带宽。
嵌入式系统可以包括至少两个操作系统,至少两个操作系统基于处理器运行,而处理器的处理资源被动态分配给至少两个操作系统,处理器的处理资源包括处理器核心,至少两个操作系统通过第一总线实现对硬件控制器的控制,至少两个操作系统通过第二总线进行通信。
可选地,至少两个操作系统可以用于实施上述嵌入式系统的启动控制方法,例如,至少两个操作系统中的第一操作系统和第二操作系统可以用于实施上述嵌入式系统的启动控制方法。可选地,硬件控制器可以包括一种或多种,可以包括但不限于以下至少之一的芯片外设对应的控制器:I2C,USB(Universal Serial Bus,通用串行总线),UART,ADC(Analog to 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(Pulse Width Modulation,脉冲宽度调制),FanTach(风扇调速),Timer(时钟),PECI(Platform Environment Control Interface,平台环境式控制接口),邮箱(MailBox),还可以包括其他类型的控制器。对外接口可以包括一种或多种,可以包括但不限于与上述任一控制器对应的对外接口。
例如,BMC芯片的一个示例可以如图11所示,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桥(Bridge)连接),核心间的通信通过第二总线实现。此外,SOC子模块中还实现了第二总线与第一总线的互连互通(比如:通过APB桥(APB 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)、风扇调控等带外管理功能。由图11可知,该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表示空调减速一档等等。
各个操作系统之间,操作系统与硬件控制器之间可以但不限于通过总线进行通信,控制等等的交互。上述操作系统对各硬件控制器的寄存器的读写操作最终会转换为第一总线(或第二总线)对该硬件控制器的控制信号,这部分转换工作及第一总线(或第二总线)对硬件控制器的控制过程可以但不限于是由芯片内部硬件自动实现的。其实现过程遵循总线规范。其中,第一总线(或第二总线)的操作过程中一方面可以传输控制与总线协议相关的物理信号,另一方面还可以通过其物理数据通道传输有效数据至各硬件控制器。
根据本申请实施例的又一个方面,还提供了一种用于实施上述嵌入式系统的启动控制方法的嵌入式系统的启动控制装置。图12是根据本申请实施例的一种可选的嵌入式系统的启动控制装置的结构框图,如图12所示,上述装置可以包括:
第一控制单元1202,用于通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对所述目标设备的运行状态进行控制,其中,所述嵌入式系统包括所述第一操作系统;
启动单元1204,与第一控制单元1202相连,用于引导在所述处理器的第二处理器核心上启动第二操作系统,其中,所述嵌入式系统还包括所述第二操作系统,所述第一操作系统的响应速度高于所述第二操作系统,所述第一操作系统和所述第二操作系统通过第二总线进行通信,所述第二总线的带宽高于所述第一总线带宽;
第一执行单元1206,与启动单元1204相连,用于在所述第二操作系统启动之后,通过所述第二操作系统经由所述第一总线接管所述硬件控制器,以接管所述目标设备的控制权。
需要说明的是,该实施例中的第一控制单元1202可以用于执行上述步骤S202,该实施例中的启动单元1204可以用于执行上述步骤S204,该实施例中的第一执行单元1206可以用于执行上述步骤S206。
通过上述模块,通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对目标设备的运行状态进行控制,其中,嵌入式系统包括第一操作系统;引导在处理器的第二处理器核心上启动第二操作系统,其中,嵌入式系统还包括第二操作系统,第一操作系统的响应速度高于第二操作系统,第一操作系统和第二操作系统通过第二总线进行通信,第二总线的带宽高于第一总线带宽;在第二操作系统启动之后,通过第二操作系统经由第一总线接管硬件控制器,以接管目标设备的控制权,解决了相关技术中的操作系统的启动控制方式,存在需要增加额外的芯片导致的设备成本高的问题,节省了硬件成本,提高了设备控制的可扩展性。
在一个示例性实施例中,第一控制单元包括:
第一执行模块,用于在第一处理器核心上执行第一操作系统的第一控制任务,其中,第一控制任务用于对硬件控制器进行控制;
读取模块,用于通过第一处理器核心读取与目标设备对应的指定传感器的传感器数据;
第一发送模块,用于通过第一控制任务根据指定传感器的传感器数据经由第一总线向硬件控制器发送设备控制指令,以由硬件控制器按照设备控制指令对目标设备的运行状态进行控制。
在一个示例性实施例中,第一发送模块包括:
第一确定子模块,用于通过第一控制任务根据指定传感器的传感器数据确定目标设备的设备运行参数的目标参数值,其中,设备运行参数为控制目标设备的运行状态的参数;
发送子模块,用于通过第一控制任务将携带有目标参数值的设备控制指令经由第一总线发送给硬件控制器。
在一个示例性实施例中,第一确定子模块包括:
确定子单元,用于在目标设备为风扇的情况下,通过第一控制任务根据指定传感器的传感器数据确定风扇的风扇运行参数的目标参数值。
在一个示例性实施例中,确定子单元包括:
确定次子单元,用于在目标设备为风扇、且指定传感器为温度传感器的情况下,通过第一控制任务根据温度传感器的传感器数据确定风扇的转速的目标转速值,其中,风扇的转速与温度传感器所检测到的温度正相关。
在一个示例性实施例中,第一执行单元包括:
第二发送模块,用于通过第二操作系统经由第二总线向第一操作系统发送第一核间中断,其中,第一核间中断用于请求由第二操作系统接管硬件控制器;
控制模块,用于在接收到第一操作系统响应于第一核间中断返回的、用于指示同意由第二操作系统接管硬件控制器的第二核间中断的情况下,通过第二操作系统的第二控制任务经由第一总线对硬件控制器进行控制,其中,第二控制任务用于对硬件控制器进行控制。
在一个示例性实施例中,上述装置还包括:
第二控制单元,用于在通过第二操作系统经由第二总线向第一操作系统发送第一核间中断之后,响应于获取到的第一核间中断,控制第一操作系统的第三控制任务进行休眠,其中,第三控制任务用于对硬件控制器进行控制;
第一发送单元,用于在第三控制任务已休眠的情况下,通过第一操作系统经由第二总线向第二操作系统发送第二核间中断。
在一个示例性实施例中,上述装置还包括:
第二执行单元,用于在第三控制任务已休眠的情况下,将第一操作系统的系统运行数据压入堆栈,其中,第二核间中断还用于指示第二操作系统接管第一处理器核心。
在一个示例性实施例中,上述装置还包括:
唤醒单元,用于在通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制之前,在处理器所在的芯片上电之后,通过处理器唤醒第一处理器核心;
运行单元,用于通过第一处理器核心运行第一操作系统的引导加载程序,以引导第一操作系统在第一处理器核心上启动。
在一个示例性实施例中,启动单元包括:
第二执行模块,用于通过第一处理器核心执行二级程序加载器,以由二级程序加载器唤醒第二处理器核心;
运行模块,用于通过第二处理器核心运行第二操作系统的通用引导加载器,以引导第二操作系统在第一处理器核心上启动。
在一个示例性实施例中,上述装置还包括:
第三执行单元,用于在通过第二操作系统经由第一总线接管硬件控制器之后,在第二操作系统待重启的情况下,通过第二操作系统经由第二总线唤醒第一操作系统,并由第一操作系统经由第一总线接管硬件控制器,以接管目标设备的控制权;
第三控制单元,用于控制第二操作系统进行系统重启。
在一个示例性实施例中,第三执行单元包括:
发起模块,用于第二操作系统待重启的情况下,通过第二操作系统经由第二总线向第一操作系统发起系统唤醒中断,其中,系统唤醒中断用于唤醒第一操作系统。
在一个示例性实施例中,上述装置还包括:
第一分配单元,用于根据资源动态分配规则将一组待分配业务分配给第一操作系统和第二操作系统中对应的操作系统,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率,业务耦合度,业务重要性;
第一确定单元,用于确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;
第二分配单元,用于根据与每个待分配业务对应的操作系统以及资源分配结果,将处理器的处理资源分配给第一操作系统和第二操作系统。
在一个示例性实施例中,第一分配单元包括以下至少之一:
第一分配模块,用于将一组待分配业务中业务响应速度要求大于或者等于设定响应速度阈值的待分配业务分配给第一操作系统,以及,将一组待分配业务中业务响应速度要求小于设定响应速度阈值的待分配业务分配给第二操作系统;
第二分配模块,用于将一组待分配业务中业务资源占用率小于第一占用率阈值的待分配业务分配给第一操作系统,以及,将一组待分配业务资源占用率大于或者等于第一占用率阈值的待分配业务分配给第二操作系统;
第三分配模块,用于将一组待分配业务中包含敏感信息的待分配业务,分配给目标操作系统,其中,目标操作系统是第一操作系统和第二操作系统中,与使用对象交互频率低的操作系统。
在一个示例性实施例中,第一分配单元包括以下至少之一:
第四分配模块,用于将一组待分配业务中与第一操作系统的已分配业务的业务耦合度大于或者等于第一耦合度阈值的待分配业务,分配给第一操作系统;
第五分配模块,用于将一组待分配业务中与第二操作系统的已分配业务的业务耦合度大于或者等于第二耦合度阈值的待分配业务,分配给第二操作系统。
在一个示例性实施例中,第一确定单元包括:
生成模块,用于根据一组待分配业务的分配结果,结合第一操作系统的处理资源的资源利用情况和第二操作系统的处理资源的资源利用情况,生成一组待分配业务与处理器的处理资源的资源映射表。
在一个示例性实施例中,第二分配单元包括:
第六分配模块,用于在根据资源分配结果确定处理器的处理资源中的未分配处理资源存在对应的待分配业务的情况下,将未分配处理资源分配给与未分配处理资源对应的待分配业务所分配给的操作系统。
在一个示例性实施例中,上述装置还包括:
第二发送单元,用于通过第一操作系统将目标数据发送至处理器的内存中的目标虚拟通道;
第三发送单元,用于向第二操作系统发送中断通知消息;
获取单元,用于通过第二操作系统响应中断通知消息,从内存中的目标虚拟通道获取目标数据。
在一个示例性实施例中,内存中包含数据存储区和元数据存储区,数据存储区被划分为多个存储单元,每个存储单元用于存储业务数据,元数据存储区用于存储数据存储区的各个存储单元的大小以及被占用状态。
在一个示例性实施例中,第二发送单元包括:
第三执行模块,用于通过第一操作系统读取元数据存储区中的记录,根据读取的记录确定数据存储区中处于空闲状态、总空间大于等于目标数据的长度的至少一个存储单元,得到目标虚拟通道;
第四执行模块,用于将元数据存储区中目标虚拟通道对应的至少一个存储单元的状态设置为被占用状态,并将目标数据存储在目标虚拟通道。
在一个示例性实施例中,获取单元包括:
第五执行模块,用于通过第二操作系统读取元数据存储区中的记录,根据读取的记录确定目标虚拟通道;
第六执行模块,用于从目标虚拟通道对应的至少一个存储单元获取目标数据,并将至少一个存储单元的状态设置为空闲状态。
在一个示例性实施例中,数据存储区中包含多个内存通道,每个内存通道由一个或多个存储单元构成,元数据存储区存储有多条记录,每条记录用于记录一个内存通道的元数据,每个内存通道的元数据至少包含内存通道的通道ID、内存通道的大小、内存通道的被占用状态;第三执行模块包括:
第一遍历子模块,用于遍历元数据存储区存储的记录,判断是否存在指示内存通道处于空闲状态、且内存通道的大小大于等于目标数据的长度的第一目标记录;
第二确定子模块,用于在存在第一目标记录的情况下,将第一目标记录中记录的通道ID指示的内存通道确定为目标虚拟通道。
在一个示例性实施例中,在内存通道被占用的情况下,内存通道的元数据还包括目标数据的源CPU核的ID以及目标数据的目的CPU核的ID;第五执行模块包括:
第二遍历子模块,用于遍历元数据存储区存储的记录,判断是否存在第二目标记录,其中,第二目标记录指示内存通道处于被占用状态、且目的CPU核的ID为第二操作系统的CUP核的ID,源CPU核的ID非第二操作系统的CUP核的ID;
第三确定子模块,用于在存在第二目标记录的情况下,将第二目标记录中记录的通道ID指示的内存通道确定为目标虚拟通道。
在一个示例性实施例中,上述装置还包括:
第四执行单元,用于接收第一操作系统的内存申请指令,并对处理器的内存执行加锁操作,其中,内存申请指令用于申请使用处理器的内存;
第五执行单元,用于在对内存加锁成功的情况下,读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间,其中,目标内存空间的大小大于等于内存申请指令申请的内存的大小;
反馈单元,用于在内存中存在目标内存空间的情况下,将目标内存空间的地址信息反馈至第一操作系统,更新内存的被占用状态。
在一个示例性实施例中,内存中包括元数据存储区和数据存储区,数据存储区用于存储业务数据,元数据存储区存储有状态映射表,状态映射表用于记录数据存储区的被占用状态,第五执行单元包括:
第七执行模块,用于从元数据存储区中读取状态映射表中的记录,并根据状态映射表中的记录判断数据存储区中是否存在目标内存空间。
在一个示例性实施例中,上述装置还包括:
判断单元,用于在对处理器的内存执行加锁操作之前,判断内存当前是否处于被加锁状态,其中,被加锁状态表征内存处于被申请使用的状态;
第六执行单元,用于在内存当前未处于被加锁状态的情况下,对内存执行加锁操作。
在一个示例性实施例中,上述装置还包括:
释放单元,用于在读取内存的被占用状态,并根据内存的被占用状态判断内存中是否存在空闲的目标内存空间之后,在内存中不存在空闲的目标内存空间的情况下,释放对内存的加锁。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种芯片,其中,该芯片包括可编程逻辑电路以及可执行指令中的至少之一,该芯片在电子设备中运行,用于实现上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种BMC芯片,其中,该BMC芯片可以包括:存储单元以及与存储单元连接的处理单元。存储单元用于存储程序,而处理单元用于运行该程序,以执行上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种主板,其中,该主板包括:至少一个处理器;至少一个存储器,用于存储至少一个程序;当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现上述任一项方法实施例中的步骤。
本申请的实施例还提供了一种服务器,其中,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信,存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一项方法实施例中的步骤,以达到相同的技术效果。
上述服务器的通信总线可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。通信接口用于上述服务器与其他设备之间的通信。
存储器可以包括RAM,也可以包括NVM(Non-Volatile Memory,非易失性存储器),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。上述的处理器可以是通用处理器,包括CPU、NP(Network Processor,网络处理器)等;还可以是DSP(Digital Signal Processing,数字信号处理器)、ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、ROM、RAM、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的可选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (35)
1.一种嵌入式系统的启动控制方法,其特征在于,包括:
通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对所述目标设备的运行状态进行控制,其中,所述嵌入式系统包括所述第一操作系统;
引导在所述处理器的第二处理器核心上启动第二操作系统,其中,所述嵌入式系统还包括所述第二操作系统,所述第一操作系统的响应速度高于所述第二操作系统,所述第一操作系统和所述第二操作系统通过第二总线进行通信,所述第二总线的带宽高于所述第一总线带宽;
在所述第二操作系统启动之后,通过所述第二操作系统经由所述第一总线接管所述硬件控制器,以接管所述目标设备的控制权。
2.根据权利要求1所述的方法,其特征在于,所述通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,包括:
在所述第一处理器核心上执行所述第一操作系统的第一控制任务,其中,所述第一控制任务用于对所述硬件控制器进行控制;
通过所述第一处理器核心读取与所述目标设备对应的指定传感器的传感器数据;
通过所述第一控制任务根据所述指定传感器的传感器数据经由所述第一总线向所述硬件控制器发送设备控制指令,以由所述硬件控制器按照所述设备控制指令对所述目标设备的运行状态进行控制。
3.根据权利要求2所述的方法,其特征在于,所述通过所述第一控制任务根据所述指定传感器的传感器数据经由所述第一总线向所述硬件控制器发送设备控制指令,包括:
通过所述第一控制任务根据所述指定传感器的传感器数据确定所述目标设备的设备运行参数的目标参数值,其中,所述设备运行参数为控制所述目标设备的运行状态的参数;
通过所述第一控制任务将携带有所述目标参数值的所述设备控制指令经由所述第一总线发送给所述硬件控制器。
4.根据权利要求3所述的方法,其特征在于,所述通过所述第一控制任务根据所述指定传感器的传感器数据确定所述目标设备的设备运行参数的目标参数值,包括:
在所述目标设备为风扇的情况下,通过所述第一控制任务根据所述指定传感器的传感器数据确定所述风扇的风扇运行参数的目标参数值。
5.根据权利要求4所述的方法,其特征在于,所述在所述目标设备为风扇的情况下,通过所述第一控制任务根据所述指定传感器的传感器数据确定所述风扇的风扇运行参数的目标参数值,包括:
在所述目标设备为风扇、且所述指定传感器为温度传感器的情况下,通过所述第一控制任务根据所述温度传感器的传感器数据确定所述风扇的转速的目标转速值,其中,所述风扇的转速与所述温度传感器所检测到的温度正相关。
6.根据权利要求1所述的方法,其特征在于,所述通过所述第二操作系统经由第一总线接管所述硬件控制器,包括:
通过所述第二操作系统经由所述第二总线向所述第一操作系统发送第一核间中断,其中,所述第一核间中断用于请求由所述第二操作系统接管所述硬件控制器;
在接收到所述第一操作系统响应于所述第一核间中断返回的、用于指示同意由所述第二操作系统接管所述硬件控制器的第二核间中断的情况下,通过所述第二操作系统的第二控制任务经由所述第一总线对所述硬件控制器进行控制,其中,所述第二控制任务用于对所述硬件控制器进行控制。
7.根据权利要求6所述的方法,其特征在于,在所述通过所述第二操作系统经由所述第二总线向所述第一操作系统发送第一核间中断之后,所述方法还包括:
响应于获取到的所述第一核间中断,控制所述第一操作系统的第三控制任务进行休眠,其中,所述第三控制任务用于对所述硬件控制器进行控制;
在所述第三控制任务已休眠的情况下,通过所述第一操作系统经由所述第二总线向所述第二操作系统发送所述第二核间中断。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
在所述第三控制任务已休眠的情况下,将所述第一操作系统的系统运行数据压入堆栈,其中,所述第二核间中断还用于指示所述第二操作系统接管所述第一处理器核心。
9.根据权利要求1所述的方法,其特征在于,在所述通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制之前,所述方法还包括:
在所述处理器所在的芯片上电之后,通过所述处理器唤醒所述第一处理器核心;
通过所述第一处理器核心运行所述第一操作系统的引导加载程序,以引导所述第一操作系统在所述第一处理器核心上启动。
10.根据权利要求1所述的方法,其特征在于,所述引导在所述处理器的第二处理器核心上启动第二操作系统,包括:
通过所述第一处理器核心执行二级程序加载器,以由所述二级程序加载器唤醒所述第二处理器核心;
通过所述第二处理器核心运行所述第二操作系统的通用引导加载器,以引导所述第二操作系统在所述第一处理器核心上启动。
11.根据权利要求1所述的方法,其特征在于,在所述通过所述第二操作系统经由所述第一总线接管所述硬件控制器之后,所述方法还包括:
在所述第二操作系统待重启的情况下,通过所述第二操作系统经由所述第二总线唤醒所述第一操作系统,并由所述第一操作系统经由所述第一总线接管所述硬件控制器,以接管所述目标设备的控制权;
控制所述第二操作系统进行系统重启。
12.根据权利要求11所述的方法,其特征在于,所述在所述第二操作系统待重启的情况下,通过所述第二操作系统经由所述第二总线唤醒所述第一操作系统,包括:
在所述第二操作系统待重启的情况下,通过所述第二操作系统经由所述第二总线向所述第一操作系统发起系统唤醒中断,其中,所述系统唤醒中断用于唤醒所述第一操作系统。
13.根据权利要求1至12中任一项所述的方法,其特征在于,所述方法还包括:
根据资源动态分配规则将一组待分配业务分配给所述第一操作系统和所述第二操作系统中对应的操作系统,其中,所述资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率,业务耦合度,业务重要性;
确定与所述一组待分配业务对应的资源分配结果,其中,所述资源分配结果用于指示所述处理器的处理资源中与所述一组待分配业务中的每个待分配业务对应的处理资源,所述处理器的处理资源包括处理器核心;
根据与所述每个待分配业务对应的操作系统以及所述资源分配结果,将所述处理器的处理资源分配给所述第一操作系统和所述第二操作系统。
14.根据权利要求13所述的方法,其特征在于,所述根据资源动态分配规则将一组待分配业务分配给所述嵌入式系统中对应的操作系统,包括以下至少之一:
将所述一组待分配业务中业务响应速度要求大于或者等于设定响应速度阈值的待分配业务分配给所述第一操作系统,以及,将所述一组待分配业务中业务响应速度要求小于设定响应速度阈值的待分配业务分配给所述第二操作系统;
将所述一组待分配业务中业务资源占用率小于第一占用率阈值的待分配业务分配给所述第一操作系统,以及,将所述一组待分配业务资源占用率大于或者等于第一占用率阈值的待分配业务分配给所述第二操作系统;
将所述一组待分配业务中包含敏感信息的待分配业务,分配给目标操作系统,其中,所述目标操作系统是所述第一操作系统和所述第二操作系统中,与使用对象交互频率低的操作系统。
15.根据权利要求13所述的方法,其特征在于,所述根据资源动态分配规则将一组待分配业务分配给所述嵌入式系统中对应的操作系统,包括以下至少之一:
将所述一组待分配业务中与所述第一操作系统的已分配业务的业务耦合度大于或者等于第一耦合度阈值的待分配业务,分配给所述第一操作系统;
将所述一组待分配业务中与所述第二操作系统的已分配业务的业务耦合度大于或者等于第二耦合度阈值的待分配业务,分配给所述第二操作系统。
16.根据权利要求13所述的方法,其特征在于,所述确定与所述一组待分配业务对应的资源分配结果,包括:
根据所述一组待分配业务的分配结果,结合所述第一操作系统的处理资源的资源利用情况和所述第二操作系统的处理资源的资源利用情况,生成所述一组待分配业务与所述处理器的处理资源的资源映射表。
17.根据权利要求13所述的方法,其特征在于,所述根据与所述每个待分配业务对应的操作系统以及所述资源分配结果,将所述处理器的处理资源分配给所述第一操作系统和所述第二操作系统,包括:
在根据所述资源分配结果确定所述处理器的处理资源中的未分配处理资源存在对应的待分配业务的情况下,将所述未分配处理资源分配给与所述未分配处理资源对应的待分配业务所分配给的操作系统。
18.根据权利要求1至12中任一项所述的方法,其特征在于,所述方法还包括:
通过所述第一操作系统将目标数据发送至所述处理器的内存中的目标虚拟通道;
向所述第二操作系统发送中断通知消息;
通过所述第二操作系统响应所述中断通知消息,从所述内存中的所述目标虚拟通道获取所述目标数据。
19.根据权利要求18所述的方法,其特征在于,所述内存中包含数据存储区和元数据存储区,所述数据存储区被划分为多个存储单元,每个存储单元用于存储业务数据,所述元数据存储区用于存储所述数据存储区的各个存储单元的大小以及被占用状态。
20.根据权利要求19所述的方法,其特征在于,所述通过所述第一操作系统将目标数据发送至所述处理器的内存中的目标虚拟通道,包括:
通过所述第一操作系统读取所述元数据存储区中的记录,根据读取的记录确定所述数据存储区中处于空闲状态、总空间大于等于所述目标数据的长度的至少一个存储单元,得到所述目标虚拟通道;
将所述元数据存储区中所述目标虚拟通道对应的至少一个存储单元的状态设置为被占用状态,并将所述目标数据存储在所述目标虚拟通道。
21.根据权利要求20所述的方法,其特征在于,所述通过所述第二操作系统响应所述中断通知消息,从所述内存中的所述目标虚拟通道获取所述目标数据,包括:
通过所述第二操作系统读取所述元数据存储区中的记录,根据读取的记录确定所述目标虚拟通道;
从所述目标虚拟通道对应的至少一个存储单元获取所述目标数据,并将所述至少一个存储单元的状态设置为空闲状态。
22.根据权利要求21所述的方法,其特征在于,所述数据存储区中包含多个内存通道,每个内存通道由一个或多个存储单元构成,所述元数据存储区存储有多条记录,每条记录用于记录一个内存通道的元数据,每个内存通道的元数据至少包含内存通道的通道ID、内存通道的大小、内存通道的被占用状态;所述通过所述第一操作系统读取所述元数据存储区中的记录,根据读取的记录确定所述数据存储区中处于空闲状态、总空间大于等于所述目标数据的长度的至少一个存储单元,得到所述目标虚拟通道,包括:
遍历所述元数据存储区存储的记录,判断是否存在指示内存通道处于空闲状态、且内存通道的大小大于等于所述目标数据的长度的第一目标记录;
在存在所述第一目标记录的情况下,将所述第一目标记录中记录的通道ID指示的内存通道确定为所述目标虚拟通道。
23.根据权利要求22所述的方法,其特征在于,在内存通道被占用的情况下,所述内存通道的元数据还包括所述目标数据的源CPU核的ID以及所述目标数据的目的CPU核的ID;所述通过所述第二操作系统读取所述元数据存储区中的记录,根据读取的记录确定所述目标虚拟通道,包括:
遍历所述元数据存储区存储的记录,判断是否存在第二目标记录,其中,所述第二目标记录指示内存通道处于被占用状态、且目的CPU核的ID为所述第二操作系统的CUP核的ID,源CPU核的ID非所述第二操作系统的CUP核的ID;
在存在所述第二目标记录的情况下,将所述第二目标记录中记录的通道ID指示的内存通道确定为所述目标虚拟通道。
24.根据权利要求1至12中任一项所述的方法,其特征在于,所述方法还包括:
接收所述第一操作系统的内存申请指令,并对所述处理器的内存执行加锁操作,其中,所述内存申请指令用于申请使用所述处理器的内存;
在对所述内存加锁成功的情况下,读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间,其中,所述目标内存空间的大小大于等于所述内存申请指令申请的内存的大小;
在所述内存中存在所述目标内存空间的情况下,将所述目标内存空间的地址信息反馈至所述第一操作系统,更新所述内存的被占用状态。
25.根据权利要求24所述的方法,其特征在于,所述内存中包括元数据存储区和数据存储区,所述数据存储区用于存储业务数据,所述元数据存储区存储有状态映射表,所述状态映射表用于记录所述数据存储区的被占用状态,所述读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间,包括:
从所述元数据存储区中读取所述状态映射表中的记录,并根据所述状态映射表中的记录判断所述数据存储区中是否存在所述目标内存空间。
26.根据权利要求24所述的方法,其特征在于,在对处理器的内存执行加锁操作之前,所述方法还包括:
判断所述内存当前是否处于被加锁状态,其中,所述被加锁状态表征所述内存处于被申请使用的状态;
在所述内存当前未处于被加锁状态的情况下,对所述内存执行加锁操作。
27.根据权利要求24所述的方法,其特征在于,在读取所述内存的被占用状态,并根据所述内存的被占用状态判断所述内存中是否存在空闲的目标内存空间之后,所述方法还包括:
在所述内存中不存在空闲的所述目标内存空间的情况下,释放对所述内存的加锁。
28.一种嵌入式系统,其特征在于,包括:芯片和至少两个操作系统,其中,
所述芯片包括处理器、硬件控制器、第一总线和第二总线,其中,
所述第二总线的带宽高于所述第一总线带宽,且所述第二总线被配置为多主多从模式,所述第一总线被配置为一主多从模式;
所述至少两个操作系统基于所述处理器运行,其中,所述处理器的处理资源被动态分配给所述至少两个操作系统,所述处理器的处理资源包括处理器核心;
所述至少两个操作系统通过所述第二总线进行通信;
所述至少两个操作系统通过所述第一总线实现对所述硬件控制器的控制;
所述至少两个操作系统用于实现权利要求1至27中任一项中所述的方法的步骤。
29.一种嵌入式系统的启动控制装置,其特征在于,包括:
第一控制单元,用于通过处理器的第一处理器核心上运行的第一操作系统经由第一总线对目标设备的硬件控制器进行控制,以对所述目标设备的运行状态进行控制,其中,所述嵌入式系统包括所述第一操作系统;
启动单元,用于引导在所述处理器的第二处理器核心上启动第二操作系统,其中,所述嵌入式系统还包括所述第二操作系统,所述第一操作系统的响应速度高于所述第二操作系统,所述第一操作系统和所述第二操作系统通过第二总线进行通信,所述第二总线的带宽高于所述第一总线带宽;
第一执行单元,用于在所述第二操作系统启动之后,通过所述第二操作系统经由所述第一总线接管所述硬件控制器,以接管所述目标设备的控制权。
30.一种芯片,其特征在于,所述芯片包括可编程逻辑电路以及可执行指令中的至少之一,所述芯片在电子设备中运行,用于实现权利要求1至27中任一项所述的方法。
31.一种BMC芯片,其特征在于,包括:存储单元以及与所述存储单元连接的处理单元,所述存储单元用于存储程序,所述处理单元用于运行所述程序,以执行如权利要求1至27中任一项所述的方法。
32.一种主板,其特征在于,包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求1至27中任一项所述的方法。
33.一种服务器,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1至27中任一项所述的方法。
34.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至26中任一项中所述的方法的步骤。
35.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至27中任一项中所述的方法的步骤。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2023091877 | 2023-04-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116830082A true CN116830082A (zh) | 2023-09-29 |
Family
ID=88114973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202380009071.5A Pending CN116830082A (zh) | 2023-04-28 | 2023-04-28 | 嵌入式系统的启动控制方法和装置、存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116830082A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117472588A (zh) * | 2023-12-27 | 2024-01-30 | 山东方寸微电子科技有限公司 | 一种用于网络密码设备的混合式软件架构及密码设备 |
CN117555760A (zh) * | 2023-12-29 | 2024-02-13 | 苏州元脑智能科技有限公司 | 服务器监测方法及装置、基板控制器及嵌入式系统 |
CN118394697A (zh) * | 2024-06-28 | 2024-07-26 | 苏州元脑智能科技有限公司 | 服务器总线设备热插入控制方法、装置及电子设备 |
-
2023
- 2023-04-28 CN CN202380009071.5A patent/CN116830082A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 | 苏州元脑智能科技有限公司 | 服务器监测方法及装置、基板控制器及嵌入式系统 |
CN118394697A (zh) * | 2024-06-28 | 2024-07-26 | 苏州元脑智能科技有限公司 | 服务器总线设备热插入控制方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116257364B (zh) | 系统间的资源占用方法、装置、存储介质及电子装置 | |
CN116830082A (zh) | 嵌入式系统的启动控制方法和装置、存储介质和电子设备 | |
US7797555B2 (en) | Method and apparatus for managing power from a sequestered partition of a processing system | |
EP3414662B1 (en) | Virtualizing sensors | |
CN116302617B (zh) | 共享内存的方法、通信方法、嵌入式系统以及电子设备 | |
CN116244229B (zh) | 硬件控制器的访问方法、装置、存储介质和电子设备 | |
US9430411B2 (en) | Method and system for communicating with non-volatile memory | |
CN116868167A (zh) | 操作系统的运行控制方法和装置,以及嵌入式系统和芯片 | |
EP3086228A1 (en) | Resource processing method, operating system, and device | |
CN116243995B (zh) | 通信方法、装置、计算机可读存储介质以及电子设备 | |
CN116627520B (zh) | 基板管理控制器的系统运行方法以及基板管理控制器 | |
CN116302141B (zh) | 串口切换方法、芯片及串口切换系统 | |
CN116541227B (zh) | 故障诊断方法、装置、存储介质、电子装置及bmc芯片 | |
CN116243996B (zh) | 业务的运行切换方法、装置、存储介质及电子装置 | |
US9390033B2 (en) | Method and system for communicating with non-volatile memory via multiple data paths | |
CN116521209B (zh) | 操作系统的升级方法及装置、存储介质及电子设备 | |
CN116868170A (zh) | 嵌入式系统的运行方法和装置、嵌入式系统及芯片 | |
CN117032812A (zh) | 服务器的管理方法、设备、装置、存储介质和电子设备 | |
US9377968B2 (en) | Method and system for using templates to communicate with non-volatile memory | |
CN116257471A (zh) | 一种业务处理方法及装置 | |
CN116848519A (zh) | 硬件接口信号的生成方法、装置及电子设备 | |
CN116521324A (zh) | 中断虚拟化处理方法、装置及电子设备 | |
CN113485789B (zh) | 资源配置方法、装置及计算机架构 | |
CN117149472B (zh) | 通信方法、装置、计算机可读存储介质以及电子设备 | |
CN117149471B (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 |