一种支持多核CPU多操作系统的方法与流程

文档序号:13948974阅读:3318来源:国知局
一种支持多核CPU多操作系统的方法与流程

本发明涉及嵌入式系统中需要多种功能特别是专业功能的智能网络设备的技术领域,具体涉及一种支持多核cpu多操作系统的方法。



背景技术:

随着现代网络对多功能的需求越来越高,现代网络设备经常需要附加各种专业功能,比如专业防火墙功能,专业加解密功能等,专业功能具有保密性和封闭性强的特点,因此这些功能的实现一般都是采用模块整合的方式,具体实现过程需要双方联合在同一个系统中进行开发,涉及到内核模块,业务处理模块。

但是,这种联合开发、模块整合的方式工作量大,开发效率低,易用性,可用性低,可移植性差,同时涉及到保密性时某一方又会顾虑重重。而多操作系统并存的方法可以很好地解决这些问题。这种多操作系统处理的方式由于最大限度地保留了各自模块的独立性,因此能提供很好的易用性,高可用性,可移植性还有兼容性。而目前多操作系统方案普遍采用的虚拟机方式,但这种方式嵌入式系统不通用,需要考虑针对对多功能网络设备的情况,开发出一种高易用性,高可用性而且开发效率高的方法。



技术实现要素:

本发明提出的一种支持多核cpu多操作系统的方法,可以解决现阶段这种整合专业功能的多功能网络设备存在的开发复杂、相互影响,出现故障排查困难并且各模块之间保密性不好保证的技术问题。

为实现上述目的,本发明采用了以下技术方案:

一种支持多核cpu多操作系统的方法,包括以下步骤:

步骤1:boot引导主核加载主操作系统;

步骤2:主操作系统根据配置引导需要唤醒的从核运行主操作系统并运行各种应用程序;

步骤3:主操作系统中负责管理设备的应用程序根据需要加载从操作系统映像并引导配置的从核运行从操作系统和相关应用程序;

步骤4:主从操作系统根据事先定义的方案建立通信方法。

进一步的,所述步骤1具体为:boot引导主核正常加载主操作系统,所有cpu从核都在boot中配置成sleeping状态。

进一步的,所述步骤2具体为:主核在主操作系统内核启动过程中唤醒所有的从核,使它们都运行在prom_boot_cpus_secondary函数中等待继续启动标记,然后根据设备系统的配置,主核为需要运行主操作系统的从核设置启动标记(ready),使之跟主核一起继续进行主操作系统的各种启动操作,而需要运行从操作系统的cpu核心则继续等待启动标记。

进一步的,所述步骤3具体为:主操作系统运行应用程序,其中负责设备管理的应用程序会加载从操作系统的内核映像、文件系统以及应用程序包,然后根据设备系统的配置,为需要运行从操作系统的所有cpu核心的主核心(从操作系统主核心,事先定义好)配置跳转入口,设置启动标记(ready),这样就使从操作系统主核心启动从操作系统,在其完成基本的系统初始化流程后再由之引导所有从操作系统从核心运行从操作系统,并最终运行相关应用程序。

由上可知,与现有技术相比较,优点如下:

1,主从操作系统分别运行在不同的cpu核心上,从物理上解决了不同功能系统的耦合问题;

2,保证了不同操作系统的相对独立性,有利于以后的设备维护和故障排查。

附图说明

图1是本发明中前部分流程说明图;

图2是本发明中后部分流程说明图。

具体实施方式

下面结合附图对本发明做进一步说明:

本实施例的一种支持多核cpu多操作系统的方法,具体步骤如下:

步骤1:boot引导第一个cpu核心(主核)正常加载主操作系统,所有cpu从核都在boot中配置成sleeping状态;

步骤2:主核在主操作系统内核启动过程中唤醒所有的从核,使它们都运行在prom_boot_cpus_secondary函数中等待继续启动标记,然后根据设备系统的配置,主核为需要运行主操作系统的从核设置启动标记(ready),使之跟主核一起继续进行主操作系统的各种启动操作,而需要运行从操作系统的cpu核心则继续等待启动标记;

步骤3:主操作系统运行应用程序,其中负责设备管理的应用程序会加载从操作系统的内核映像、文件系统以及应用程序包,然后根据设备系统的配置,为需要运行从操作系统的所有cpu核心的主核心(从操作系统主核心,事先定义好)配置跳转入口,设置启动标记(ready),这样就使从操作系统主核心启动从操作系统,在完成基本的系统初始化流程后再由从操作系统主核心来引导所有从操作系统从核心运行从操作系统,并最终运行相关应用程序;

步骤4:主从操作系统会在启动的过程中根据事先定义的方案建立通信方法,用于不同操作系统之间的信息交互。

如图1所示,图1是a、b、c三个步骤的流程图;

a,设备启动,由bootloader引导设备正常启动主操作系统,此过程只有cpu的主核(master,一般选择第一个core)在运行,由主核完成内核的基本配置,包括cpu小系统,内核初始化等;

b,启动到需要唤醒从核的地方_cpu_up,唤醒所有的从核,使它们都运行在prom_boot_cpus_secondary函数中等待继续启动标记,然后根据设备系统的配置,主核为需要运行主操作系统的从核设置启动标记(ready),使之跟主核一起继续进行主操作系统的各种启动操作,而需要运行从操作系统的cpu核心则继续等待启动标记;

c,负责管理主系统的应用程序根据配置加载并解析从操作系统系统(即专业功能模块系统)的内核镜像以及文件系统,接着为从操作系统系统分配保留的内存空间,然后为需要运行从操作系统的所有从核的的主核心(从操作系统主核心,事先定义好)设置加载入口点为从操作系统内核的kernel_entry,使相应的从核跳转到该入口点继续运行程序,其他的还在等待启动标记的从核则由从操作系统主核走从操作系统的smp流程来继续引导。

以下为加载从操作系统的示例代码:

需要启动从操作系统的从核在主操作系统中被“初次唤醒”然后运行到prom_boot_cpus_secondary函数中,然后一直处于for循环中等待一个ready信号,直到主操作系统调用set_guest_os_kernel_entry_and_wakeup,并为从操作系统主核配置执行的地址pkernelentry,从操作系统主核跳转到从操作系统系统的入口运行,而其他还在等待的从核则由从操作系统来继续唤醒启动。

如图2所示,d,双系统方案需要考虑到两个系统的通信方案,主要有串口交互(用于基于串口的调试,例如kgdb),网口交互(用于业务之间的数据通道),异常信息(主要是从系统发,主系统收),看门狗(用于检测从系统异常),系统时间等等。

所有这些都可以通过一个双方操作系统共享的内存区域来实现,附图2为一个内存分配示例。

下面再以网口来说明下双系统的具体设计:

基于共享内存的网口通信可称为虚拟网口virtualethernetcommunication(vec),需要开发一套驱动使之正常工作,此驱动必须为标准的linux网络驱动,具体实现上,为每个缓冲方准备一组固定大小为n的缓冲块,该网口的mtu即为n。所有报文,无论大小,都置于这个长度为n的缓冲块中。vec头记录了缓冲块的忙闲情况。

上述vec头定义了虚拟网口控制器的结构;vendor、device、revision、magic、signature五个字段可以在某种程度上指示当前数据结构是否合法,可作为一种合法性校验作基准;phys_base、phys_size指定了一个缓冲区域,双方使用该段内存作为交流区域。head/tail/size指明了当前缓冲块中的头尾指针,size必须小于等于phys_size,head/tail则必须在0-chunk_count之间。

structvec{

structvec_headerzido;

structvec_headerzodi;

unsignedcharzido_buf[max_chunks][chunk_size];

unsignedcharzodi_buf[max_chunks][chunk_size];

unsignedchardido_buf[max_chunks][chunk_size];

};

vec描述了一个虚拟网口设备,实现时,vec指向一个全局共享内存,对系统双方可见。

以上所述的实施例仅仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案作出的各种变形和改进,均应落入本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1