多线程加载版本程序的方法及装置转让专利

申请号 : CN200710094610.2

文献号 : CN100580629C

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李宏

申请人 : 上海华为技术有限公司

摘要 :

本发明提供一种多线程加载版本程序的方法,包括:进行上电初始化过程;为主线程加载版本程序;启动主线程的版本程序;使能所有的从线程,使从线程进入睡眠状态;为从线程加载版本程序;为从线程设置启动参数;唤醒从线程;其中,如果为从线程加载版本程序中的从线程是部分的从线程,为从线程设置启动参数中的从线程是所述部分的从线程,唤醒从线程中的从线程是所述部分的从线程,并且唤醒从线程在主线程的版本程序启动成功之前进行,则在主线程的版本程序启动成功之后,所述方法还包括:为剩余的从线程加载版本程序;为所述剩余的从线程设置启动参数;唤醒所述剩余的从线程。本发明还提供多线程加载版本程序的装置、从线程启动方法及装置。

权利要求 :

1.一种多线程加载版本程序的方法,其特征在于,包括:进行上电初始化过程;

为主线程加载版本程序;

启动主线程的版本程序;

使能所有的从线程,使从线程进入睡眠状态;

为从线程加载版本程序;

为从线程设置启动参数;

唤醒从线程;

其中,如果为从线程加载版本程序中的从线程是部分的从线程,为从线 程设置启动参数中的从线程是所述部分的从线程,唤醒从线程中的从线程是 所述部分的从线程,并且唤醒从线程在主线程的版本程序启动成功之前进行, 则在主线程的版本程序启动成功之后,所述方法还包括:为剩余的从线程加载版本程序;

为所述剩余的从线程设置启动参数;

唤醒所述剩余的从线程。

2.如权利要求1所述的多线程加载版本程序的方法,其特征在于,所述从 线程是所有的从线程,并且唤醒从线程在主线程的版本程序启动成功之前进 行。

3.如权利要求1所述的多线程加载版本程序的方法,其特征在于,所述从 线程是所有的从线程,并且使能所有从线程在主线程的版本程序启动成功之 后进行。

4.如权利要求1-3任意一项所述的多线程加载版本程序的方法,其特征在 于,为所有的从线程、部分的从线程或剩余的从线程加载一份版本程序,所 述所有的从线程、部分的从线程或剩余的从线程共享同一份版本程序。

5.如权利要求1-3任意一项所述的多线程加载版本程序的方法,其特征在 于,为所有的从线程、部分的从线程或剩余的从线程加载的版本程序不完全 相同。

6.如权利要求1所述的多线程加载版本程序的方法,其特征在于,唤醒从 线程之后,还包括:从线程运行版本程序;

如果有从线程需要更换版本程序,或者需要为一个或多个从线程更换版 本程序,则复位需要更换版本程序的从线程;

需要更换版本程序的从线程进入睡眠状态后,为需要更换版本程序的从 线程加载需要更换的版本程序。

7.如权利要求1所述的多线程加载版本程序的方法,其特征在于,唤醒从 线程之后,还包括:从线程运行版本程序;

如果有从线程需要更换版本程序,或者需要为一个或多个从线程更换版 本程序,则复位需要更换版本程序的从线程;

如果需要更换的版本程序已在之前为其他从线程加载,则为需要更换版 本程序的从线程指定所述之前加载的版本程序在内存中的位置。

8.一种从线程启动方法,其特征在于,包括:

上电后,如果收到使能命令,则进行资源的初始化,进入睡眠状态;

如果收到唤醒命令,则读取启动参数,所述启动参数是由主线程为从线 程设置的;

初始化版本程序,所述版本程序是由主线程为从线程加载的;

运行版本程序。

9.如权利要求8所述的从线程启动方法,其特征在于,运行版本程序后, 如果收到复位命令,则进行复位处理,之后进入睡眠状态。

10.一种多线程加载版本程序的装置,其特征在于,包括:初始化单元,用于进行上电初始化过程;

主线程版本程序加载单元,用于在所述初始化单元进行上电初始化过程 后,为主线程加载版本程序;

版本程序启动单元,用于启动所述主线程版本程序加载单元为主线程加 载的版本程序;

从线程使能单元,用于在所述版本程序启动单元启动主线程的版本程序 后,使能所有的从线程,使从线程进入睡眠状态;

从线程版本程序加载单元,用于在所述从线程使能单元使能所有的从线 程后,为从线程加载版本程序;

启动参数设置单元,用于在所述从线程版本程序加载单元为从线程加载 版本程序后,为从线程设置启动参数;

从线程唤醒单元,用于在所述启动参数设置单元设置启动参数后,唤醒 从线程。

11.如权利要求10所述的多线程加载版本程序的装置,其特征在于,所述 从线程唤醒单元唤醒从线程后,从线程运行版本程序;

所述装置还包括:复位单元,用于在所述从线程唤醒单元唤醒从线程、 从线程运行版本程序后,如果有从线程需要更换版本程序,或者需要为一个 或多个从线程更换版本程序,则复位需要更换版本程序的从线程,使从线程 进入睡眠状态。

12.如权利要求11所述的多线程加载版本程序的装置,其特征在于,在所 述复位单元复位需要更换版本程序的从线程、从线程进入睡眠状态后,所述 从线程版本程序加载单元为需要更换版本程序的从线程加载需要更换的版本 程序。

13.如权利要求11所述的多线程加载版本程序的装置,其特征在于,在所 述复位单元复位需要更换版本程序的从线程、从线程进入睡眠状态后,如果 需要更换的版本程序已在之前为其他从线程加载,则所述启动参数设置单元 为需要更换版本程序的从线程指定所述之前加载的版本程序在内存中的位 置。

14.一种从线程启动装置,其特征在于,包括:命令接收单元、初始化单元、启动参数读取单元及版本程序运行单元;

所述命令接收单元在上电后收到使能命令;

所述初始化单元在所述命令接收单元收到使能命令后,进行资源的初始 化;

所述命令接收单元在所述初始化单元进行资源的初始化过程后,收到唤 醒命令;

所述启动参数读取单元在所述命令接收单元收到唤醒命令后,读取启动 参数,所述启动参数是由主线程为从线程设置的;

所述初始化单元在所述启动参数读取单元读取启动参数后,进行版本程 序初始化过程,所述版本程序是由主线程为从线程加载的;

所述版本程序运行单元在所述初始化单元进行程序初始化过程后,运行 版本程序。

说明书 :

技术领域

本发明涉及通信技术,尤其涉及多线程加载版本程序的技术。

背景技术

随着电信系统向着高集成度、分布式处理的方向发展,电信系统对于单 块单板的处理能力、集成度的要求日益提高,这就催生了多核处理器在各种 功能处理单板中的应用。在现有的高集成度的多处理器单板中,由于不同的 处理器通过处理器外的总线相连,所以处理之间交换数据相对困难,这就使 得不同处理器协同完成一件工作的方式实现起来较为复杂、效率较低,而多 核处理器的应用正好可以解决这个问题。
多核处理器相对于现有的多处理器系统有着明显的区别,如图1所示, 多核处理器11包含N(N>1且为整数)个内核,每个内核包含n(n≥1且为 整数)个线程。其中,某一个核内的某一个线程(一般是第一个内核中的第 一个线程,在图1中即为内核0中的线程0)作为处理器11的主线程,其管 理处理器11的资源,并负责加载所有从线程的版本程序,其它线程作为从线 程,可以拥有自己独立的资源,并可以独立完成完整的业务处理。由于主线 程和从线程位于同一个多核处理器中,所以主线程和从线程之间可以方便的 共享内存、高速缓冲存储器(CACHE)等资源。正是由于多核处理器的这些 特点,使得多核处理器中的每一个核甚至每一个核中的线程(相当于虚拟 CPU)均可以加载运行不同的程序,协同完成同一功能,实现高效率地分布 式处理。
在实际应用中,线程进行业务处理之前,需要先进行加载版本程序等操 作。以单线程的处理器(只有一个线程的处理器)为例,单线程在进行业务 处理之前,需要先进行如图2所示的流程:
步骤S201:启动单线程。
步骤S202:初始化单线程和内存。
步骤S203:判断内存自检是否成功,如果是,转步骤S206,否则,转步 骤S204。
步骤S204:产生告警。
步骤S205:复位单板。
步骤S206:搬移BOOTROM程序,所述BOOTROM程序是存储在非易 失存储器中的引导程序。
步骤S207:重定位及初始化闪存(FLASH)。
步骤S208:映射内存的缺省启动地址。
步骤S209:初始化硬件。
步骤S210:初始化加载通道。
步骤S211:加载逻辑程序。
为便于下文描述,这里将步骤S201-S211称为上电初始化过程。
步骤S211之后,执行步骤S212:为单线程加载版本程序。
步骤S213:启动版本程序。
启动完成后,单线程就可以进行业务处理。同样,多核处理器中的线程 在进行业务处理之前,也需要进行加载版本程序等操作。但发明人在仔细检 索现有技术后发现,目前还没有一种可行的多线程加载版本程序的方案。

发明内容

本发明实施例要解决的技术问题在于提供一种多线程加载版本程序的方 法及装置,用以成功的为多核处理器中的多线程加载版本程序。
为解决上述技术问题,本发明提供一种多线程加载版本程序的方法的实 施例,包括:进行上电初始化过程;为主线程加载版本程序;启动主线程的 版本程序;使能所有的从线程,使从线程进入睡眠状态;为从线程加载版本 程序;为从线程设置启动参数;唤醒从线程;其中,如果为从线程加载版本 程序中的从线程是部分的从线程,为从线程设置启动参数中的从线程是所述 部分的从线程,唤醒从线程中的从线程是所述部分的从线程,并且唤醒从线 程在主线程的版本程序启动成功之前进行,则在主线程的版本程序启动成功 之后,所述方法还包括:为剩余的从线程加载版本程序;为所述剩余的从线 程设置启动参数;唤醒所述剩余的从线程。
本发明还提供一种从线程启动方法的实施例,包括:上电后,如果收到 使能命令,则进行资源的初始化,进入睡眠状态;如果收到唤醒命令,则读 取启动参数,所述启动参数是由主线程为从线程设置的;初始化版本程序, 所述版本程序是由主线程为从线程加载的;运行版本程序。
本发明还提供一种多线程加载版本程序的装置的实施例,包括:初始化 单元,用于进行上电初始化过程;主线程版本程序加载单元,用于在所述初 始化单元进行上电初始化过程后,为主线程加载版本程序;版本程序启动单 元,用于启动所述主线程版本程序加载单元为主线程加载的版本程序;从线 程使能单元,用于在所述版本程序启动单元启动主线程的版本程序后,使能 所有的从线程,使从线程进入睡眠状态;从线程版本程序加载单元,用于在 所述从线程使能单元使能所有的从线程后,为从线程加载版本程序;启动参 数设置单元,用于在所述从线程版本程序加载单元为从线程加载版本程序后, 为从线程设置启动参数;从线程唤醒单元,用于在所述启动参数设置单元设 置启动参数后,唤醒从线程。
本发明还提供一种从线程启动装置的实施例,包括:命令接收单元、初 始化单元、启动参数读取单元及版本程序运行单元;所述命令接收单元在上 电后收到使能命令;所述初始化单元在所述命令接收单元收到使能命令后, 进行资源的初始化;所述命令接收单元在所述初始化单元进行资源的初始化 过程后,收到唤醒命令;所述启动参数读取单元在所述命令接收单元收到唤 醒命令后,读取启动参数,所述启动参数是由主线程为从线程设置的;所述 初始化单元在所述启动参数读取单元读取启动参数后,进行版本程序初始化 过程,所述版本程序是由主线程为从线程加载的;所述版本程序运行单元在 所述初始化单元进行程序初始化过程后,运行版本程序。
在本发明多线程加载版本程序的实施例中,进行上电初始化过程之后, 首先为主线程加载版本程序,启动主线程的版本程序之后,再为从线程加载 版本程序,这样,从多核处理器的角度来看,先后为所有的线程都加载了版 本程序,达到了成功的为多线程加载版本程序的目的。

附图说明

图1为现有的多核处理器的示意图;
图2为现有的为单线程加载版本程序的方法实施例的流程图;
图3为本发明的第一个较佳实施例的流程图;
图4为本发明的第二个较佳实施例的流程图;
图5为本发明的第三个较佳实施例的流程图;
图6为本发明的从线程启动方法实施例的流程图。

具体实施方式

首先对本发明的多线程加载版本程序的方法实施例进行说明。所述方法 实施例包括:进行上电初始化过程;为主线程加载版本程序;启动主线程的 版本程序;使能(Enable)所有从线程;为从线程加载版本程序;为从线程设 置启动参数;唤醒从线程。
在上述方法实施例中,多核处理器上电后,主线程处于使能状态,从线 程处于去使能(Disable)状态,在主线程启动过程中,或者在主线程启动成 功后,使能从线程,从而使从线程由去使能状态转换为睡眠(Sleep)状态。 在从线程的版本程序加载完成后,由主线程唤醒从线程。从线程被唤醒后, 直接从主、从线程之间共享的内存中读取主线程配置的启动参数,之后根据 这些启动参数启动、运行版本程序。
为使本领域技术人员方便的实施本发明,下面介绍本发明的几个较佳实 施例。
在第一个较佳实施例中,先在启动主线程的版本程序的过程中为一部分 从线程加载版本程序,在主线程的版本程序启动成功后,再为剩余的一部分 从线程加载版本程序。具体的,如图3所示,包括:
步骤S301:启动主线程。
步骤S302:初始化主线程和内存。
步骤S303:判断内存自检是否成功,如果是,转步骤S306,否则,转步 骤S304。
步骤S304:产生告警。
步骤S305:复位单板。
步骤S306:搬移BOOTROM程序。
步骤S307:重定位及初始化闪存。
步骤S308:映射内存的缺省启动地址。
步骤S309:初始化硬件。
步骤S310:初始化加载通道。
步骤S311:加载逻辑程序。
同样,步骤S301-S311为上电初始化过程。
步骤S311之后,执行步骤S312:为主线程加载版本程序。
步骤S313:启动主线程的版本程序。
在主线程的版本程序启动成功之前,执行步骤S314-S317。
步骤S314:使能所有的从线程。
步骤S315:为部分从线程加载版本程序。在有些应用中,某些从线程进 行业务处理需要依赖另外一些从线程的启动,所以,在这个步骤中,加载版 本程序的从线程就可以是这些必须先启动的从线程。例如,假设内存中陆续 到达大量的信息需要从线程进行处理,对此,某些从线程可以先将这些信息 进行分类、排序等处理,之后再将这些信息分给其他从线程进行处理,进行 分类、排序等处理的从线程就是应该先启动的从线程。
步骤S316:为所述部分从线程设置启动参数。
步骤S317:唤醒所述部分从线程。
在主线程的版本程序启动成功之后,执行步骤S318-S320。
步骤S318:为剩余的从线程加载版本程序。
步骤S319:为所述剩余的从线程设置启动参数。
步骤S320:唤醒所述剩余的从线程。
在图3所示的实施例中,虽然将所有的从线程分成两个部分启动,但在 启动每一部分的从线程时,也可以对一部分的从线程再分批的进行启动,或 者说,每一部分的所有从线程可以不同时启动,也可以先后启动。
在第二个较佳实施例中,在启动主线程的版本程序的过程中,就为所有 的从线程加载版本程序。具体的,如图4所示,包括:
步骤S401:启动主线程。
步骤S402:初始化主线程和内存。
步骤S403:判断内存自检是否成功,如果是,转步骤S406,否则,转步 骤S404。
步骤S404:产生告警。
步骤S405:复位单板。
步骤S406:搬移BOOTROM程序。
步骤S407:重定位及初始化闪存。
步骤S408:映射内存的缺省启动地址。
步骤S409:初始化硬件。
步骤S410:初始化加载通道。
步骤S411:加载逻辑程序。
同样,步骤S401-S411为上电初始化过程。
步骤S411之后,执行步骤S412:为主线程加载版本程序。
步骤S413:启动主线程的版本程序。
在主线程的版本程序启动成功之前,执行步骤S414-S417。
步骤S414:使能所有的从线程。
步骤S415:为所有的从线程加载版本程序。
步骤S416:为所述所有的从线程设置启动参数。
步骤S417:唤醒所述所有的从线程。
同样,在图4所示的实施例中,所有的从线程可以同时启动,也可以不 同时启动。
在第三个较佳实施例中,在主线程的版本程序成功启动后,才为所有的 从线程加载版本程序。具体的,如图5所示,包括:
步骤S501:启动主线程。
步骤S502:初始化主线程和内存。
步骤S503:判断内存自检是否成功,如果是,转步骤S506,否则,转步 骤S504。
步骤S504:产生告警。
步骤S505:复位单板。
步骤S506:搬移BOOTROM程序。
步骤S507:重定位及初始化闪存。
步骤S508:映射内存的缺省启动地址。
步骤S509:初始化硬件。
步骤S510:初始化加载通道。
步骤S511:加载逻辑程序。
同样,步骤S501-S511为上电初始化过程。
步骤S511之后,执行步骤S512:为主线程加载版本程序。
步骤S513:启动主线程的版本程序。
在主线程的版本程序启动成功之后,执行步骤S514-S517。
步骤S514:使能所有的从线程。
步骤S515:为所有的从线程加载版本程序。
步骤S516:为所述所有的从线程设置启动参数。
步骤S517:唤醒所述所有的从线程。
同样,在图5所示的实施例中,所有的从线程可以同时启动,也可以不 同时启动。
上述所有的方法实施例可以由多种形式的装置实现,其中的一种多线程 加载版本程序的装置包括:初始化单元,用于进行上电初始化过程;主线程 版本程序加载单元,用于在所述初始化单元进行上电初始化过程后,为主线 程加载版本程序;版本程序启动单元,用于启动所述版本程序加载单元为主 线程加载的版本程序;从线程使能单元,用于在所述版本程序启动单元启动 主线程的版本程序后,使能所有的从线程;从线程版本程序加载单元,用于 在所述使能单元使能所有的从线程后,为从线程加载版本程序;启动参数设 置单元,用于在所述从线程版本程序加载单元为从线程加载版本程序后,为 从线程设置启动参数;从线程唤醒单元,用于在所述启动参数设置单元设置 启动参数后,唤醒从线程。
从线程唤醒单元可以在版本程序启动单元成功的启动主线程的版本程序 之前唤醒从线程,也可以在版本程序启动单元成功的启动主线程的版本程序 之后唤醒从线程。
具体的,在从线程使能单元使能所有的从线程之后,在版本程序启动单 元成功的启动主线程的版本程序之前,从线程版本程序加载单元可以为所有 的从线程加载版本程序,启动参数设置单元可以为所有的从线程设置启动参 数,从线程唤醒单元可以唤醒所有的从线程。
另外,在从线程使能单元使能所有的从线程之后,在版本程序启动单元 成功的启动主线程的版本程序之前,从线程版本程序加载单元可以为一部分 从线程加载版本程序,启动参数设置单元为这部分从线程设置启动参数,从 线程唤醒单元唤醒这部分从线程,在版本程序启动单元成功的启动主线程的 版本程序之后,从线程版本程序加载单元再为剩余的从线程加载版本程序, 启动参数设置单元为剩余的从线程设置启动参数,从线程唤醒单元唤醒剩余 的从线程。
此外,在版本程序启动单元成功的启动主线程的版本程序之后,从线程 使能单元使能所有的从线程,从线程版本程序加载单元为所有的从线程加载 版本程序,启动参数设置单元为所有的从线程设置启动参数,从线程唤醒单 元唤醒所有的从线程。
上述装置还可以包括复位单元,用于在所述从线程唤醒单元唤醒从线程、 从线程运行版本程序后,如果有从线程需要更换版本程序,或者需要为一个 或多个从线程更换版本程序,则复位需要更换版本程序的从线程。
在所述复位单元复位需要更换版本程序的从线程、从线程进入睡眠状态 后,所述从线程版本程序加载单元为需要更换版本程序的从线程加载需要更 换的版本程序。
在所述复位单元复位需要更换版本程序的从线程、从线程进入睡眠状态 后,如果需要更换的版本程序已在之前为其他从线程加载,则所述启动参数 设置单元为需要更换版本程序的从线程指定所述之前加载的版本程序在内存 中的位置,使所述从线程与其他从线程共享所述已经加载过的版本程序,而 不必再单独为所述从线程加载一份版本程序。
需要说明的是,上述装置的所有单元可以设置或应用在多核处理器或单 板中,这些单元在多核处理器或单板中的工作方式与在上述装置中的工作方 式相同,这里不再赘述。
本发明同时还提供了从线程启动方法实施例。如图6所示,包括:
步骤S601:上电后,如果收到使能命令,则进行简单初始化过程,进入 睡眠状态。简单初始化过程主要是指资源的初始化。
步骤S602:如果收到唤醒命令,则读取启动参数。启动参数可以是由主 线程为从线程设置的。
步骤S603:初始化版本程序。版本程序可以是由主线程为从线程加载的。
步骤S604:运行版本程序。
步骤S604之后,还包括:
步骤S605:如果收到复位命令后,则进行复位处理,之后进入睡眠状态, 转步骤S602。上面曾提到过,如果从线程需要更换版本程序,或者主线程需 要为从线程更换版本程序,则主线程需要复位从线程,具体的,主线程向从 线程发出复位命令,从线程收到复位命令后,进行复位处理,进入睡眠状态, 等待主线程的唤醒。
特别的,如果需要更换的版本程序是主线程已经为其他从线程加载过的 版本程序,则需要更换版本程序的从线程可以根据主线程修改的启动参数, 直接到启动参数中的地址中运行更换后的版本程序,此时,需要更换版本程 序的从线程已经和运行版本程序的其他从线程共享同一份版本程序。
上述所有的方法实施例可以由多种形式的装置实现,其中的一种从线程 启动装置包括:命令接收单元、初始化单元、启动参数读取单元及版本程序 运行单元;所述命令接收单元在上电后收到使能命令;所述初始化单元在所 述命令接收单元收到使能命令,进行简单初始化过程;所述命令接收单元在 所述初始化单元进行简单初始化过程后,收到唤醒命令;所述启动参数读取 单元在所述命令接收单元收到唤醒命令,读取启动参数;所述初始化单元在 所述启动参数读取单元读取启动参数后,进行程序初始化过程;所述版本程 序运行单元在所述初始化单元进行程序初始化过程后,运行版本程序。
上述装置还可以包括复位处理单元,用于在所述版本程序运行单元运行 版本程序后,收到复位命令并进行复位处理。当复位处理单元进行复位处理 后,所述命令接收单元可以等待接收唤醒命令。
需要说明的是,上述装置的所有单元可以设置或应用在多核处理器或单 板中,这些单元在多核处理器或单板中的工作方式与在上述装置中的工作方 式相同,这里不再赘述。
一般来说,为主线程和从线程加载的版本程序是不相同的,当然,如果 需要的话,或者是特殊情况下,主线程和从线程加载的版本程序也可以相同。 另外,为所有的从线程加载的版本程序可以是相同的,即,为所有的从线程 加载同一份版本程序,具体的,可以将所述版本程序加载到内存中,之后将 所有的从线程的启动参数中用于指向版本程序的地址都设置为所述版本程序 在内存中的地址,这样,所有的从线程都可以根据这个地址运行所述版本程 序。此外,为所有的从线程加载的版本程序可以不完全相同,特别的,为所 有的从线程加载的版本程序可以完全不相同,此时,不同的线程完成不同的 功能。如果从线程共享同一份版本程序,则既可以节约版本程序所占用的内 存,又可以减少加载的时间,提高加载速度;如果为不同的从线程加载不同 的版本程序,则可以使不同的从线程完成不同的功能,这就体现了多个线程 处理不同业务的优势。所以,无论是从线程共享同一份版本程序,还是为不 同的从线程加载不同的版本程序,都可以根据实际需要而定,各有优点。
在本发明的所有实施例中,如果有从线程需要更换版本程序,或者需要 为从线程更换版本程序,则无须主线程复位,或者说,无须整个处理器复位, 而只须需要更换版本程序的从线程复位即可,有利于从线程在线升级版本程 序的灵活实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普 通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润 饰,这些改进和润饰也应视为本发明的保护范围。