一种多操作系统的资源分配方法和装置转让专利

申请号 : CN200910235916.4

文献号 : CN102053869B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郭武

申请人 : 杭州华三通信技术有限公司

摘要 :

本发明提供了一种多操作系统的资源分配方法和装置。主控操作系统在启动过程中,指定分配给主控操作系统的CPU核core0读取静态存储器中的资源分配表,触发资源分配表中分配给该主控操作系统的其它CPU核进行启动;主控操作系统完成启动后,core0触发资源分配表中分配给辅助操作系统的其中一个CPU核coreN开始启动,并将资源分配表信息发送给coreN;辅助操作系统在启动过程中,coreN按照资源分配表信息读取资源分配表,触发资源分配表中分配给该辅助操作系统的其它CPU核进行启动。本发明能够通过修改静态存储器中的资源分配表调整分配给各操作系统的硬件资源,提高了资源分配的可扩展性和灵活性。

权利要求 :

1.一种多操作系统的资源分配方法,其特征在于,所述多操作系统是独立运行的操作系统,该方法包括:主控操作系统在启动过程中,指定分配给主控操作系统的CPU核core0读取静态存储器中的资源分配表,触发资源分配表中分配给该主控操作系统的其它CPU核进行启动,其中,资源分配表中定义了分配给各个操作系统的硬件资源;

主控操作系统完成启动后,所述core0触发资源分配表中分配给辅助操作系统的其中一个CPU核coreN开始启动,并将资源分配表信息发送给所述coreN;

辅助操作系统在启动过程中,所述coreN按照所述资源分配表信息读取资源分配表,触发资源分配表中分配给该辅助操作系统的其它CPU核进行启动;

所述core0对用户输入的命令行进行解析,根据解析结果对静态存储器中的资源分配表进行修改;其中,所述命令行用于修改分配给所述主控操作系统或辅助操作系统的硬件资源;

在所述主控操作系统重新启动过程中,所述core0读取的资源分配表为修改后的资源分配表,发送的资源分配表信息为修改后的资源分配表信息。

2.根据权利要求1所述的方法,其特征在于,所述core0读取静态存储器中的资源分配表之前还包括:所述core0判断静态存储器中是否存在有效的资源分配表,如果是,则继续执行所述读取静态存储器中的资源分配表;否则将主控操作系统中缺省的资源分配表写入静态存储器中,继续执行所述读取静态存储器中的资源分配表。

3.根据权利要求2所述的方法,其特征在于,所述core0判断静态存储器是否存在有效的资源分配表包括:所述core0判断静态存储器中资源表存在标识是否为预设的有效值,如果是,则确定静态存储器存在有效的资源分配表;否则确定静态存储器不存在有效的资源分配表;

在将主控操作系统中缺省的资源分配表写入静态存储器中时,将所述资源表存在标识设置为预设的有效值。

4.根据权利要求1所述的方法,其特征在于,所述core0读取静态存储器中的资源分配表之后,还包括:将所述资源分配表中分配给主控操作系统的内存信息上报给所述主控操作系统的内存管理模块;

所述coreN读取资源分配表之后,还包括:将所述资源分配表中分配给辅助操作系统的内存信息上报给所述辅助操作系统的内存管理模块。

5.根据权利要求1所述的方法,其特征在于,所述触发资源分配表中分配给该主控操作系统的其它CPU核进行启动为:所述core0向资源分配表中分配给该主控操作系统的其它CPU核发送指示被分配给所述主控操作系统的核间消息;

所述触发资源分配表中分配给该辅助操作系统的其它CPU核进行启动为:所述coreN向资源分配表中分配给该辅助操作系统的其它CPU核发送指示被分配给所述辅助操作系统的核间消息。

6.根据权利要求1所述的方法,其特征在于,如果所述coreN确定存在没有启动的另一个辅助操作系统,则触发资源分配表中分配给所述另一个辅助操作系统的其中一个CPU核coreM开始启动,并将资源分配表信息发送给所述coreM;

所述coreM执行与所述coreN相同的操作。

7.一种多操作系统的资源分配装置,其特征在于,所述多操作系统是独立运行的操作系统,该装置包括:用于主控操作系统在启动过程中,指定分配给主控操作系统的CPU核core0读取静态存储器中的资源分配表,触发资源分配表中分配给该主控操作系统的其它CPU核进行启动的模块,其中,资源分配表中定义了分配给各个操作系统的硬件资源;

用于主控操作系统完成启动后,所述core0触发资源分配表中分配给辅助操作系统的其中一个CPU核coreN开始启动,并将资源分配表信息发送给所述coreN的模块;

用于辅助操作系统在启动过程中,所述coreN按照所述资源分配表信息读取资源分配表,触发资源分配表中分配给该辅助操作系统的其它CPU核进行启动的模块;

用于所述core0对用户输入的命令行进行解析,根据解析结果对静态存储器中的资源分配表进行修改的模块;其中,所述命令行用于修改分配给所述主控操作系统或辅助操作系统的硬件资源;在所述主控操作系统重新启动过程中,所述core0读取的资源分配表为修改后的资源分配表,发送的资源分配表信息为修改后的资源分配表信息。

8.根据权利要求7所述的装置,其特征在于,该装置还包括:

用于在所述core0读取静态存储器中的资源分配表之前,所述core0判断静态存储器中是否存在有效的资源分配表,如果是,则继续执行所述读取静态存储器中的资源分配表;

否则将主控操作系统中缺省的资源分配表写入静态存储器中,继续执行所述读取静态存储器中的资源分配表的模块。

9.根据权利要求7所述的装置,其特征在于,该装置还包括:

用于在所述core0读取静态存储器中的资源分配表之后,将所述资源分配表中分配给主控操作系统的内存信息上报给所述主控操作系统的内存管理模块的模块;

用于在所述coreN读取资源分配表之后,将所述资源分配表中分配给辅助操作系统的内存信息上报给所述辅助操作系统的内存管理模块的模块。

说明书 :

一种多操作系统的资源分配方法和装置

技术领域

[0001] 本发明涉及计算机技术领域,特别涉及一种多操作系统的资源分配方法和装置。

背景技术

[0002] 随着计算机技术的飞速发展,多核CPU目前得到了日益广泛的应用,许多操作系统(OS)都支持多个CPU核,比如Linux可以使用服务器消息块(SMB)方式支持多CPU核,多个CPU核共同支持一个操作系统。
[0003] 目前,基于多CPU核的产品,进一步提出了多核双系统(MCDS,Multi-Core Dual-System)技术,即不同CPU核上运行不同的操作系统,这种技术在软件特性上容易集成不同操作系统平台的业务功能,灵活和丰富了软件的系统架构,扩展了与第三方合作的领域和内容。MCDS系统模型可以如图1所示,OS1和OS2分别控制同一个CPU的不同CPU核,如图1中所示,OS1占用了20个CPU核,OS2占用了12个CPU核。两个操作系统分别拥有独立的内存区,独立运行互不干扰,同时通过共享内存区完成系统间的配置和业务交互。
[0004] 由于MCDS技术中两个操作系统运行在同一个CPU上面,则需要对硬件资源进行分配,使每个操作系统都拥有自己的硬件资源。其中,分配给各操作系统的硬件资源包括:CPU核以及内存。但是,目前业界尚没有提出任何关于MCDS技术的多操作系统资源分配方法。如果按照常规的分配方式,即为各操作系统固定分配硬件资源,则会存在缺乏可扩展性和灵活性的缺陷。例如,由于不同设备的CPU核和内存资源是不一样的,显然固定分配硬件资源的方式对于操作系统的设计带来一定困难;由于用户组网是千差万别的,在某种特殊应用场合下,固定分配的硬件资源可能对于一个操作系统并不足够使用,而对于另一个操作系统则出现空闲,显然,固定分配硬件资源的方式不能使设备的整体性能达到最优,缺乏灵活性。

发明内容

[0005] 有鉴于此,本发明提供了一种多操作系统的资源分配方法,以便于提高资源分配的可扩展性和灵活性。
[0006] 一种多操作系统的资源分配方法,该方法包括:
[0007] 主控操作系统在启动过程中,指定分配给主控操作系统的CPU核core0读取静态存储器中的资源分配表,触发资源分配表中分配给该主控操作系统的其它CPU核进行启动;
[0008] 主控操作系统完成启动后,所述core0触发资源分配表中分配给辅助操作系统的其中一个CPU核coreN开始启动,并将资源分配表信息发送给所述coreN;
[0009] 辅助操作系统在启动过程中,所述coreN按照所述资源分配表信息读取资源分配表,触发资源分配表中分配给该辅助操作系统的其它CPU核进行启动。
[0010] 一种多操作系统的资源分配装置,该装置包括:
[0011] 用于主控操作系统在启动过程中,指定分配给主控操作系统的CPU核core0读取静态存储器中的资源分配表,触发资源分配表中分配给该主控操作系统的其它CPU核进行启动的模块,其中,资源分配表中定义了分配给各个操作系统的硬件资源;
[0012] 用于主控操作系统完成启动后,所述core0触发资源分配表中分配给辅助操作系统的其中一个CPU核coreN开始启动,并将资源分配表信息发送给所述coreN的模块;
[0013] 用于辅助操作系统在启动过程中,所述coreN按照所述资源分配表信息读取资源分配表,触发资源分配表中分配给该辅助操作系统的其它CPU核进行启动的模块。
[0014] 由以上技术方案可以看出,在本发明中各操作系统在启动过程中实现的硬件资源分配都是以静态存储器中的资源分配表为依据的,这就使得修改各操作系统的硬件资源分配成为可能,只要对静态存储器中的资源分配表进行修改即可实现各操作系统的硬件资源分配。显然,这种方式可以适用于各种多核设备,即使各设备的CPU核和内存资源是千差万别的;并且可以根据实际的资源使用状况,对各操作系统的硬件资源进行调整使得设备的整体性能达到更优,相比较固定分配硬件资源的方式大大提高了资源分配的可扩展性和灵活性。

附图说明

[0015] 图1为MCDS系统模型示意图;
[0016] 图2为本发明提供的设备启动过程中实现双操作系统的资源分配流程图;
[0017] 图3为本发明提供的装置结构示意图。

具体实施方式

[0018] 为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0019] 本发明提供的方法主要包括:主控操作系统在启动过程中,指定分配给主控操作系统的CPU核core0读取静态存储器中的资源分配表,触发资源分配表中分配给该主控操作系统的硬件资源进行启动;主控操作系统完成启动后,所述core0触发资源分配表中分配给辅助操作系统的其中一个CPU核coreN开始启动,并将资源分配表信息发送给所述coreN;辅助操作系统在启动过程中,所述CoreN按照所述资源分配表信息读取资源分配表,触发资源分配表中分配给该辅助操作系统的硬件资源进行启动。
[0020] 上述方法可以应用于双操作系统,也可以应用于多操作系统。当应用于多操作系统时,辅助操作系统存在两个以上。一个辅助操作系统完成启动后,可以将资源分配表信息发送给下一个辅助操作系统触发下一个辅助操作系统进行启动,直至所有辅助操作系统都完成启动。
[0021] 本发明提供的方法中,各操作系统按照资源分配表进行硬件资源的分配。资源分配表中定义了分配给各操作系统独享的硬件资源,其中,硬件资源包括:内存和CPU核。
[0022] 该资源分配表可以以缺省资源分配表的形式在主控操作系统中设置,主控操作系统在出厂第一次启动时,由主控操作系统写入诸如闪存(Flash)等的静态存储器中。在除出厂第一次启动之后的网络设备启动都从静态存储器中读取资源分配表,并按照读取的资源分配表确定分配给主控操作系统核辅助操作系统的硬件资源。
[0023] 其中,缺省的资源分配表不能够被修改,可以用于恢复出厂设置时使用。用户能够对静态存储器中的资源分配表进行修改,修改后的资源分配表仍存储在静态存储器中,例如,用于可以通过命令行修改静态存储器中的资源分配表,调整资源分配表中分配给各操作系统的硬件资源。对于修改后的资源分配表只有在设备重新启动后才能够生效,即设备重新启动过程中,各操作系统从静态存储器中读取到的资源分配表为修改后的资源分配表,并按照该修改后的资源分配表进行硬件资源的初始化。
[0024] 下面以多核双操作系统为例,对本发明提供的方法进行详细描述。假设网络设备的多核CPU上存在两个操作系统OS1和OS2,其中,OS1为主控操作系统,OS2为辅助操作系统。该网络设备上电后默认从主控操作系统OS 1开始启动。则通过启动实现双操作系统的资源分配过程可以如图2所示,主要包括以下步骤:
[0025] 步骤201:网络设备上电后,OS1从默认的第一CPU核Core0开始启动。
[0026] 步骤202:Core0判断Flash中是否存在有效的资源分配表,如果否,执行步骤203;如果是,执行步骤204。
[0027] 在网络设备上电后,由主控操作系统开始启动。在一个网络设备上可以默认设置一个CPU核作为第一CPU核,该第一CPU核是指定分配给主控操作系统的,主控操作系统从该第一CPU核开始启动,从而完成后续的操作。
[0028] 为了方便对该实施例的理解,首先对资源分配表进行描述。在该实施例中,资源分配表中的内容为分配给OS1核OS2的资源,其数据结构可以如下所示:
[0029]
[0030] 由以上数据结构可以看出,分配给OS1的硬件资源都在资源分配表中定义,例如,定义了分配给各操作系统的CPU核、独享内存的数目、独享内存的地址和大小等。除此之外,在资源分配表中还存在一个资源表存在标识,该资源表存在标识用于指示静态存储器中是否存在有效的资源分配表。网络设备在出厂第一次启动过程中,将缺省的资源分配表写入静态存储器时,会将资源分配表的资源表存在标识初始化为一个固定值,在此以初始化为0xacacacac为例。网络设备上电后,OS1确定Flash中设定位置的资源表存在标识是否为0xacacacac,如果是,则确定Flash中存在有效的资源分配表,否则确定Flash中不存在有效的资源分配表。
[0031] 另外,在需要恢复设备出厂设置时,可以将Flash中的资源分配表的资源表存在标识进行修改,使得网络设备重新启动后,确定Flash中的资源表存在标识不是设定的0xacacacac,从而按照缺省的资源分配表进行启动。
[0032] 步骤203:Core0将OS1中缺省的资源分配表写入Flash的设定位置,并将资源分配表的资源表存在标识设置为初始值0xacacacac。
[0033] 如果确定Flash中的资源表标识不是0xacacacac,则说明本次启动是网络设备的出厂第一次启动或者要恢复出厂设置。
[0034] 步骤204:Core0从Flash中读取资源分配表,确定分配给OS 1的内存和CPU核,将分配给OS1的内存信息上报给OS1的内存管理模块,并启动除分配给OS1的其它CPU核。
[0035] 确定分配给OS1的内存和CPU核后,将分配给OS1的内存信息上报给OS1的内存管理模块,使得OS1的内存管理模块对分配给OS1的内存进行管理。并对分配给OS1的CPU核进行启动,Core0可以通过向分配给OS1的其它CPU核发送核间消息来触发其它CPU核的启动,另外,在该核间消息中还会指示其它CPU核分配给的操作系统信息,在此就是告知其它CPU核分配给了OS1。具体实现时,core0会通过核间消息向分配给OS 1的其它CPU核发送其它CPU核的启动地址,该启动地址的代码属于OS1的代码。
[0036] 其它CPU核启动时可以执行对自身寄存器进行初始化等操作,各CPU核具体启动的操作为现有技术,在此不再详述。
[0037] 至此OS1的启动过程完毕,OS1开始正常运行。
[0038] 步骤205:Core0在OS2启动时,将资源分配表信息发送给资源分配表中分配给OS2的其中一个CPU核coreN触发该coreN开始启动。
[0039] Core0确定已触发所有分配给OS1的CPU核启动后,可以触发资源分配表中分配给OS2的一个CPU核coreN启动,发送资源分配表信息的方式可以为将资源分配表信息通过核间消息发送给coreN。具体可以将资源分配表的地址发送给OS2,也可以将资源分配表直接发送给OS2。
[0040] 上述其中一个CPU核coreN可以是分配给OS2的任意一个CPU核,也可以默认是分配给OS2的CPU核中的第一个。
[0041] 步骤206:CoreN按照资源分配表信息读取资源分配表,确定分配给OS2的内存和CPU核,将分配给OS2的内存信息上报给OS2的内存管理模块,并启动分配给OS2的其它CPU核。
[0042] CoreN根据该资源分配表信息可以确定自身被分配的操作系统为OS2,在启动分配给OS2的其它CPU核时,也可以通过包含被分配的操作系统OS2信息的核间消息实现。
[0043] 至此OS2的启动过程完毕,OS2可以正常运行。
[0044] 本实施例中以两个操作系统为例,如果该网络设备中还存在其它操作系统,例如OS3,则在OS2完成启动后,coreN可以将资源分配表信息发送给OS3,触发OS3开始进行启动。OS3的启动过程与OS2相同,在此不再赘述。
[0045] 至此图2所示流程结束。
[0046] 假设该实施例中资源分配表中分配给OS1的硬件资源常常不能够满足实际应用需求,而OS2的硬件资源常常空闲,则可以通过输入命令行的方式对Flash中的资源分配表进行修改。输入的命令行可以是以下修改中的一种或任意组合:对分配给一个或多个操作系统的内存进行修改,对分配给一个或多个操作系统的CPU核进行修改。
[0047] 实现修改资源分配表的过程可以包括:OS1中的core0对用户输入的命令行进行解析,即解析该命令行是对哪个操作系统的硬件资源进行修改,以及修改哪些硬件资源;按照解析的结构对资源分配表进行修改。
[0048] 例如,用户输入的命令行为:mcds OS1 core 16,指示将OS1的CPU核修改为16个,则修改资源分配表的数据结构中的ulOwnCoreBitmap;输入命令行为mcds OS1 memory512,指示将OS1的内存修改为512M,则修改资源分配表的数据结构中的ulMaxMemNum。
[0049] 在很多情况下,是需要对多个操作系统的硬件资源同时进行修改的,例如,原来分配给OS1的CPU核为Core0至Core18,分配给OS2的CPU核为Core19至Core32,但根据实际情况来看,OS1的CPU核不足够使用,而OS2的CPU核出现空闲,则可以将修改分配给OS1的CPU核增多到20个,分配给OS2的CPU核减少到12个。
[0050] 具体命令行的方式还可以有很多种,例如具体修改其中一个或多个指定硬件资源给其中一个操作系统,修改其中一个操作系统的内存首地址等等,修改方式是灵活多样的,在此不再一一赘述。
[0051] 在对Flash中的资源分配表修改完毕后,对该网络设备进行重启,在重启过程中,重新执行图2中所示流程,此时各操作系统读取的资源分配表为修改后的资源分配表,从而实现对各操作系统独享的硬件资源的分配调整。
[0052] 以上是对本发明所提供的方法进行的详细描述,下面对本发明所提供的装置进行详细描述。本发明所提供的装置设置在CPU核中,如图3所示,该多操作系统的资源分配装置可以包括:资源表读取单元301和启动触发单元302。
[0053] 资源表读取单元301,用于在CPU核被分配给的操作系统启动过程中,读取静态存储器中的资源分配表,或者按照接收到的资源分配表信息读取资源分配表;
[0054] 启动触发单元302,用于按照资源表读取单元301读取的资源分配表,触发资源分配表中分配给操作系统的其它CPU核进行启动;在操作系统完成启动后,如果存在没有启动的辅助操作系统,则触发资源分配表中分配给该辅助操作系统的其中一个CPU核开始启动,并将资源分配表信息发送给该辅助操作系统的其中一个CPU核。
[0055] 其中,当资源表读取单元301具备读取静态存储器中的资源分配表的功能时,对应上述方法实施例中的core0,当资源表读取单元301具备按照接收到的资源分配表信息读取资源分配表的功能时,对应上述方法实施例中的coreN。
[0056] 启动触发单元302将资源分配表信息发送给该辅助操作系统的其中一个CPU核时,可以将资源分配表的地址发送给该辅助操作系统的其中一个CPU核,也可以将资源分配表直接发送给该辅助操作系统的其中一个CPU核。
[0057] 如果该装置所在的CPU核被分配给的操作系统为主控操作系统,则该装置还可以包括:缺省处理单元303,用于在资源表读取单元301读取静态存储器中的资源分配表之前,判断静态存储器中是否存在有效的资源分配表,如果是,则触发资源表读取单元301读取静态存储器中的资源分配表;否则将主控操作系统中缺省的资源分配表写入静态存储器中,触发资源表读取单元301读取静态存储器中的资源分配表。
[0058] 另外,该装置还可以包括:内存信息上报单元304,用于根据资源表读取单元301读取的资源分配表,将资源分配表中分配给操作系统的内存信息上报给操作系统的内存管理模块。
[0059] 具体地,启动触发单元302可以向资源分配表中分配给操作系统的其它CPU核发送指示被分配给操作系统的核间消息,以触发其它CPU核进行启动。
[0060] 在需要对分配给各操作系统的硬件资源进行修改时,该装置还可以包括:命令解析单元305和资源表修改单元306。
[0061] 命令解析单元305,用于对用户输入的命令行进行解析,该命令行用于修改分配给操作系统的硬件资源。
[0062] 资源表修改单元306,用于按照命令解析单元305的解析结果对静态存储器中的资源分配表进行修改。
[0063] 由以上描述可以看出,在本发明中各操作系统在启动过程中实现的硬件资源分配都是以静态存储器中的资源分配表为依据的,这就使得修改各操作系统的硬件资源分配成为可能,只要对静态存储器中的资源分配表进行修改即可实现各操作系统的硬件资源分配。显然,这种方式可以适用于各种多核设备,即使各设备的CPU核和内存资源是千差万别的;并且可以根据实际的资源使用状况,对各操作系统的硬件资源进行调整使得设备的整体性能达到更优,相比较固定分配硬件资源的方式大大提高了资源分配的可扩展性和灵活性。
[0064] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。