CN117149472B - 通信方法、装置、计算机可读存储介质以及电子设备 - Google Patents

通信方法、装置、计算机可读存储介质以及电子设备 Download PDF

Info

Publication number
CN117149472B
CN117149472B CN202311427550.7A CN202311427550A CN117149472B CN 117149472 B CN117149472 B CN 117149472B CN 202311427550 A CN202311427550 A CN 202311427550A CN 117149472 B CN117149472 B CN 117149472B
Authority
CN
China
Prior art keywords
operating system
virtual channel
channel
mutual exclusion
flag bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311427550.7A
Other languages
English (en)
Other versions
CN117149472A (zh
Inventor
马斌
马文凯
陈瑾
马进
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Metabrain Intelligent Technology Co Ltd
Original Assignee
Suzhou Metabrain 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 Metabrain Intelligent Technology Co Ltd filed Critical Suzhou Metabrain Intelligent Technology Co Ltd
Priority to CN202311427550.7A priority Critical patent/CN117149472B/zh
Publication of CN117149472A publication Critical patent/CN117149472A/zh
Application granted granted Critical
Publication of CN117149472B publication Critical patent/CN117149472B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Hardware Redundancy (AREA)

Abstract

本申请实施例提供了一种通信方法、装置、计算机可读存储介质以及电子设备,其中,该方法应用于处理器,处理器上运行有第一操作系统和第二操作系统,该方法包括:在第一操作系统需要与第二操作系统进行数据交互的情况下,第一操作系统和第二操作系统依次申请互斥锁;在第一操作系统和第二操作系统均申请互斥锁成功的情况下,第一操作系统在处理器的共享内存中寻找可用虚拟通道;在共享内存中存在可用虚拟通道的情况下,第一操作系统和第二操作系统依次释放互斥锁,第一操作系统通过可用虚拟通道和第二操作系统进行数据交互。解决了异构双系统之间同时访问共享内存导致的并发冲突的问题。

Description

通信方法、装置、计算机可读存储介质以及电子设备
技术领域
本申请实施例涉及计算机领域,具体而言,涉及一种通信方法、装置、计算机可读存储介质以及电子设备。
背景技术
近年来,随着半导体行业的快速发展以及集成工艺的不断进步,在云计算、大数据、人工智能和工业互联网等领域选用的处理器逐渐由单核演变成多核,使用的操作系统也逐渐由一个演变成了两个甚至多个。
对于异构双系统,需要通过核间通信的方式来进行数据的同步和交互,目前异构双系统间的核间通信底层多采用中断和共享内存的方式,异构双系统之间存在同时写共享内存的并发冲突问题,影响处理器正常处理业务。
发明内容
本申请实施例提供了一种通信方法、装置、计算机可读存储介质以及电子设备,以至少解决相关技术中异构双系统之间同时访问共享内存导致的并发冲突的问题。
根据本申请的一个实施例,提供了一种通信方法,应用于处理器,处理器上运行有第一操作系统和第二操作系统,包括:在第一操作系统需要与第二操作系统进行数据交互的情况下,第一操作系统和第二操作系统依次申请互斥锁;在第一操作系统和第二操作系统均申请互斥锁成功的情况下,第一操作系统在处理器的共享内存中寻找可用虚拟通道;在共享内存中存在可用虚拟通道的情况下,第一操作系统和第二操作系统依次释放互斥锁,第一操作系统通过可用虚拟通道和第二操作系统进行数据交互。
在一个示例性实施例中,在第一操作系统和第二操作系统均申请互斥锁成功的情况下,该方法还包括:在第一操作系统和第二操作系统依次释放互斥锁之前,若第二操作系统在处理器的共享内存中寻找可用虚拟通道,响应第二操作系统的寻找操作,向第二操作系统反馈寻找失败的结果。
在一个示例性实施例中,第一操作系统和第二操作系统依次申请互斥锁包括:第一操作系统申请互斥锁;第一操作系统在申请互斥锁成功的情况下,通过核间通信的方式通知第二操作系统申请互斥锁;第二操作系统响应第一操作系统的通知,申请互斥锁,并通过核间通信的方式将申请结果发送至第一操作系统。
在一个示例性实施例中,在第一操作系统申请互斥锁之后,该方法还包括:在第一操作系统当前申请互斥锁失败的情况下,休眠第一预设时长,并在第一预设时长之后再次申请互斥锁,直至申请互斥锁成功,或者直至申请次数大于第一预设次数,其中,在申请次数大于第一预设次数的情况下,确定第一操作系统申请互斥锁失败。
在一个示例性实施例中,在第二操作系统响应第一操作系统的通知,申请互斥锁之后,该方法还包括:在第二操作系统当前申请互斥锁失败的情况下,休眠第二预设时长,并在第二预设时长之后再次申请互斥锁,直至申请互斥锁成功,或者直至申请次数大于第二预设次数,其中,在申请次数大于第二预设次数的情况下,确定第二操作系统申请互斥锁失败。
在一个示例性实施例中,第一预设时长和第二预设时长的差值大于时长阈值。
在一个示例性实施例中,在通过核间通信的方式将申请结果发送至第一操作系统之后,该方法还包括:在申请结果指示第二操作系统申请互斥锁失败的情况下,第一操作系统释放互斥锁。
在一个示例性实施例中,在第一操作系统释放互斥锁之后,该方法还包括:第一操作系统在第三预设时长之后再次申请互斥锁,直至申请次数大于第三预设次数,或者直至申请互斥锁成功,其中,在申请次数大于第三预设次数的情况下,确定第一操作系统申请互斥锁失败;第一操作系统在申请互斥锁成功的情况下,通过核间通信的方式通知第二操作系统申请互斥锁。
在一个示例性实施例中,第一操作系统和第二操作系统依次释放互斥锁包括:第一操作系统释放互斥锁,并通过核间通信的方式通知第二操作系统释放互斥锁;第二操作系统响应第一操作系统的通知,释放互斥锁。
在一个示例性实施例中,第一操作系统通过调用自身配置的第一互斥锁申请接口执行申请互斥锁的操作,并通过调用自身配置的第一互斥锁释放接口执行释放互斥锁的操作;第二操作系统通过调用自身配置的第二互斥锁申请接口执行申请互斥锁的操作,并通过调用自身配置的第二互斥锁释放接口执行释放互斥锁的操作。
在一个示例性实施例中,共享内存的虚拟通道关联有第一标志位、第二标志位以及第三标志位,第一标志位指示虚拟通道是否空闲,第二标志位指示虚拟通道是否为数据读取完成的待释放通道,第三标志位指示虚拟通道是否为数据写入完成的通道,第一操作系统通过可用虚拟通道和第二操作系统进行数据交互包括:将可用虚拟通道的第一标志位设置为第一预设值,其中,第一标志位为第一预设值指示虚拟通道被占用;第一操作系统将目标数据写入可用虚拟通道的数据区,将第三标志位置为第三预设值,并向第二操作系统发送第一中断消息,其中,第三标志位为第三预设值指示虚拟通道为数据写入完成的通道;第二操作系统响应第一中断消息,从共享内存读取目标数据,并将第二标志位置为第二预设值,其中,第二标志位为第二预设值指示虚拟通道是待释放通道。
在一个示例性实施例中,第二操作系统响应第一中断消息,从共享内存读取目标数据包括:第二操作系统从共享内存中寻找第一标志位为第一预设值、第三标志位为第三预设值的通道,得到目标虚拟通道,并从目标虚拟通道读取目标数据。
在一个示例性实施例中,共享内存包括多个虚拟通道,每个虚拟通道包括元数据区域和数据区域,元数据区域存储有第一标志位、第二标志位,第一标志位指示虚拟通道是否空闲,第二标志位指示虚拟通道是否为数据读取完成的待释放通道,第一操作系统在处理器的共享内存中寻找可用虚拟通道包括:第一操作系统遍历共享内存中的虚拟通道,并判断当前虚拟通道的第二标志位是否为第二预设值,其中,第二标志位为第二预设值指示虚拟通道为待释放通道;在当前虚拟通道的第二标志位为第二预设值的情况下,将当前虚拟通道的第一标志位、第二标志位均置为初始值,并将当前虚拟通道确定为可用虚拟通道,其中,第一标志位为初始值指示虚拟通道空闲,第二标志位为初始值指示虚拟通道不是待释放通道。
在一个示例性实施例中,在判断当前虚拟通道的第二标志位是否为第二预设值之后,该方法还包括:在当前虚拟通道的第二标志位不是第二预设值的情况下,判断当前虚拟通道的第一标志位是否为初始值;在当前虚拟通道的第一标志位为初始值的情况下,将虚拟通道确定为可用虚拟通道;在当前虚拟通道的第一标志位不是初始值的情况下,判断共享内存中下一虚拟通道的第二标志位是否为第二预设值,在下一虚拟通道的第二标志位不是第二预设值的情况下,判断下一虚拟通道的第一标志位是否为初始值,直至找到可用虚拟通道,或者,直至遍历完毕共享内存中的所有虚拟通道。
在一个示例性实施例中,共享内存包括多个虚拟通道,每个虚拟通道包括元数据区域和数据指针,数据指针用于索引多个虚拟通道共用的数据区域,元数据区域存储有第一标志位、第二标志位,第一标志位指示虚拟通道是否空闲,第二标志位指示虚拟通道是否为数据读取完成的待释放通道,第一操作系统在处理器的共享内存中寻找可用虚拟通道包括:第一操作系统遍历共享内存中的虚拟通道,并判断当前虚拟通道的第二标志位是否为第二预设值,其中,第二标志位为第二预设值指示虚拟通道为待释放通道;在当前虚拟通道的第二标志位为第二预设值的情况下,根据当前虚拟通道的数据指针确定当前虚拟通道占据的空间,并判断当前虚拟通道占据的数据空间是否大于等于第一操作系统所需数据空间;在当前虚拟通道占据的空间大于等于所需数据空间的情况下,将当前虚拟通道的第一标志位、第二标志位均置为初始值,并将当前虚拟通道确定为可用虚拟通道,其中,第一标志位为初始值指示虚拟通道空闲,第二标志位为初始值指示虚拟通道不是待释放通道。
在一个示例性实施例中,在判断当前虚拟通道的第二标志位是否为第二预设值之后,该方法还包括:在当前虚拟通道的第二标志位不是第二预设值的情况下,判断当前虚拟通道的第一标志位是否为初始值;在当前虚拟通道的第一标志位为初始值的情况下,根据当前虚拟通道的数据指针确定当前虚拟通道占据的空间,并判断当前虚拟通道占据的数据空间是否大于等于第一操作系统所需数据空间;在当前虚拟通道占据的空间大于等于所需数据空间的情况下,将虚拟通道确定为可用虚拟通道。
在一个示例性实施例中,在判断当前虚拟通道占据的数据空间是否大于等于第一操作系统所需数据空间之后,该方法还包括:当前虚拟通道占据的数据空间小于所需数据空间的情况下,判断共享内存中下一虚拟通道的第二标志位是否为第二预设值;在下一虚拟通道的第二标志位是第二预设值的情况下,根据当前虚拟通道的数据指针和下一虚拟通道的指针确定当前虚拟通道和下一虚拟通道占据的连续数据空间,并判断连续数据空间是否大于等于第一操作系统所需数据空间;在连续数据空间大于等于所需数据空间的情况下,将下一虚拟通道的第一标志位、第二标志位均置为初始值,并将下一虚拟通道确定为可用虚拟通道。
在一个示例性实施例中,该方法还包括:在下一虚拟通道的第二标志位不是第二预设值、或者连续数据空间小于所需数据空间的情况下,继续遍历共享内存,直至找到大于等于所需数据空间的空闲连续数据空间,或者,直至遍历完毕共享内存中的所有虚拟通道。
根据本申请的另一个实施例,提供了一种通信装置,应用于处理器,处理器上运行有第一操作系统和第二操作系统,包括:申请单元,用于在第一操作系统需要与第二操作系统进行数据交互的情况下,控制第一操作系统和第二操作系统依次申请互斥锁;寻找单元,用于在第一操作系统和第二操作系统均申请互斥锁成功的情况下,控制第一操作系统在处理器的共享内存中寻找可用虚拟通道;交互单元,用于在共享内存中存在可用虚拟通道的情况下,控制第一操作系统和第二操作系统依次释放互斥锁,控制第一操作系统通过可用虚拟通道和第二操作系统进行数据交互。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,在第一操作系统需要与第二操作系统进行数据交互的情况下,第一操作系统和第二操作系统依次申请互斥锁,并在第一操作系统和第二操作系统均申请互斥锁成功的情况下,第一操作系统在处理器的共享内存中寻找可用虚拟通道,并通过可用虚拟通道和第二操作系统进行数据交互,避免了第一操作系统在写共享内存的情况下第二操作系统也写共享内存,导致的并发冲突,因此,可以解决相关技术中异构双系统之间同时访问共享内存导致的并发冲突的问题,达到任意时刻只有一个操作系统的一个任务可以访问共享内存的某个虚拟通道,从而避免发生核间通信并发冲突的效果。
附图说明
图1是根据本申请实施例的一种通信方法的移动终端的硬件结构框图;
图2是根据本实施例的嵌入式系统的示意图;
图3是根据本实施例的可选的嵌入式系统的示意图一;
图4是根据本申请实施例的可选的嵌入式系统的示意图二;
图5是根据本申请实施例的通信方法的流程图;
图6是根据本申请实施例的虚拟通道的示意图一;
图7是根据本申请实施例的虚拟通道的示意图二;
图8是根据本申请实施例的可选的通信方法的流程图;
图9是根据本申请实施例的通信装置的结构示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是根据本申请实施例的一种通信方法的移动终端的硬件结构框图。如图1所示,移动终端可以包括一个或多个(图1中仅示出一个)处理器102和用于存储数据的存储器104,处理器102可以包括但不限于微处理器(Microcontroller Unit,MCU) 或可编程逻辑器件(Field Programmable Gate Array,FPGA)等的处理装置,其中,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的通信方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种嵌入式系统,可以运行于上述移动终端,图2是根据本实施例的嵌入式系统的示意图,如图2所示,该嵌入式系统可以包括:
芯片和至少两个操作系统,其中,芯片包括处理器1102、硬件控制器1104、第一总线1106和第二总线1108,其中,第一总线1106的带宽高于第二总线1108带宽,且第一总线1106被配置为多主多从模式,第二总线1108被配置为一主多从模式;至少两个操作系统基于处理器1102运行;至少两个操作系统通过第一总线1106进行通信;至少两个操作系统通过第二总线1108实现对硬件控制器的控制。
其中,上述芯片可以是BMC芯片;上述处理器可以是多核处理器,上述硬件控制器可以用于控制连接到对应的对外接口的外部设备。
BMC芯片通过第一总线与第二总线实现片内ARM核、存储单元及控制器硬件资源间的互连。ARM核心与各控制器通过第二总线互连,实现核心与各控制器间的交互。同时,ARM核心间连接至第一总线(比如:可以通过AXI(Advanced eXtensible Interface,高级可扩展接口)桥(Bridge)连接),核心间的通信通过第一总线实现。
上述第一总线被配置为多主多从模式,其可以是处理器的多个处理器内核之间进行通信所使用的总线,例如,AHB(Advanced High Performance Bus,高级高性能总线),上述第二总线被配置为一主多从模式,其可以是处理器对硬件控制器之间控制所使用的总线,例如,APB(Advanced Peripheral Bus,外围总线),第一总线的带宽高于第二总线带宽。
在一个示例性实施例中,AHB被配置为多主(master)多从(slave)模式,Master会首先向仲裁发送发文请求,仲裁决定合适让master获取总线访问的权限,master获取权限之后会将数据与控制信号发送到仲裁器,仲裁器通过地址解析判断对应的slave通路,然后将请求发送到对应的目的端。同样响应的数据会通过Decoder解析,然后返回给对应的master。通过这种多路复用的机制实现多对多的访问。
在一个示例性实施例中,APB被配置为一主多从模式,APB挂在AHB总线系统下,通过AHB-APB Bridge将事务在AHB总线系统之间进行转化,此时Bridgre即为APB的master,其他的外围设备均为slave。数据请求只能由Master发向slave,slave收到请求后返回相应的响应数据给master,此过程可以实现一对多的访问,且访问不涉及AHB总线中的仲裁和Decoder解析操作。
嵌入式系统可以包括至少两个操作系统,至少两个操作系统基于处理器运行,而处理器的处理资源被动态分配给至少两个操作系统,处理器的处理资源包括处理器核心,至少两个操作系统通过第一总线进行通信,至少两个操作系统通过第二总线实现对硬件控制器的控制。
第一操作系统可以是具有明确固定的时间约束的操作系统,所有处理过程(任务调度)需要在固定的时间约束内完成,否则系统会出错,其可以是实时操作系统(Real TimeOperating System,简称RTOS),例如,FreeRTOS、RTLinux等,还可以是其他嵌入式系统中的实时操作系统。第二操作系统不具备该特征,第二操作系统一般采用公平任务调度算法,线程/进程数量增加时,就需要分享CPU时间,任务调试具有不确定性,可称为非实时操作系统,例如,contiki、HeliOS、Linux(全称GNU/Linux,是一套可自由传播的类Unix操作系统)等,还可以是其他嵌入式系统中的非实时操作系统,其中,Linux系统是一个基于POSIX(Portable Operating System Interface,可移植操作系统接口)的多用户、多任务、支持多线程和多CPU(Central Processing Unit,中央处理器,作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元)的操作系统。
在一个示例性实施例中,硬件控制器可以包括一种或多种,可以包括但不限于以下至少之一的芯片外设对应的控制器:I2C,USB(Universal Serial Bus,通用串行总线),UART,ADC(Analog to Digital Converter,模拟数字转换器),JTAG(Joint Test ActionGroup,联合测试工作组),RTC(Real_Time Clock,实时时钟),GPIO(General PurposeInput/Output,通用输入输出),WDT(Watch Dog Timer,看门狗),虚拟UART(VirtualUART),超级I/O(Super I/O),SGPIO(Serial General Purpose Input/Output,串行通用输入输出),PWM(Pulse Width Modulation,脉冲宽度调制),FanTach(风扇调速),Timer(时钟),PECI(Platform Environment Control Interface,平台环境式控制接口),邮箱(MailB0x),还可以包括其他类型的控制器。对外接口可以包括一种或多种,可以包括但不限于与上述任一控制器对应的对外接口。
通过上述嵌入式系统,第一操作系统和第二操作系统基于处理器运行,并通过不同功能的总线实现操作系统间的通信和硬件控制器的控制。由于第一操作系统和第二操作系统均是基于同一个处理器运行,避免了硬件器件的增加和部署,降低了系统成本,并且合理利用处理器资源支持系统之间的运行,因此,可以解决操作系统的运行效率较低的技术问题,达到了提高操作系统的运行效率的技术效果。
根据本申请实施例的另一个方面,还提供了一种嵌入式系统,上述嵌入式系统可以运行于上述BMC芯片上,图3是根据本实施例的可选的嵌入式系统的示意图一,如图3所示,上述嵌入式系统可以包括:
第一操作系统和第二操作系统,第一操作系统和第二操作系统运行于处理器上,第一操作系统的响应速度高于第二操作系统;
业务管理模块,用于根据资源动态分配规则将一组待分配业务分配给对应的操作系统,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率;
资源动态分配模块,用于确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;
资源自适应调度模块,用于根据与每个待分配业务对应的操作系统以及资源分配结果,将处理器的处理资源分配给第一操作系统和第二操作系统。
在本实施例中,第一操作系统和第二操作系统可以与前述实施例中类似,在此不做赘述,业务管理模块、资源动态分配模块和资源自适应调度模块可以是运行在第一操作系统或者第二操作系统下的软件模组,通过进行上述模块划分,可以方便进行不同功能模块的开发与维护,同时,对于资源动态分配规则,通过对资源动态分配规则进行灵活设置,提高资源分配的灵活性。
通过上述嵌入式系统,该嵌入式系统包括:第一操作系统和第二操作系统,第一操作系统和第二操作系统运行于处理器上,第一操作系统的响应速度高于第二操作系统;业务管理模块,用于根据资源动态分配规则将一组待分配业务分配给对应的操作系统,其中,资源动态分配规则包括根据以下至少之一进行资源动态分配:业务响应速度,业务资源占用率;资源动态分配模块,用于确定与一组待分配业务对应的资源分配结果,其中,资源分配结果用于指示处理器的处理资源中与一组待分配业务中的每个待分配业务对应的处理资源,处理器的处理资源包括处理器核心;资源自适应调度模块,用于根据与每个待分配业务对应的操作系统以及资源分配结果,将处理器的处理资源分配给第一操作系统和第二操作系统,解决了相关技术中存在由于多核处理器多数的处理资源处于空闲状态导致的核心资源的整体利用率较低的问题,提高了处理资源的利用率。
需要说明的是,嵌入式系统运行的过程中,可以先启动操作系统,然后不同的操作系统进行业务数据的交互。
在一个示例性实施例中,在操作系统包括第一操作系统和第二操作系统的情况下,可以但不限于采用以下方式启动第一操作系统和第二操作系统:引导所述第一操作系统启动;引导所述第二操作系统启动。
可选地,在本实施例中,第一操作系统和第二操作系统可以但不限于先后启动,第一操作系统可以但不限于比第二操作系统启动更快,第一操作系统也可以但不限于比第二操作系统启动所需的条件更简单,在第一操作系统先启动后可以运行能够满足第二操作系统启动所需的条件,或者能够加快第二操作系统启动的业务,从而使得多系统能够更加高效快速地启动并运行业务。
比如:引导第一操作系统启动后可以由第一操作系统运行能够控制芯片环境参数达到第二操作系统启动要求的业务(比如:风扇运行,参数控制等业务),使得芯片环境参数迅速达成第二操作系统启动运行的环境,提高操作系统的启动效率和运行效率。
可选地,在本实施例中,第一操作系统可以但不限于由第一操作系统的引导程序引导启动,第二操作系统可以但不限于由第二操作系统的引导程序引导启动。或者,二者可以由同一个引导程序先后引导启动。
在一个示例性实施例中,可以但不限于采用以下方式引导所述第一操作系统启动:所述芯片启动上电,通过所述处理器唤醒所述处理器中为所述第一操作系统分配的第一处理器核心;通过所述第一处理器核心执行所述第一操作系统的引导程序引导所述第一操作系统启动。
在一个示例性实施例中,交互的过程可以但不限于采用存储空间和中断请求配合传输的方式来实现,操作系统之间通过存储空间来传递数据,通过中断请求来进行相互之间指令的通知。比如:获取第一操作系统基于处理器运行的过程中产生的业务数据;将业务数据存储至处理器上的存储空间;向第二操作系统发送中断请求,其中,中断请求用于请求第二操作系统从存储空间读取业务数据,第二操作系统用于响应中断请求从存储空间读取业务数据。
可选地,在本实施例中,第一操作系统基于处理器运行的过程中产生的业务数据被存储在处理器上的存储空间中,通过中断请求通知第二操作系统,由第二操作系统从存储空间中读取出业务数据,从而实现业务数据的交互。
可选地,在本实施例中,操作系统之间交互的业务数据可以但不限于是操作系统运行操作业务过程中任何需要在系统间进行传输的数据。比如:业务的过程数据,业务的结果数据等等。
可选地,在本实施例中,处理器上的存储空间中可以但不限于为操作系统之间的交互过程配置专用的存储位置,可以称为共享内存。第一操作系统所对应的共享内存的信息(比如:存储地址)可以携带在用于请求第二操作系统从存储空间读取业务数据的中断请求中,第二操作系统响应中断请求到其指示的共享内存上读取业务数据。
在本实施例中,各个中断请求可以但不限于通过软件协议的方式在系统间进行传输,或者也可以通过硬件模块进行传递。以硬件模块mailb0x的形式传输中断请求为例,第一操作系统和第二操作系统之间可以建立mailb0x通道,业务数据通过存储空间读写,中断请求通过mailb0x通道传输。
第一操作系统在运行过程中产生业务数据并判定该业务数据是第二操作系统需要的或者是需要发送给第二操作系统的。此时,第一操作系统将业务数据存储至存储空间中,并向第二操作系统发送中断请求,第二操作系统响应该中断请求从存储空间中读取业务数据,并进行后续的处理。
图4是根据本申请实施例的可选的嵌入式系统的示意图二,通过图4所示的嵌入式系统实现本实施例的通信方法,如图4所示,系统包括:
芯片和至少两个操作系统,其中,芯片包括处理器,至少两个操作系统基于处理器运行,至少两个操作系统采用本实施例的通信方法进行通信。至少两个操作系统可以包括第一操作系统和第二操作系统,第一操作系统可以包含应用层和/或驱动层,第二操作系统也可以包含应用层和/或驱动层,应用层给用户提供人机交互接口,灵活实现用户需要的具体功能;驱动层和硬件通信,可以读写硬件的寄存器,同时,驱动层会给应用层提供统一的接口,从而接收应用层传输的数据,程序应用层和驱动层进行分层设计和管理,方便程序的维护和移植。
第一操作系统使用处理器核心CPU0执行任务,第二操作系统使用处理器核心CPU1执行任务,第一操作系统和第二操作系统通过共享内存在物理层交换数据。当第一操作系统的CPU核(CPU0)把需要发送的数据按照约定协议格式放在共享内存后,触发一个中断通知第二操作系统的CPU核(CPU1)去读取数据,CPU1读取到数据之后,按照约定的协议格式解析数据,在解析数据之后,可以根据业务需求选择给CPU0回复应答消息或者不回复应答消息。
需要说明的是,当第一操作系统和第二操作系统需要向对方发送数据的时候,会去共享内存中寻找空闲的区域写数据,第一操作系统可以采用系统自身提供的互斥锁来解决自身不同任务的并发冲突问题,第二操作系统可以采用系统自身提供的互斥锁来解决自身不同任务的并发冲突问题,但是,当第一操作系统和第二操作系统同时向同一地址的共享内存写数据的时候,会出现并发冲突的问题,写入的数据会互相影响。
为了解决上述问题,在本实施例中,在第一操作系统需要与第二操作系统进行数据交互的情况下,第一操作系统申请互斥锁,第一操作系统在申请互斥锁成功的情况下,通过核间通信的方式通知第二操作系统申请互斥锁,第二操作系统响应第一操作系统的通知申请互斥锁,并通过核间通信的方式将申请结果发送至第一操作系统,在第一操作系统和第二操作系统均申请互斥锁成功的情况下,第一操作系统在处理器的共享内存中寻找可用虚拟通道,在共享内存中存在可用虚拟通道的情况下,第一操作系统和第二操作系统依次释放互斥锁,第一操作系统通过可用虚拟通道和第二操作系统进行数据交互,达到任意时刻只有一个操作系统的一个任务可以访问共享内存的某个虚拟通道,从而避免发生核间通信并发冲突的效果。
图5是根据本申请实施例的通信方法的流程图,通过上述实施例的嵌入式系统实现,如图5所示,该流程包括如下步骤:
步骤S502,在第一操作系统需要与第二操作系统进行数据交互的情况下,第一操作系统和第二操作系统依次申请互斥锁。
第一操作系统可以是实时操作系统,也可以是非实时操作系统,相应的,第二操作系统可以是非实时操作系统,也可以是实时操作系统。第一操作系统需要与第二操作系统进行数据交互的场景包括多种,例如,第一操作系统需要把运行过程中产生的业务数据发送给第二操作系统进行处理。
需要说明的是,在第一操作系统与第二操作系统进行数据交互的任意场景下,第一操作系统可以采用自身提供的互斥锁来解决自身不同任务的并发冲突问题,第二操作系统可以采用自身提供的互斥锁来解决自身不同任务的并发冲突问题,但是当一个操作系统向共享内存写数据的时候,不排除另一个操作系统同时向共享内存的同一地址写数据的可能,这时候会产生操作系统之间的并发冲突问题,而单系统的互斥锁无法解决操作系统间的并发冲突问题,不同操作系统写入共享内存的数据会互相影响。
为了解决操作系统之间的并发冲突问题,在本申请实施例中,在第一操作系统需要与第二操作系统进行数据交互的情况下,也即,在第一操作系统在共享内存中寻找可用虚拟通道以写入数据之前,第一操作系统和第二操作系统依次申请互斥锁。
在一个示例性实施例中,第一操作系统和第二操作系统依次申请互斥锁包括:第一操作系统申请互斥锁;第一操作系统在申请互斥锁成功的情况下,通过核间通信的方式通知第二操作系统申请互斥锁;第二操作系统响应第一操作系统的通知,申请互斥锁,并通过核间通信的方式将申请结果发送至第一操作系统。
需要说明的是,操作系统会提供系统自身实现互斥锁的接口,互斥锁可以保证共享内存在任意时刻内只有该操作系统的一个任务可以访问,从而避免该操作系统多任务同时访问共享内存导致的并发冲突问题,但是,不同芯片平台和不同操作系统提供的互斥锁的支持不同。第一操作系统在寻找可用虚拟通道之前,会先给共享内存加上系统自身的互斥锁,此时只能避免第一操作系统的其他任务对共享内存执行访问操作,但不能避免第二操作系统的任务对共享内存执行访问操作。
因而,第一操作系统在加锁之后,通过核间通信的方式通知第二操作系统申请互斥锁,也即,通过发送中断消息的方式询问第二操作系统是否有任务正在申请可用虚拟通道,如果第二操作系统没有任务正在申请可用虚拟通道,也会给共享内存加上系统自身的互斥锁,并通过发送中断消息的方式将申请加锁成功的结果发送至第一操作系统,从而实现了两个操作系统对共享内存的加锁,如果第二操作系统有任务正在申请可用虚拟通道,则通过发送中断消息的方式将申请加锁失败的结果发送至第一操作系统。
步骤S504,在第一操作系统和第二操作系统均申请互斥锁成功的情况下,第一操作系统在处理器的共享内存中寻找可用虚拟通道。
在一个示例性实施例中,在第一操作系统和第二操作系统均申请互斥锁成功的情况下,该方法还包括:在第一操作系统和第二操作系统依次释放互斥锁之前,若第二操作系统在处理器的共享内存中寻找可用虚拟通道,响应第二操作系统的寻找操作,向第二操作系统反馈寻找失败的结果。
若第一操作系统和第二操作系统均申请互斥锁成功,说明在第一操作系统的一个任务对共享内存执行访问操作时,第一操作系统的其他任务无法成功地地对共享内存执行访问操作,第二操作系统的其他任务也无法成功地对共享内存执行访问操作,不会产生第一操作系统内的并发冲突问题,也不会产生第一操作系统和第二操作系统间的并发冲突问题,因而,在第一操作系统和第二操作系统均申请互斥锁成功的情况下,第一操作系统可以在处理器的共享内存中寻找可用虚拟通道,以向可用虚拟通道写入目标数据。
需要说明的是,本实施例把共享内存分成若干个虚拟通道,每个虚拟通道用于存储数据的内存大小可以静态分配,也可以动态分配,或者静态分配和动态分配相结合,可用虚拟通道是指处于空闲状态的、用于存储数据的内存满足第一操作系统的数据存储需求的虚拟通道。
步骤S506,在共享内存中存在可用虚拟通道的情况下,第一操作系统和第二操作系统依次释放互斥锁,第一操作系统通过可用虚拟通道和第二操作系统进行数据交互。
其中,在共享内存中存在可用虚拟通道的情况下,标记虚拟通道为非空闲通道,其他任务不再对该虚拟通道执行数据写入操作,然后,第一操作系统和第二操作系统依次释放互斥锁。也即,在第一操作系统寻找可用虚拟通道之前,第一操作系统和第二操作系统依次申请添加互斥锁,在第一操作系统寻找完成可用虚拟通道后,第一操作系统和第二操作系统依次释放互斥锁,避免长时间对共享内存加锁影响其他任务对共享内存的其他虚拟通道的访问操作。
在标记虚拟通道为非空闲通道之后,第一操作系统向可用虚拟通道写入目标数据,并通过发送中断消息的方式通知第二操作系统读取目标数据,第二操作系统在接到中断消息的情况下,从共享内存中读取目标数据,从而完成了第一操作系统和第二操作系统之间的数据交互。
通过上述步骤,在第一操作系统需要与第二操作系统进行数据交互的情况下,第一操作系统和第二操作系统依次申请互斥锁;在第一操作系统和第二操作系统均申请互斥锁成功的情况下,第一操作系统在处理器的共享内存中寻找可用虚拟通道;在共享内存中存在可用虚拟通道的情况下,第一操作系统和第二操作系统依次释放互斥锁,第一操作系统通过可用虚拟通道和第二操作系统进行数据交互,解决了相关技术中异构双系统之间同时访问共享内存导致的并发冲突的问题,进而达到了任意时刻只有一个操作系统的一个任务可以访问共享内存的某个虚拟通道,从而避免发生核间通信并发冲突的效果。
在一个示例性实施例中,第一操作系统通过调用自身配置的第一互斥锁申请接口执行申请互斥锁的操作,并通过调用自身配置的第一互斥锁释放接口执行释放互斥锁的操作;第二操作系统通过调用自身配置的第二互斥锁申请接口执行申请互斥锁的操作,并通过调用自身配置的第二互斥锁释放接口执行释放互斥锁的操作。
第一操作系统和第二操作系统均配置有自身的互斥锁申请接口和互斥锁释放接口,用以申请互斥锁和释放互斥锁。例如,第一操作系统为非实时操作系统,第一互斥锁申请接口为rt_mutex_timed_lock,第一互斥锁释放接口为rt_mutex_unlock,非实时操作系统通过调用rt_mutex_timed_lock申请互斥锁,通过调用rt_mutex_unlock释放互斥锁。再例如,第二操作系统为实时操作系统,第二互斥锁申请接口为xSemaphoreTake,第二互斥锁释放接口为xSemaphoreGive,实时操作系统通过调用xSemaphoreTake申请互斥锁,通过调用xSemaphoreGive释放互斥锁。
在一个示例性实施例中,在第一操作系统申请互斥锁之后,该方法还包括:在第一操作系统当前申请互斥锁失败的情况下,休眠第一预设时长,并在第一预设时长之后再次申请互斥锁,直至申请互斥锁成功,或者直至申请次数大于第一预设次数,其中,在申请次数大于第一预设次数的情况下,确定第一操作系统申请互斥锁失败。
需要说明的是,在第一互斥锁申请接口中可以设置休眠时间,在第一操作系统通过第一互斥锁申请接口申请互斥锁失败的情况下,可以休眠并重试第一预设次数,使得第一操作系统在上一任务访问共享内存之后的较短时间内及时对共享内存进行加锁。
例如,第一操作系统为Linux系统,第二操作系统为RTOS系统,第一互斥锁申请接口为rt_mutex_timed_lock(&LinuxLock,100),其中,接口参数“&LinuxLock”指示互斥锁的名称,接口参数“100”指示眠时间,休眠时间的单位可以为毫秒。Linux系统使用自带的接口rt_mutex_timed_lock(&LinuxLock,100)申请互斥锁,如果锁被占有,说明存在Linux系统的其他任务或者RTOS系统的任务申请可用虚拟通道, 睡眠等待100ms,再次申请互斥锁,直至申请申请成功,或者直至申请次数达到预设次数,rt_mutex_timed_lock(&LinuxLock,100)返回值为0表示申请互斥锁成功,否则表示申请失败。
在一个示例性实施例中,在第二操作系统响应第一操作系统的通知,申请互斥锁之后,该方法还包括:在第二操作系统当前申请互斥锁失败的情况下,休眠第二预设时长,并在第二预设时长之后再次申请互斥锁,直至申请互斥锁成功,或者直至申请次数大于第二预设次数,其中,在申请次数大于第二预设次数的情况下,确定第二操作系统申请互斥锁失败。
需要说明的是,在第二互斥锁申请接口中可以设置休眠时间,在第二操作系统通过第二互斥锁申请接口申请互斥锁失败的情况下,可以休眠并重试第二预设次数,使得第二操作系统在上一任务访问共享内存之后的较短时间内及时对共享内存进行加锁。
例如,第一操作系统为Linux系统,第二操作系统为RTOS系统,第二互斥锁申请接口为xSemaphoreTake(RTOSLock,200),其中,括接口参数“&RTOSLock”指示互斥锁的名称,接口参数“200”指示眠时间,休眠时间的单位可以为毫秒。在Linux系统申请互斥锁成功后,通过发送中断消息的方式通知RTOS系统申请互斥锁,RTOS系统使用系统自带的接口xSemaphoreTake(RTOSLock,200)申请加锁,如果锁被占有,说明存在Linux系统的其他任务或者RTOS系统的任务申请可用虚拟通道,睡眠等待200ms,再次申请互斥锁,直至申请申请成功,或者直至申请次数达到预设次数,xSemaphoreTake(RTOSLock,200)返回值为pdTRUE表示申请互斥锁成功,否则表示申请失败。
若RTOS系统申请互斥锁成功,则通过发送中断消息的方式将申请互斥锁的结果给Linux系统, Linux系统的互斥锁和RTOS系统的互斥锁都申请成功了,表示本次Linux系统和RTOS系统对共享内存的加锁成功了,Linux系统可以开始在共享内存中寻找可用虚拟通道。
在第一操作系统或第二操作系统休眠之后再次申请互斥锁时,为了避免申请冲突,提高申请成功互斥锁的概率,在一个示例性实施例中,第一预设时长和第二预设时长的差值大于时长阈值。
例如,时长阈值为80ms,第一预设时长为第一操作系统的休眠时长,第二预设时长为第二操作系统的休眠时长,可以将第一预设时长设置为100ms,将第二预设时长设置为200ms,也可以将第一预设时长设置为200ms,将第二预设时长设置为100ms,第一预设时长和第二预设时长不同,且相差大于80ms,与第一预设时长和第二预设时长设置为相同的时长相比,可以避免在第一操作系统和第二操作系统均申请失败互斥锁之后,又休眠相同的时间,从而导致再次产生申请冲突的问题,从而提高第一操作系统和第二操作系统在申请失败后再次重试成功的概率。
在一个示例性实施例中,在通过核间通信的方式将申请结果发送至第一操作系统之后,该方法还包括:在申请结果指示第二操作系统申请互斥锁失败的情况下,第一操作系统释放互斥锁。
需要说明的是,若第二操作系统申请互斥锁失败,第二操作系统通过核间通信的方式发送申请互斥锁的结果给第一操作系统,虽然第一操作系统互斥锁申请成功了,但本次两个操作系统对共享内存的加锁失败了,第一操作系统不可以执行寻找可用虚拟通道以进行数据交互的操作,为了避免第一操作系统对共享内存的加锁影响其他任务访问共享内存,第一操作系统需要暂时释放已成功申请的互斥锁。
在一个示例性实施例中,在第一操作系统释放互斥锁之后,该方法还包括:第一操作系统在第三预设时长之后再次申请互斥锁,直至申请次数大于第三预设次数,或者直至申请互斥锁成功,其中,在申请次数大于第三预设次数的情况下,确定第一操作系统申请互斥锁失败;第一操作系统在申请互斥锁成功的情况下,通过核间通信的方式通知第二操作系统申请互斥锁。
需要说明的是,若第一操作系统和/或第二操作系统申请互斥锁失败,则本次两个操作系统对共享内存的加锁失败,可以睡眠一段时间后再重试对共享内存的加锁操作,使得两个操作系统在上一任务访问共享内存之后的较短时间内及时对共享内存进行加锁。重试对共享内存的加锁操作的过程与上述实施例相同,也即,第一操作系统先申请互斥锁,在申请互斥锁成功的情况下,通过核间通信的方式通知第二操作系统申请互斥锁。
在一个示例性实施例中,第一操作系统和第二操作系统依次释放互斥锁包括:第一操作系统释放互斥锁,并通过核间通信的方式通知第二操作系统释放互斥锁;第二操作系统响应第一操作系统的通知,释放互斥锁。
在一个实施性方式中,第一操作系统为非实时操作系统,第二操作系统为实时操作系统,非实时操作系统先使用第一互斥锁释放接口释放互斥锁,然后通过发送中断消息的方式通知实时操作系统释放互斥锁,实时操作系统在接到中断消息后使用第二互斥锁释放接口释放互斥锁。
例如,第一操作系统为Linux系统,第二操作系统为RTOS系统, Linux系统先使用接口rt_mutex_unlock(&LinuxLock)释放自己的互斥锁,然后通过发送中断消息的方式通知RTOS系统释放互斥锁,RTOS系统接到中断消息后,使用接口xSemaphoreGive(RTOSLock)释放自己的互斥锁。
在一个示例性实施例中,共享内存包括多个虚拟通道,每个虚拟通道包括元数据区域和数据区域,元数据区域存储有第一标志位、第二标志位,第一标志位指示虚拟通道是否空闲,第二标志位指示虚拟通道是否为数据读取完成的待释放通道,第一操作系统在处理器的共享内存中寻找可用虚拟通道包括:第一操作系统遍历共享内存中的虚拟通道,并判断当前虚拟通道的第二标志位是否为第二预设值,其中,第二标志位为第二预设值指示虚拟通道为待释放通道;在当前虚拟通道的第二标志位为第二预设值的情况下,将当前虚拟通道的第一标志位、第二标志位均置为初始值,并将当前虚拟通道确定为可用虚拟通道,其中,第一标志位为初始值指示虚拟通道空闲,第二标志位为初始值指示虚拟通道不是待释放通道。
图6是根据本申请实施例的虚拟通道的示意图一,如图6所示,本实施例将共享内存分为若干个虚拟通道,每个通道对应的内存大小是静态分配的,静态分配是指每个通道对应的内存大小、起始地址都是提前分配好的,分配完成后不再变化,每个通道对应的内存大小可以相同也可以不相同,在本实施例中,可以设置每个通道对应的内存大小相同,每个虚拟通道包括元数据区域和数据区域。
如图6所示,数据区域用Data字段表示,数据区域用于存放发送的数据,元数据区域存储有多个字段,每个字段的意义如下:
IdleFlag(第一标志位):表示通道是否空闲。在初始状态下所有通道均为空闲状态,通道的IdleFlag字段设置为初始值,也即0,当有数据需要发送的时候,从共享内存的通道列表中依次寻找空闲通道,寻找到空闲通道后,将通道的IdleFlag字段设置为第一预设值,例如,可以设置为0xA5A5A5A5,表示该通道非空。
FreeFlag(第二标志位):表示通道的数据区域的数据是否已经被读走,在初始状态下,通道的FreeFlag字段设置为初始值,也即0,该通道的数据区域的数据被读走后,将通道的FreeFlag字段设置为第二预设值,例如,可以设置为0xA5A5A5A5,表示该通道可以被释放了,即把该通道的IdleFlag、FullFlag和FreeFlag字段均初始化,也即设置为0。
FullFlag(第三标志位):表示向通道的数据区域写数据是否完成,在初始状态下,通道的FullFlag字段设置为初始值,也即0,该通道的数据区域的数据写入完成后,将通道的FullFlag字段设置为第二预设值,例如,可以设置为0xA5A5A5A5。
DataLen:表示发送数据的大小。
pData:表示发送数据的首地址,即数据区域的首地址。
在一种实施性方式中,第一操作系统需要向第二操作系统发送数据,需要先在共享内存中找到一个空闲通道,即IdleFlag不等于0xA5A5A5A5的通道。可以在通道列表(多个虚拟通道的元数据区域构成通道列表)里依次判断当前遍历到的通道是否为待释放通道,即判断通道的FreeFlag是否为0xA5A5A5A5,如果是的话则把该通道释放,即把该通道的IdleFlag、FullFlag和FreeFlag均设置成0,使得该通道变成空闲通道,也即寻找到的了可用虚拟通道,为了避免其他任务对可用虚拟通道的写操作,第一操作系统把该通道的IdleFlag设置成0xA5A5A5A5,并发送数据到该通道。
在一个示例性实施例中,在判断当前虚拟通道的第二标志位是否为第二预设值之后,该方法还包括:在当前虚拟通道的第二标志位不是第二预设值的情况下,判断当前虚拟通道的第一标志位是否为初始值;在当前虚拟通道的第一标志位为初始值的情况下,将虚拟通道确定为可用虚拟通道;在当前虚拟通道的第一标志位不是初始值的情况下,判断共享内存中下一虚拟通道的第二标志位是否为第二预设值,在下一虚拟通道的第二标志位不是第二预设值的情况下,判断下一虚拟通道的第一标志位是否为初始值,直至找到可用虚拟通道,或者,直至遍历完毕共享内存中的所有虚拟通道。
在一种实施性方式中,第一操作系统需要向第二操作系统发送数据,在通道列表里依次判断该通道是否为待释放通道,即FreeFlag是否为0xA5A5A5A5,如果不是的话再判断该通道是否是空闲通道,如果是空闲通道,把该通道的IdleFlag设置成0xA5A5A5A5,并发送数据找到该通道。
如果该通道的FreeFlag不是0xA5A5A5A5,继续判断通道列表里的下一个通道,判断该通道是否为待释放通道,即FreeFlag是否为0xA5A5A5A5,如果是的话说明该通道为待释放通道,也即寻找到了可用虚拟通道,不是的话再判断该通道是否是空闲通道,也即FreeFlag是否为0xA5A5A5A5,如果是的话说明该通道为空闲通道,也即寻找到了可用虚拟通道。如果不是的话,继续判断通道列表里的下一个通道,直至找到可用虚拟通道,或者,直至遍历完毕共享内存中的所有虚拟通道。
需要说明的是,在本实施例中,寻找可用虚拟通道的过程会加上第一操作系统和第二操作系统的互斥锁,避免出现不同任务同时申请可用虚拟通道导致的并发问题。同时,本实施例在发送数据前才会释放已经标记的待释放通道,通道的申请和释放都在具有数据交互需求的操作系统侧进行,程序上比较好控制。而且,在遍历的过程中每次只会释放一个待释放通道,而非一次性释放所有待释放通道,可以减少寻找可用虚拟通道的时间,提高数据交互的效率。
在一个示例性实施例中,共享内存包括多个虚拟通道,每个虚拟通道包括元数据区域和数据指针,数据指针用于索引多个虚拟通道共用的数据区域,元数据区域存储有第一标志位、第二标志位,第一标志位指示虚拟通道是否空闲,第二标志位指示虚拟通道是否为数据读取完成的待释放通道,第一操作系统在处理器的共享内存中寻找可用虚拟通道包括:第一操作系统遍历共享内存中的虚拟通道,并判断当前虚拟通道的第二标志位是否为第二预设值,其中,第二标志位为第二预设值指示虚拟通道为待释放通道;在当前虚拟通道的第二标志位为第二预设值的情况下,根据当前虚拟通道的数据指针确定当前虚拟通道占据的空间,并判断当前虚拟通道占据的数据空间是否大于等于第一操作系统所需数据空间;在当前虚拟通道占据的空间大于等于所需数据空间的情况下,将当前虚拟通道的第一标志位、第二标志位均置为初始值,并将当前虚拟通道确定为可用虚拟通道,其中,第一标志位为初始值指示虚拟通道空闲,第二标志位为初始值指示虚拟通道不是待释放通道。
图7是根据本申请实施例的虚拟通道的示意图二,如图7所示,本实施例将共享内存分为若干个虚拟通道,每个通道对应的内存大小是动态分配的,动态分配是指每个通道对应的内存大小、起始地址都是不固定的,使用的时候可以根据实际需要的内存大小去分配,使用完成释放分配的内存空间。
动态分配内存的通道包括元数据区域,多个通道的元数据区域构成通道列表,每个元数据区域存储有多个字段,包括,IdleFlag(第一标志位):表示通道是否空闲;FreeFlag(第二标志位):表示通道的数据区域的数据是否已经被读走;FullFlag(第三标志位):表示向通道的数据区域写数据是否完成;DataLen:表示发送数据的大小;pData:表示发送数据的首地址,即数据区域的首地址。
需要说明的是,动态分配的通道和静态分配的通道的差异在于,动态分配的通道中没有数据区域,数据区域存在于动态分配内存中,每个虚拟通道还包括数据指针,数据指针指向动态分配内存中的数据区域。
如图7所示,动态分配内存区会按照同样的大小m被划分为n个最小的分配单元,称为内存页,内存页的数目记为n,每个内存页的大小记为m个字节,动态分配内存映射表区会按照预设字节被划分成和内存页数相等的若干条记录,称为内存页记录,映射表中的每条内存页记录和内存块区中的内存页一一对应,映射表中的每条内存页记录中的内容表示对应的内存页是不是已被分配,0表示未被分配,非0表示已被分配。当需要发送数据的时候,根据需要发送数据的大小在动态分配内存区寻找连续的未被分配的内存页,同时把映射表中对应的内存页记录设置成非0,申请到的连续的内存页即为数据区域,同时把数据区域的首地址赋值给pData。
在一种实施性方式中,第一操作系统需要向第二操作系统发送数据,需要先在共享内存中找到一个空闲通道,即IdleFlag不等于0xA5A5A5A5的通道。可以在通道列表里依次判断该通道是否为待释放通道,即判断通道的FreeFlag是否为0xA5A5A5A5,如果是的话,根据pData字段指示的地址确定当前通道已申请到的连续内存页的大小,并判断连续内存页的大小是否满足第一操作系统写入数据所需数据空间大小,在满足的情况下,把该通道释放,即把该通道的IdleFlag、FullFlag和FreeFlag均设置成0,使得该通道变成空闲通道,也即寻找到了可用虚拟通道,把该通道的IdleFlag设置成0xA5A5A5A5,并发送数据到该通道的连续内存页中。
在一个示例性实施例中,在判断当前虚拟通道的第二标志位是否为第二预设值之后,该方法还包括:在当前虚拟通道的第二标志位不是第二预设值的情况下,判断当前虚拟通道的第一标志位是否为初始值;在当前虚拟通道的第一标志位为初始值的情况下,根据当前虚拟通道的数据指针确定当前虚拟通道占据的空间,并判断当前虚拟通道占据的数据空间是否大于等于第一操作系统所需数据空间;在当前虚拟通道占据的空间大于等于所需数据空间的情况下,将虚拟通道确定为可用虚拟通道。
在一种实施性方式中,第一操作系统需要向第二操作系统发送数据,在通道列表里依次判断该通道是否为待释放通道,即FreeFlag是否为0xA5A5A5A5,如果不是的话再判断该通道是否是空闲通道,如果是空闲通道,根据pData字段指示的地址确定当前通道已申请到的连续内存页的大小,并判断连续内存页的大小是否满足第一操作系统写入数据所需数据空间大小,在满足的情况下,把该通道的IdleFlag设置成0xA5A5A5A5,并发送数据找到该通道。
在一个示例性实施例中,在判断当前虚拟通道占据的数据空间是否大于等于第一操作系统所需数据空间之后,该方法还包括:当前虚拟通道占据的数据空间小于所需数据空间的情况下,判断共享内存中下一虚拟通道的第二标志位是否为第二预设值;在下一虚拟通道的第二标志位是第二预设值的情况下,根据当前虚拟通道的数据指针和下一虚拟通道的指针确定当前虚拟通道和下一虚拟通道占据的连续数据空间,并判断连续数据空间是否大于等于第一操作系统所需数据空间;在连续数据空间大于等于所需数据空间的情况下,将下一虚拟通道的第一标志位、第二标志位均置为初始值,并将下一虚拟通道确定为可用虚拟通道。
在一种实施性方式中,第一操作系统需要向第二操作系统发送数据,如果在通道列表里找到待释放通道,但是当前通道已申请到的连续内存页的大小不能满足第一操作系统写入数据所需数据空间大小,则继续遍历共享内存,在通道列表里继续找待释放通道,如果下一通道也为待释放通道,而且两个待释放通道已申请到的数据空间中的连续数据空间的大小可以满足第一操作系统写入数据所需数据空间大小,把下一通道也释放,即把下一通道的IdleFlag、FullFlag和FreeFlag均设置成0,使得下一通道变成空闲通道,也即寻找到了可用虚拟通道,把下一通道的IdleFlag设置成0xA5A5A5A5,并发送数据到可用虚拟通道的连续内存页中,需要说明的是,此时可用虚拟通道的元数据区域为下一通道的元数据区域,但是可用虚拟通道的元数据区域申请到的连续的内存页为第一操作系统写入数据所需数据空间大小,大于上一通道已申请的连续内存页的大小,小于等于两个相邻虚拟通道的连接内存页的大小。
在一个示例性实施例中,该方法还包括:在下一虚拟通道的第二标志位不是第二预设值、或者连续数据空间小于所需数据空间的情况下,继续遍历共享内存,直至找到大于等于所需数据空间的空闲连续数据空间,或者,直至遍历完毕共享内存中的所有虚拟通道。
例如,当前虚拟通道为待释放通道,在当前虚拟通道占据的数据空间小于所需数据空间,且下一虚拟通道不是待释放通道的情况下,可以继续遍历通道列表,判断第三个虚拟通道的第二标志位是不第二预设值的,直至找到多个目标待释放虚拟通道,其中,多个目标待释放通道已申请的数据空间中的连续数据空间大于等于所需数据空间。
再例如,若前虚拟通道和下一通道均是待释放通道,或者前虚拟通道和下一通道均是空闲通道,或者前虚拟通道和下一通道中的一个通道为待释放通道、另一个通道为空闲通道,但是当前虚拟通道和下一虚拟通道已申请的数据空间中的连续数据空间小于所需数据空间的情况下,可以继续遍历通道列表,直至找到多个目标虚拟通道,其中,多个目标通道中的通道为待释放通道或者空闲通道,多个目标通道构成的连续数据空间大于等于所需数据空间。
在一个示例性实施例中,共享内存的虚拟通道关联有第一标志位、第二标志位以及第三标志位,第一标志位指示虚拟通道是否空闲,第二标志位指示虚拟通道是否为数据读取完成的待释放通道,第三标志位指示虚拟通道是否为数据写入完成的通道,第一操作系统通过可用虚拟通道和第二操作系统进行数据交互包括:将可用虚拟通道的第一标志位设置为第一预设值,其中,第一标志位为第一预设值指示虚拟通道被占用;第一操作系统将目标数据写入可用虚拟通道的数据区,将第三标志位置为第三预设值,并向第二操作系统发送第一中断消息,其中,第三标志位为第三预设值指示虚拟通道为数据写入完成的通道;第二操作系统响应第一中断消息,从共享内存读取目标数据,并将第二标志位置为第二预设值,其中,第二标志位为第二预设值指示虚拟通道是待释放通道。
在一个示例性实施例中,第二操作系统响应第一中断消息,从共享内存读取目标数据包括:第二操作系统从共享内存中寻找第一标志位为第一预设值、第三标志位为第三预设值的通道,得到目标虚拟通道,并从目标虚拟通道读取目标数据。
在一个实施性方式中,把共享内存划分为若干虚拟通道,每个通道又设计了三个标志位,第一标志位为IdleFlag,第二标志位为FullFlag,第三标志位为FreeFlag,第一操作系统需要向第二操作系统发送数据,第一操作系统在寻找到空闲通道后,把需要发送的数据拷贝到通道对应的数据区域,然后设置FullFlag为0xA5A5A5A5,触发中断以通知第二操作系统读数据。
第二操作系统收到中断后,中断唤醒对应的读取数据任务,该任务中会依次扫描共享内存的所有的通道,判断该通道的IdleFlag和FullFlag是否为0xA5A5A5A5,如果是的话表示该通道的数据已经写入完成,第二操作系统侧可以读取了,否则继续判断下一个通道,直到判断完通道列表中的所有通道。第二操作系统数据读取完成后,会把该通道的FreeFlag设置成0xA5A5A5A5,标记该通道的数据已经被读取完成了,通道可以被释放。
需要说明的是,在相关技术中只设置一个标志位来表面通道是否空闲,第二操作系统申请空闲通道后需要把该通道的IdleFlag立即设置成0xA5A5A5A5,避免其他任务或者进程申请空闲通道的时候也申请了该通道,而第二操作系统检测到通道的IdleFlag为0xA5A5A5A5的时候,认为该通道的数据区域已经写入了数据,可能会立即读取该通道的数据,但是若此时第一操作系统还正在向通道的数据区域写数据,容易造成数据读写错误。
本实施例把通道是否空闲和向通道的数据区域写数据是否完成设计成了两个标志位:IdleFlag和FullFlag,第一操作系统申请空闲通道后把该通道的IdleFlag立即设置成0xA5A5A5A5,通道的数据区域写入完成数据后将FullFlag设置为0xA5A5A5A5,第二操作系统检测到通道的FullFlag为0xA5A5A5A5的情况下才读取数据,避免了数据读取错误现象的发生。
在本实施例中还提供了另一种通信方法,图8是根据本申请实施例的可选的通信方法的流程图,如图8所示,以Linux系统和RTOS系统进行交互为例介绍本实施例的通信方法:
Linux系统需要向RTOS系统发送数据,需要先在共享内存中找到一个空闲通道,在寻找空闲通道的开始前,Linux系统先申请添加互斥锁,其过程为:Linux系统使用自带的接口rt_mutex_timed_lock(&LinuxLock,100)申请加锁,判断申请互斥锁是否成功,如果锁被占有,说明有Linux系统的其他任务或者RTOS系统的任务也在申请空闲通道,睡眠等待100ms再次申请。rt_mutex_timed_lock(&LinuxLock,100)的接口返回值为0表示申请互斥锁成功,否则失败。
Linux系统申请互斥锁成功后,通过核间通信的方式发送中断消息通知RTOS系统申请互斥锁,RTOS系统在接收到中断消息之后,使用系统自带的接口xSemaphoreTake(RTOSLock,100)申请加锁,如果锁被占有,说明有Linux系统的其他任务或者RTOS系统的任务也在申请空闲通道,睡眠等待100ms再次申请,xSemaphoreTake(RTOSLock,100)的接口返回值为pdTRUE表示申请互斥锁成功,否则失败。
Linux系统通过核间通信发送申请互斥锁的结果给Linux系统,如果Linux互斥锁和RTOS系统互斥锁都申请成功了,表示本次两个操作系统对共享内存加锁成功了,Linux系统可以执行寻找空闲通道的操作,将空闲通道的标志位置为为非空闲,并释放互斥锁,否则本次两个操作系统对共享内存加锁失败,失败了可以睡眠一段时间后再重试申请互斥锁。
释放互斥锁的过程为,Linux系统先使用接口释放自己的互斥锁rt_mutex_unlock(&LinuxLock),然后通过核间通信的方式发送中断消息通知RTOS系统释放互斥锁,RTOS系统接收到中断消息后,使用接口xSemaphoreGive(RTOSLock)释放自己的互斥锁。
通过本实施例,Linux系统寻找空闲通道会先加上Linux系统自动的互斥锁,然后再通过核间通信的方式通知RTOS系统申请互斥锁,RTOS系统申请互斥锁成功的情况下,Linux系统寻找空闲通道,对找到的空闲通道设置非空,并释放Linux系统和RTOS系统的互斥锁,从而可以解决相关技术中异构双系统之间同时访问共享内存导致的并发冲突的问题,达到任意时刻只有一个操作系统的一个任务可以访问共享内存的某个虚拟通道,从而避免发生核间通信并发冲突的效果。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在本实施例中还提供了一种通信装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图9是根据本申请实施例的通信装置的结构示意图,应用于处理器,处理器上运行有第一操作系统和第二操作系统,如图9所示,该装置包括:
申请单元902,用于在第一操作系统需要与第二操作系统进行数据交互的情况下,控制第一操作系统和第二操作系统依次申请互斥锁。
寻找单元904,用于在第一操作系统和第二操作系统均申请互斥锁成功的情况下,控制第一操作系统在处理器的共享内存中寻找可用虚拟通道。
交互单元906,用于在共享内存中存在可用虚拟通道的情况下,第一操作系统和第二操作系统依次释放互斥锁,控制第一操作系统通过可用虚拟通道和第二操作系统进行数据交互。
在一个示例性实施例中,该装置还包括:反馈单元,用于在第一操作系统和第二操作系统均申请互斥锁成功的情况下,在第一操作系统和第二操作系统依次释放互斥锁之前,若第二操作系统在处理器的共享内存中寻找可用虚拟通道,响应第二操作系统的寻找操作,向第二操作系统反馈寻找失败的结果。
在一个示例性实施例中,申请单元902包括:第一申请模块,用于通过所述第一操作系统申请互斥锁;通知模块,用于控制所述第一操作系统在申请互斥锁成功的情况下,通过核间通信的方式通知所述第二操作系统申请互斥锁;第二申请模块,用于通过所述第二操作系统响应所述第一操作系统的通知,申请互斥锁,并通过核间通信的方式将申请结果发送至所述第一操作系统。
在一个示例性实施例中,所述装置还包括:第二申请单元,用于在所述第一操作系统申请互斥锁之后,在所述第一操作系统当前申请互斥锁失败的情况下,休眠第一预设时长,并在所述第一预设时长之后再次申请互斥锁,直至申请互斥锁成功,或者直至申请次数大于第一预设次数,其中,在所述申请次数大于所述第一预设次数的情况下,确定所述第一操作系统申请互斥锁失败。
在一个示例性实施例中,所述装置还包括:第三申请单元,用于在所述第二操作系统响应所述第一操作系统的通知,申请互斥锁之后,在所述第二操作系统当前申请互斥锁失败的情况下,休眠第二预设时长,并在所述第二预设时长之后再次申请互斥锁,直至申请互斥锁成功,或者直至申请次数大于第二预设次数,其中,在所述申请次数大于所述第二预设次数的情况下,确定所述第二操作系统申请互斥锁失败。
在一个示例性实施例中,第一预设时长和第二预设时长的差值大于时长阈值。
在一个示例性实施例中,所述装置还包括:释放单元,用于在通过核间通信的方式将申请结果发送至所述第一操作系统之后,在所述申请结果指示所述第二操作系统申请互斥锁失败的情况下,所述第一操作系统释放互斥锁。
在一个示例性实施例中,所述装置还包括:第四申请单元,用于在所述第一操作系统释放互斥锁之后,所述第一操作系统在第三预设时长之后再次申请互斥锁,直至申请次数大于第三预设次数,或者直至申请互斥锁成功,其中,在所述申请次数大于所述第三预设次数的情况下,确定所述第一操作系统申请互斥锁失败;所述第一操作系统在申请互斥锁成功的情况下,通过核间通信的方式通知所述第二操作系统申请互斥锁。
在一个示例性实施例中,交互单元906包括释放模块,用于控制所述第一操作系统释放互斥锁,并通过核间通信的方式通知所述第二操作系统释放互斥锁;控制所述第二操作系统响应所述第一操作系统的通知,释放互斥锁。
在一个示例性实施例中,所述第一操作系统通过调用自身配置的第一互斥锁申请接口执行申请互斥锁的操作,并通过调用自身配置的第一互斥锁释放接口执行释放互斥锁的操作;所述第二操作系统通过调用自身配置的第二互斥锁申请接口执行申请互斥锁的操作,并通过调用自身配置的第二互斥锁释放接口执行释放互斥锁的操作。
在一个示例性实施例中,所述共享内存的虚拟通道关联有第一标志位、第二标志位以及第三标志位,所述第一标志位指示虚拟通道是否空闲,所述第二标志位指示虚拟通道是否为数据读取完成的待释放通道,所述第三标志位指示虚拟通道是否为数据写入完成的通道,交互单元906包括交互模块,所述交互模块包括:第一置位模块,用于将所述可用虚拟通道的所述第一标志位设置为第一预设值,其中,所述第一标志位为所述第一预设值指示虚拟通道被占用;写入模块,用于通过所述第一操作系统将目标数据写入所述可用虚拟通道的数据区,将所述第三标志位置为第三预设值,并向所述第二操作系统发送第一中断消息,其中,所述第三标志位为所述第三预设值指示虚拟通道为数据写入完成的通道;读取模块,用于通过所述第二操作系统响应所述第一中断消息,从所述共享内存读取所述目标数据,并将所述第二标志位置为第二预设值,其中,所述第二标志位为所述第二预设值指示虚拟通道是所述待释放通道。
在一个示例性实施例中,所述读取模块用于控制所述第二操作系统从所述共享内存中寻找所述第一标志位为所述第一预设值、所述第三标志位为所述第三预设值的通道,得到目标虚拟通道,并从所述目标虚拟通道读取所述目标数据。
在一个示例性实施例中,所述共享内存包括多个虚拟通道,每个虚拟通道包括元数据区域和数据区域,所述元数据区域存储有第一标志位、第二标志位,所述第一标志位指示虚拟通道是否空闲,所述第二标志位指示虚拟通道是否为数据读取完成的待释放通道,寻找单元904包括:第一判断模块,用于通过所述第一操作系统遍历所述共享内存中的虚拟通道,并判断当前虚拟通道的所述第二标志位是否为第二预设值,其中,所述第二标志位为所述第二预设值指示虚拟通道为所述待释放通道;第二置位模块,用于在所述当前虚拟通道的所述第二标志位为所述第二预设值的情况下,将所述当前虚拟通道的所述第一标志位、所述第二标志位均置为初始值,并将所述当前虚拟通道确定为所述可用虚拟通道,其中,所述第一标志位为初始值指示虚拟通道空闲,所述第二标志位为初始值指示虚拟通道不是待释放通道。
在一个示例性实施例中,寻找单元904还包括:第二判断模块,用于在判断当前虚拟通道的所述第二标志位是否为第二预设值之后,在所述当前虚拟通道的所述第二标志位不是所述第二预设值的情况下,判断所述当前虚拟通道的所述第一标志位是否为初始值;第一确定模块,用于在所述当前虚拟通道的所述第一标志位为所述初始值的情况下,将所述虚拟通道确定为所述可用虚拟通道;第三判断模块,用于在当前虚拟通道的所述第一标志位不是所述初始值的情况下,判断所述共享内存中下一虚拟通道的所述第二标志位是否为所述第二预设值,在所述下一虚拟通道的所述第二标志位不是所述第二预设值的情况下,判断所述下一虚拟通道的所述第一标志位是否为所述初始值,直至找到所述可用虚拟通道,或者,直至遍历完毕所述共享内存中的所有虚拟通道。
在一个示例性实施例中,所述共享内存包括多个虚拟通道,每个虚拟通道包括元数据区域和数据指针,所述数据指针用于索引所述多个虚拟通道共用的数据区域,所述元数据区域存储有第一标志位、第二标志位,所述第一标志位指示虚拟通道是否空闲,所述第二标志位指示虚拟通道是否为数据读取完成的待释放通道,寻找单元904包括:第四判断模块,用于通过所述第一操作系统遍历所述共享内存中的虚拟通道,并判断当前虚拟通道的所述第二标志位是否为第二预设值,其中,所述第二标志位为所述第二预设值指示虚拟通道为所述待释放通道;第二确定模块,用于在所述当前虚拟通道的所述第二标志位为所述第二预设值的情况下,根据所述当前虚拟通道的数据指针确定所述当前虚拟通道占据的空间,并判断所述当前虚拟通道占据的数据空间是否大于等于所述第一操作系统所需数据空间;第三置位模块,用于在所述当前虚拟通道占据的空间大于等于所述所需数据空间的情况下,将所述当前虚拟通道的所述第一标志位、所述第二标志位均置为初始值,并将所述当前虚拟通道确定为所述可用虚拟通道,其中,所述第一标志位为初始值指示虚拟通道空闲,所述第二标志位为初始值指示虚拟通道不是待释放通道。
在一个示例性实施例中,寻找单元904包括:第五判断模块,用于在判断当前虚拟通道的所述第二标志位是否为第二预设值之后,在所述当前虚拟通道的所述第二标志位不是所述第二预设值的情况下,判断所述当前虚拟通道的所述第一标志位是否为初始值;第六判断模块,用于在所述当前虚拟通道的所述第一标志位为所述初始值的情况下,根据所述当前虚拟通道的数据指针确定所述当前虚拟通道占据的空间,并判断所述当前虚拟通道占据的数据空间是否大于等于所述第一操作系统所需数据空间;第三确定模块,用于在所述当前虚拟通道占据的空间大于等于所述所需数据空间的情况下,将所述虚拟通道确定为所述可用虚拟通道。
在一个示例性实施例中,寻找单元904包括:第七判断模块,用于在判断所述当前虚拟通道占据的数据空间是否大于等于所述第一操作系统所需数据空间之后,所述当前虚拟通道占据的数据空间小于所述所需数据空间的情况下,判断所述共享内存中下一虚拟通道的所述第二标志位是否为所述第二预设值;第四确定模块,用于在所述下一虚拟通道的所述第二标志位是所述第二预设值的情况下,根据所述当前虚拟通道的数据指针和所述下一虚拟通道的指针确定所述当前虚拟通道和所述下一虚拟通道占据的连续数据空间,并判断所述连续数据空间是否大于等于所述第一操作系统所需数据空间;第五确定模块,用于在所述连续数据空间大于等于所述所需数据空间的情况下,将所述下一虚拟通道的所述第一标志位、所述第二标志位均置为初始值,并将所述下一虚拟通道确定为所述可用虚拟通道。
在一个示例性实施例中,寻找单元904还包括:寻找模块,用于在所述下一虚拟通道的所述第二标志位不是所述第二预设值、或者所述连续数据空间小于所述所需数据空间的情况下,继续遍历所述共享内存,直至找到大于等于所述所需数据空间的空闲连续数据空间,或者,直至遍历完毕所述共享内存中的所有虚拟通道。
需要说明的是,上述各个单元或模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种电子设备,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子设备还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (21)

1.一种通信方法,其特征在于,应用于处理器,所述处理器上运行有第一操作系统和第二操作系统,所述方法包括:
在所述第一操作系统需要与所述第二操作系统进行数据交互的情况下,所述第一操作系统和所述第二操作系统依次申请互斥锁;
在所述第一操作系统和所述第二操作系统均申请互斥锁成功的情况下,所述第一操作系统在所述处理器的共享内存中寻找可用虚拟通道;
在所述共享内存中存在所述可用虚拟通道的情况下,所述第一操作系统和所述第二操作系统依次释放互斥锁,所述第一操作系统通过所述可用虚拟通道和所述第二操作系统进行数据交互;
所述共享内存包括多个虚拟通道,每个虚拟通道包括元数据区域和数据指针,所述数据指针用于索引所述多个虚拟通道共用的数据区域,所述元数据区域存储有第一标志位、第二标志位,所述第一标志位指示虚拟通道是否空闲,所述第二标志位指示虚拟通道是否为数据读取完成的待释放通道,所述第一操作系统在所述处理器的共享内存中寻找可用虚拟通道包括:
所述第一操作系统遍历所述共享内存中的虚拟通道,并判断当前虚拟通道的所述第二标志位是否为第二预设值,其中,所述第二标志位为所述第二预设值指示虚拟通道为所述待释放通道;
在所述当前虚拟通道的所述第二标志位为所述第二预设值的情况下,根据所述当前虚拟通道的数据指针确定所述当前虚拟通道占据的空间,并判断所述当前虚拟通道占据的数据空间是否大于等于所述第一操作系统所需数据空间;
在所述当前虚拟通道占据的空间大于等于所述所需数据空间的情况下,将所述当前虚拟通道的所述第一标志位、所述第二标志位均置为初始值,并将所述当前虚拟通道确定为所述可用虚拟通道,其中,所述第一标志位为初始值指示虚拟通道空闲,所述第二标志位为初始值指示虚拟通道不是待释放通道。
2.根据权利要求1所述的方法,其特征在于,在所述第一操作系统和所述第二操作系统均申请互斥锁成功的情况下,所述方法还包括:
在所述第一操作系统和所述第二操作系统依次释放互斥锁之前,若所述第二操作系统在所述处理器的共享内存中寻找可用虚拟通道,响应所述第二操作系统的寻找操作,向所述第二操作系统反馈寻找失败的结果。
3.根据权利要求1所述的方法,其特征在于,所述第一操作系统和所述第二操作系统依次申请互斥锁包括:
所述第一操作系统申请互斥锁;
所述第一操作系统在申请互斥锁成功的情况下,通过核间通信的方式通知所述第二操作系统申请互斥锁;
所述第二操作系统响应所述第一操作系统的通知,申请互斥锁,并通过核间通信的方式将申请结果发送至所述第一操作系统。
4.根据权利要求3所述的方法,其特征在于,在所述第一操作系统申请互斥锁之后,所述方法还包括:
在所述第一操作系统当前申请互斥锁失败的情况下,休眠第一预设时长,并在所述第一预设时长之后再次申请互斥锁,直至申请互斥锁成功,或者直至申请次数大于第一预设次数,其中,在所述申请次数大于所述第一预设次数的情况下,确定所述第一操作系统申请互斥锁失败。
5.根据权利要求4所述的方法,其特征在于,在所述第二操作系统响应所述第一操作系统的通知,申请互斥锁之后,所述方法还包括:
在所述第二操作系统当前申请互斥锁失败的情况下,休眠第二预设时长,并在所述第二预设时长之后再次申请互斥锁,直至申请互斥锁成功,或者直至申请次数大于第二预设次数,其中,在所述申请次数大于所述第二预设次数的情况下,确定所述第二操作系统申请互斥锁失败。
6.根据权利要求5所述的方法,其特征在于,所述第一预设时长和所述第二预设时长的差值大于时长阈值。
7.根据权利要求3所述的方法,其特征在于,在通过核间通信的方式将申请结果发送至所述第一操作系统之后,所述方法还包括:
在所述申请结果指示所述第二操作系统申请互斥锁失败的情况下,所述第一操作系统释放互斥锁。
8.根据权利要求7所述的方法,其特征在于,在所述第一操作系统释放互斥锁之后,所述方法还包括:
所述第一操作系统在第三预设时长之后再次申请互斥锁,直至申请次数大于第三预设次数,或者直至申请互斥锁成功,其中,在所述申请次数大于所述第三预设次数的情况下,确定所述第一操作系统申请互斥锁失败;
所述第一操作系统在申请互斥锁成功的情况下,通过核间通信的方式通知所述第二操作系统申请互斥锁。
9.根据权利要求1所述的方法,其特征在于,所述第一操作系统和所述第二操作系统依次释放互斥锁包括:
所述第一操作系统释放互斥锁,并通过核间通信的方式通知所述第二操作系统释放互斥锁;
所述第二操作系统响应所述第一操作系统的通知,释放互斥锁。
10.根据权利要求1所述的方法,其特征在于,所述第一操作系统通过调用自身配置的第一互斥锁申请接口执行申请互斥锁的操作,并通过调用自身配置的第一互斥锁释放接口执行释放互斥锁的操作;
所述第二操作系统通过调用自身配置的第二互斥锁申请接口执行申请互斥锁的操作,并通过调用自身配置的第二互斥锁释放接口执行释放互斥锁的操作。
11.根据权利要求1所述的方法,其特征在于,所述共享内存的虚拟通道关联有第一标志位、第二标志位以及第三标志位,所述第一标志位指示虚拟通道是否空闲,所述第二标志位指示虚拟通道是否为数据读取完成的待释放通道,所述第三标志位指示虚拟通道是否为数据写入完成的通道,所述第一操作系统通过所述可用虚拟通道和所述第二操作系统进行数据交互包括:
将所述可用虚拟通道的所述第一标志位设置为第一预设值,其中,所述第一标志位为所述第一预设值指示虚拟通道被占用;
所述第一操作系统将目标数据写入所述可用虚拟通道的数据区,将所述第三标志位置为第三预设值,并向所述第二操作系统发送第一中断消息,其中,所述第三标志位为所述第三预设值指示虚拟通道为数据写入完成的通道;
所述第二操作系统响应所述第一中断消息,从所述共享内存读取所述目标数据,并将所述第二标志位置为第二预设值,其中,所述第二标志位为所述第二预设值指示虚拟通道是所述待释放通道。
12.根据权利要求11所述的方法,其特征在于,所述第二操作系统响应所述第一中断消息,从所述共享内存读取所述目标数据包括:
所述第二操作系统从所述共享内存中寻找所述第一标志位为所述第一预设值、所述第三标志位为所述第三预设值的通道,得到目标虚拟通道,并从所述目标虚拟通道读取所述目标数据。
13.根据权利要求1所述的方法,其特征在于,所述共享内存包括多个虚拟通道,每个虚拟通道包括元数据区域和数据区域,所述元数据区域存储有第一标志位、第二标志位,所述第一标志位指示虚拟通道是否空闲,所述第二标志位指示虚拟通道是否为数据读取完成的待释放通道,所述第一操作系统在所述处理器的共享内存中寻找可用虚拟通道包括:
所述第一操作系统遍历所述共享内存中的虚拟通道,并判断当前虚拟通道的所述第二标志位是否为第二预设值,其中,所述第二标志位为所述第二预设值指示虚拟通道为所述待释放通道;
在所述当前虚拟通道的所述第二标志位为所述第二预设值的情况下,将所述当前虚拟通道的所述第一标志位、所述第二标志位均置为初始值,并将所述当前虚拟通道确定为所述可用虚拟通道,其中,所述第一标志位为初始值指示虚拟通道空闲,所述第二标志位为初始值指示虚拟通道不是待释放通道。
14.根据权利要求13所述的方法,其特征在于,在判断当前虚拟通道的所述第二标志位是否为第二预设值之后,所述方法还包括:
在所述当前虚拟通道的所述第二标志位不是所述第二预设值的情况下,判断所述当前虚拟通道的所述第一标志位是否为初始值;
在所述当前虚拟通道的所述第一标志位为所述初始值的情况下,将所述虚拟通道确定为所述可用虚拟通道;
在当前虚拟通道的所述第一标志位不是所述初始值的情况下,判断所述共享内存中下一虚拟通道的所述第二标志位是否为所述第二预设值,在所述下一虚拟通道的所述第二标志位不是所述第二预设值的情况下,判断所述下一虚拟通道的所述第一标志位是否为所述初始值,直至找到所述可用虚拟通道,或者,直至遍历完毕所述共享内存中的所有虚拟通道。
15.根据权利要求14所述的方法,其特征在于,在判断当前虚拟通道的所述第二标志位是否为第二预设值之后,所述方法还包括:
在所述当前虚拟通道的所述第二标志位不是所述第二预设值的情况下,判断所述当前虚拟通道的所述第一标志位是否为初始值;
在所述当前虚拟通道的所述第一标志位为所述初始值的情况下,根据所述当前虚拟通道的数据指针确定所述当前虚拟通道占据的空间,并判断所述当前虚拟通道占据的数据空间是否大于等于所述第一操作系统所需数据空间;
在所述当前虚拟通道占据的空间大于等于所述所需数据空间的情况下,将所述虚拟通道确定为所述可用虚拟通道。
16.根据权利要求15所述的方法,其特征在于,在判断所述当前虚拟通道占据的数据空间是否大于等于所述第一操作系统所需数据空间之后,所述方法还包括:
所述当前虚拟通道占据的数据空间小于所述所需数据空间的情况下,判断所述共享内存中下一虚拟通道的所述第二标志位是否为所述第二预设值;
在所述下一虚拟通道的所述第二标志位是所述第二预设值的情况下,根据所述当前虚拟通道的数据指针和所述下一虚拟通道的指针确定所述当前虚拟通道和所述下一虚拟通道占据的连续数据空间,并判断所述连续数据空间是否大于等于所述第一操作系统所需数据空间;
在所述连续数据空间大于等于所述所需数据空间的情况下,将所述下一虚拟通道的所述第一标志位、所述第二标志位均置为初始值,并将所述下一虚拟通道确定为所述可用虚拟通道。
17.根据权利要求16所述的方法,其特征在于,所述方法还包括:
在所述下一虚拟通道的所述第二标志位不是所述第二预设值、或者所述连续数据空间小于所述所需数据空间的情况下,继续遍历所述共享内存,直至找到大于等于所述所需数据空间的空闲连续数据空间,或者,直至遍历完毕所述共享内存中的所有虚拟通道。
18.一种通信装置,其特征在于,应用于处理器,所述处理器上运行有第一操作系统和第二操作系统,所述装置包括:
申请单元,用于在所述第一操作系统需要与所述第二操作系统进行数据交互的情况下,控制所述第一操作系统和所述第二操作系统依次申请互斥锁;
寻找单元,用于在所述第一操作系统和所述第二操作系统均申请互斥锁成功的情况下,控制所述第一操作系统在所述处理器的共享内存中寻找可用虚拟通道;
交互单元,用于在所述共享内存中存在可用虚拟通道的情况下,控制所述第一操作系统和所述第二操作系统依次释放互斥锁,控制所述第一操作系统通过所述可用虚拟通道和所述第二操作系统进行数据交互;
所述共享内存包括多个虚拟通道,每个虚拟通道包括元数据区域和数据指针,所述数据指针用于索引所述多个虚拟通道共用的数据区域,所述元数据区域存储有第一标志位、第二标志位,所述第一标志位指示虚拟通道是否空闲,所述第二标志位指示虚拟通道是否为数据读取完成的待释放通道,所述寻找单元包括:
第四判断模块,用于通过所述第一操作系统遍历所述共享内存中的虚拟通道,并判断当前虚拟通道的所述第二标志位是否为第二预设值,其中,所述第二标志位为所述第二预设值指示虚拟通道为所述待释放通道;
第二确定模块,用于在所述当前虚拟通道的所述第二标志位为所述第二预设值的情况下,根据所述当前虚拟通道的数据指针确定所述当前虚拟通道占据的空间,并判断所述当前虚拟通道占据的数据空间是否大于等于所述第一操作系统所需数据空间;
第三置位模块,用于在所述当前虚拟通道占据的空间大于等于所述所需数据空间的情况下,将所述当前虚拟通道的所述第一标志位、所述第二标志位均置为初始值,并将所述当前虚拟通道确定为所述可用虚拟通道,其中,所述第一标志位为初始值指示虚拟通道空闲,所述第二标志位为初始值指示虚拟通道不是待释放通道。
19.一种嵌入式系统,其特征在于,包括:芯片、至少两个操作系统,其中,所述芯片包括处理器,所述至少两个操作系统包括实时操作系统和非实时操作系统;
所述至少两个操作系统基于所述处理器运行,所述至少两个操作系统实现权利要求1至17中任意一项所述的通信方法。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至17任一项中所述的通信方法。
21.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至17任一项中所述的通信方法。
CN202311427550.7A 2023-10-31 2023-10-31 通信方法、装置、计算机可读存储介质以及电子设备 Active CN117149472B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311427550.7A CN117149472B (zh) 2023-10-31 2023-10-31 通信方法、装置、计算机可读存储介质以及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311427550.7A CN117149472B (zh) 2023-10-31 2023-10-31 通信方法、装置、计算机可读存储介质以及电子设备

Publications (2)

Publication Number Publication Date
CN117149472A CN117149472A (zh) 2023-12-01
CN117149472B true CN117149472B (zh) 2024-02-09

Family

ID=88901198

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311427550.7A Active CN117149472B (zh) 2023-10-31 2023-10-31 通信方法、装置、计算机可读存储介质以及电子设备

Country Status (1)

Country Link
CN (1) CN117149472B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114217979A (zh) * 2021-12-20 2022-03-22 金蝶软件(中国)有限公司 单据处理方法、装置、计算机设备和存储介质
CN116243995A (zh) * 2023-05-12 2023-06-09 苏州浪潮智能科技有限公司 通信方法、装置、计算机可读存储介质以及电子设备
CN116302617A (zh) * 2023-05-12 2023-06-23 苏州浪潮智能科技有限公司 共享内存的方法、通信方法、嵌入式系统以及电子设备
CN116541227A (zh) * 2023-07-05 2023-08-04 苏州浪潮智能科技有限公司 故障诊断方法、装置、存储介质、电子装置及bmc芯片

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114217979A (zh) * 2021-12-20 2022-03-22 金蝶软件(中国)有限公司 单据处理方法、装置、计算机设备和存储介质
CN116243995A (zh) * 2023-05-12 2023-06-09 苏州浪潮智能科技有限公司 通信方法、装置、计算机可读存储介质以及电子设备
CN116302617A (zh) * 2023-05-12 2023-06-23 苏州浪潮智能科技有限公司 共享内存的方法、通信方法、嵌入式系统以及电子设备
CN116541227A (zh) * 2023-07-05 2023-08-04 苏州浪潮智能科技有限公司 故障诊断方法、装置、存储介质、电子装置及bmc芯片

Also Published As

Publication number Publication date
CN117149472A (zh) 2023-12-01

Similar Documents

Publication Publication Date Title
CN110489213B (zh) 一种任务处理方法及处理装置、计算机系统
CN112099941B (zh) 实现硬件加速处理的方法、设备和系统
US7895260B2 (en) Processing data access requests among a plurality of compute nodes
US20090271796A1 (en) Information processing system and task execution control method
CN116302617B (zh) 共享内存的方法、通信方法、嵌入式系统以及电子设备
CN116243995B (zh) 通信方法、装置、计算机可读存储介质以及电子设备
CN116244229B (zh) 硬件控制器的访问方法、装置、存储介质和电子设备
KR20120086322A (ko) 가상 머신 저장 공간 관리를 위한 방법 및 시스템, 및 물리적 호스트
CN116541227B (zh) 故障诊断方法、装置、存储介质、电子装置及bmc芯片
WO2022001303A1 (zh) 一种锁管理方法、装置及设备
KR20160056382A (ko) 세마포어 기능을 갖는 시스템 온 칩 및 그것의 세마포어 구현 방법
CN116868167A (zh) 操作系统的运行控制方法和装置,以及嵌入式系统和芯片
CN112131176B (zh) 一种基于pcie的fpga快速局部重构方法
EP4184324A1 (en) Efficient accelerator offload in multi-accelerator framework
CN116830082A (zh) 嵌入式系统的启动控制方法和装置、存储介质和电子设备
CN115185880A (zh) 一种数据存储方法及装置
CN111290983A (zh) Usb传输设备及传输方法
CN117149472B (zh) 通信方法、装置、计算机可读存储介质以及电子设备
CN116868170A (zh) 嵌入式系统的运行方法和装置、嵌入式系统及芯片
CN116302141A (zh) 串口切换方法、芯片及串口切换系统
US9690619B2 (en) Thread processing method and thread processing system for setting for each thread priority level of access right to access shared memory
CN115878333A (zh) 进程组间的一致性判断方法、装置及设备
CN114675954A (zh) 任务调度方法及装置
CN117149471B (zh) 通信方法、装置、嵌入式系统、存储介质以及电子设备
KR100921504B1 (ko) 다중 프로세서를 구비한 시스템 온 칩 시스템 내의프로세서간 통신 장치 및 방법

Legal Events

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