嵌入式系统启动优化方法及装置的制造方法

文档序号:10724634阅读:239来源:国知局
嵌入式系统启动优化方法及装置的制造方法
【专利摘要】本发明提供了嵌入式系统启动优化方法及装置,该方法包括:在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类是否为内部类;若是,则解析出当前的预加载类所属的宿主类;并确定出该宿主类的加载线程;在所述宿主类加载完之后,通过所述加载线程加载所述当前的预加载类。应用本发明,可避免内部类加载无基础的异常情况,保障嵌入式系统的预加载类的正常加载的同时,提高嵌入式系统运行的稳定性,从而提高用户体验。
【专利说明】
嵌入式系统启动优化方法及装置
技术领域
[0001] 本发明涉及操作系统技术领域,具体而言,本发明涉及嵌入式系统启动优化方法 及装置。
【背景技术】
[0002] 智能电视具有全开放式平台,搭载了操作系统,可以由用户自行安装和卸载软件、 游戏等第三方服务商提供的应用程序,拥有传统电视厂商所不具备的应用平台优势。
[0003] 目前,智能电视通常可以搭载Android(安卓)操作系统等嵌入式系统;在智能电视 完成嵌入式系统的启动之后,用户可以通过已安装的各种应用程序,实现网络搜索、视频点 播、数字音乐、网络新闻、网络视频电话等各种应用服务,带给用户更便捷的体验。
[0004] 实际应用中,嵌入式系统的启动流程包括如下基本步骤:系统上电、系统引导程 序、启动内核Kernel、创建初始化进程Ini t、创建系统运行所需软件库Runtime、创建守护进 程Demons、创建用户进程孵化器Zygote、创建虚拟机VM、创建系统服务进程System Server、 启动应用启动器Launcher。
[0005] 事实上,嵌入式系统的启动过程中,需要载入一系列基础类(本文中也可称为预加 载类)。通过Zygote进程将这些基础类作为嵌入式系统的预加载类载入后,这些预加载类将 常驻于内存。这样,后续应用或者服务启动时,就不需要再去加载这些预加载类,以此减少 应用或者服务的启动时间。
[0006]但是随着智能电视中安装的应用程序的增加,本发明的发明人发现,嵌入式系统 需要载入的基础类也越来越多,智能电视的启动速度越来越慢,降低了用户体验。
[0007] 虽然,现有提供了多线程并行加载的方案,以此加快启动速度。但是,本发明的发 明人发现,在应用现有并行加载方案中,经常发生加载异常,导致系统运行异常。
[0008] 因此,有必要提供一种能够保障预加载类的正常加载,提高嵌入式系统运行的稳 定性的启动优化方案。

【发明内容】

[0009] 针对上述现有技术存在的缺陷,本发明提供了嵌入式系统启动优化方法及装置, 用以保障嵌入式系统的预加载类的正常加载的同时,提高嵌入式系统运行的稳定性,从而 提尚用户体验。
[0010] 本发明提供了一种嵌入式系统启动优化方法,其特征在于,包括:
[0011] 在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类 是否为内部类;
[0012] 若是,则解析出当前的预加载类所属的宿主类;并确定出该宿主类的加载线程;
[0013] 在所述宿主类加载完之后,通过所述加载线程加载所述当前的预加载类。
[0014] 根据本发明的另一方面,还提供了一种嵌入式系统启动优化装置,包括:
[0015] 类检测单元,用于在采用多线程并行加载嵌入式系统启动所需的预加载类前,检 测当前的预加载类是否为内部类;
[0016] 类解析单元,用于若当前的预加载类为内部类,则解析出当前的预加载类所属的 宿主类;
[0017] 线程确定单元,用于若当前的预加载类为内部类,则确定当前的预加载类所属的 宿主类的加载线程;
[0018] 类加载单元,用于若当前的预加载类为内部类,则在当前的预加载类所属的宿主 类加载完之后,通过所述线程确定单元确定出的加载线程加载当前的预加载类。
[0019] 本发明的方案中,在加载嵌入式系统启动所需的预加载类之前,对预加载类的类 型进行检测,若预加载类为内部类,则需要在加载完该内部类所属的宿主类之后,通过该宿 主类的加载线程来加载其内部类。这样,可以保证宿主类与其内部类由同一线程加载,且避 免出现宿主类未加载而内部类先加载,致使内部类因无加载基础而加载失败的异常情况, 从而防止因预加载类的加载异常导致嵌入式系统后续的运行异常,提高了嵌入式系统运行 的稳定性。
[0020] 本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变 得明显,或通过本发明的实践了解到。
【附图说明】
[0021] 本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得 明显和容易理解,其中:
[0022] 图1为本发明实施例的嵌入式系统启动优化方法的流程示意图;
[0023] 图2为本发明实施例的嵌入式系统启动优化装置的结构示意图。
【具体实施方式】
[0024] 下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终 相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附 图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
[0025]本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式"一"、"一 个"、"所述"和"该"也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措 辞"包括"是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加 一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元 件被"连接"或"耦接"到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在 中间元件。此外,这里使用的"连接"或"親接"可以包括无线连接或无线耦接。这里使用的措 辞"和/或"包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
[0026]本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术 语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该 理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的 意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义 来解释。
[0027]本技术领域技术人员可以理解,这里所使用的"终端"、"终端设备"既包括无线信 号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件 的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备 可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示 器的蜂窝或其他通信设备;PCS(Personal Communications Service,个人通信系统),其可 以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人 数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日 历和/或GPS(Global Positioning System,全球定位系统)接收器;常规膝上型和/或掌上 型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其 他设备。这里所使用的"终端"、"终端设备"可以是便携式、可运输、安装在交通工具(航空、 海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球 和/或空间的任何其他位置运行。这里所使用的"终端"、"终端设备"还可以是通信终端、上 网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网 设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
[0028]本发明的发明人发现,现有智能电视的启动速度慢的主要原因在于:Zygote(用户 进程孵化器)创建后,采用单线程加载,即串行加载的方式来加载这些预加载类。事实上,嵌 入式系统所需加载的预加载类往往有数百上千,若以单任务循环顺序加载嵌入式系统中所 有预加载类,不仅耗费时间长;而且,对于多核CPU来说,加载过程中仅仅使用了一个内核, 实际上造成了其他内核的浪费。而实际应用中,Zygote加载完预加载类之后,System Server才能进行后续的操作来完成嵌入式系统的启动。因此,预加载类的加载速度限制了 嵌入式系统的启动速度。
[0029] 故而本发明的发明人考虑,可以根据嵌入式系统CPU(Central Processing Unit, 中央处理器)的核数,启动多线程;之后,采用多线程并行加载嵌入式系统所需要的预加载 类。这样,以并行的方式加载预加载类,相比现有单线程加载的方式,可以提高预加载类的 加载速度,从而提高嵌入式系统的启动速度。
[0030]进一步地,本发明的发明人发现,嵌入式系统所需加载的预加载类中有些预加载 类存在内部类(inner class)。实际应用中,java语言中载入一个类时,确定类的信息的标 准格式:
[0031 ] packagel[.package2···].classname$subclassname〇
[0032] 其中,classname为宿主类的名称,subclassname为宿主类的内部类的名称。这样, 系统会按照packagel/package2/ ·· /packageN/class,找到类及其内部类,并加载到内存 中。
[0033]实际应用中,可以将嵌入式系统所需加载的预加载类划分为三种:包括内部类的 预加载类、作为内部类而存在的预加载类、以及不包括内部类且不作为内部类而存在的预 加载类。为了便于描述,本文可以将包括内部类的预加载类、以及不包括内部类且不作为内 部类而存在的预加载类,均称为宿主类。也就是说,对于有些宿主类,其包括内部类,如表1 所示,编号37-41的预加载类是编号36的预加载类的内部类;编号36的预加载类为编号37-41的预加载类所属的宿主类(host class)。而对于有些宿主类其不包括内部类,比如,编号 34、35、42-44的预加载类为不包括内部类的宿主类。
[0034]表1预加载类配置文件
[0037] 考虑到,实际应用中,内部类的加载会依赖其宿主类的加载,即必须在宿主类加载 完成后才能加载该宿主类的内部类,否则,内部类的加载会因为无加载基础而加载失败,导 致后续系统运行发生异常。因此,若采用多线程并行加载预加载类,有可能会发生下面的情 况从而导致加载失败:线程A正在开始加载宿主类X,但是没有加载完成。这时线程B也开始 加载宿主类X的内部类XI。这时就会发生加载异常,导致系统运行异常。
[0038] 为了避免上述情况的发生,本发明的发明人考虑,在加载预加载类的之前,可以对 当前的预加载类进行检测,判断当前的预加载类是否为内部类,如果是,则确定其所属宿主 类的线程,在该线程完成宿主类的加载之后,再来加载该内部类,以此保证一个宿主类以及 该宿主类的所有内部类都由一个线程加载,且按照先宿主后内部的顺序完成内部类的正常 加载,从而保障系统的正常运行。
[0039]下面将结合附图来详细说明本发明的技术方案。
[0040]实际应用中,本发明提供的嵌入式系统的启动优化方案中,在嵌入式系统启动的 初始阶段,需要进行系统上电、系统引导程序、启动内核(Kernel)、以及创建初始化进程 (Init)。之后,可以通过创建的初始化进程来创建Zygote(孵化器)进程。而且,通过初始化 进程还可以创建Runtime(系统运行所需软件库)、以及Daemon(守护进程)。
[0041] Zygote进程在创建之后,可以创建VM(Virtual Memory,虚拟存储器),并且在创建 的VM启动时赋予各种参数。比如,一般情况下一个应用程序加载的内存不能超过16mb,因 此,通过Zygote进程可以设置heapsize参数为16mb来。其中,heapsize参数表示单个进程可 用的最大内存。Zygote进程创建并启动VM虚拟机之后,可以为java的类注册JNI( Java Native Interface,Java本地接口)函数,以便Zygote进程能够调用Java代码。进而加载嵌 入式系统所需的java类以及一些嵌入式系统资源。
[0042]实际应用中,嵌入式系统所需的预加载类往往具有一千多个,并且存在大量的加 载时间超过1250微秒的预加载类。若按照现有单线程加载这些预加载类,将会耗费大量的 时间,严重影响嵌入式系统的启动时间。
[0043] 而本发明的发明人发现,实际应用中,随着多核技术的发展,目前的智能终端可以 在一枚处理器中集成两个或多个完整的计算引擎(内核)。因此,本发明的发明人考虑可以 通过划分任务,使得线程应用能够充分利用多个执行内核,并可在特定的时间内执行更多 任务。因此,本发明的方案中,通过Zygote进程加载预加载类之前,可先根据中央处理器的 核数,启动多个线程来并行加载预加载类,提高系统启动速度。
[0044] 为了避免多线程并行加载时出现宿主类未加载而内部类先加载,致使内部类因无 加载基础而加载失败的异常情况,本发明提供了一种嵌入式系统启动优化方法,其具体流 程如图1所示,可以包括如下步骤:
[0045] S101:在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预 加载类是否为内部类,若是,则执行步骤S102;若否,执行步骤S104。
[0046] 考虑到,实际应用中,含有嵌入式系统所有预加载类的名单的预加载类配置文件 中,如表1所示,可以将预加载类逐行记录;对于每个宿主类,其内部类将在宿主类的记录之 后连续记录。其中,预加载类可按照预设的格式进行记录,比如,〈宿主类>$〈内部类〉;或者 [任意多个字符Nl]$[任意多个字符N2],其中,N1表示宿主类,N2表示内部类。对于内部类, 其在内部类位置上往往记录了该内部类的名称,在宿主类位置上记录了所属宿主类的名 称;而对于宿主类,其在内部类位置上并没有记录,即在内部类位置上对应记录的内容为 空。
[0047] 因此,本发明实施例中,在采用多线程并行加载嵌入式系统启动所需的预加载类 前,可以针对当前的预加载类,按照预设的解析格式,解析当前的预加载类,以获取当前的 预加载类在内部类位置上对应记录的内容。
[0048] 继而,检测当前的预加载类在内部类位置上对应记录的内容是否为空;若是,则确 定当前的预加载类为宿主类,执行步骤S104;否则,确定当前的预加载类为内部类,执行步 骤S102。其中,预设的解析格式中包括宿主类位置和内部类位置,宿主类位置与内部类位置 之间可以设有间隔符。
[0049]例如,在嵌入式系统启动中,Zygote进程可以按序读取预加载类配置文件中的预 加载类N;按照〈宿主类>$〈内部类〉的格式解析当前待加载的预加载类N,检测当前的预加载 类N是否为内部类。
[0050] 例如,〈宿主类>$〈内部类〉的格式中,宿主类记录为HC,内部类记录为1C,若检测当 前的预加载类N中,1C为空,则说明当前的预加载类N不是内部类;若检测当前的预加载类N 中,1C不为空,则说明当前的预加载类N是内部类。
[0051] 或者,将当前的预加载类N与预设的格式[N1]$[N2]进行匹配,如果与[N1]$[N2]匹 配成功,则该类为内部类;否则,该类为宿主类。
[0052] 若确定当前的预加载类N为宿主类,则执行步骤S104;若确定当前的预加载类N为 内部类,则执行步骤S102。
[0053] S102:若当前的预加载类是内部类,则解析出当前的预加载类所属的宿主类;并确 定出该宿主类的加载线程。
[0054] 本发明的方案采用多线程并行加载预加载类,为保证内部类的加载存在加载基 础,可以让宿主类与其内部类由同一个线程来加载,且在该线程加载宿主类之后,才加载其 内部类。
[0055] 因此,本发明实施例中,在确定当前的预加载类为内部类之后,需要确定其所属宿 主类的加载线程,并将宿主类的加载线程作为当前的预加载类的加载线程。
[0056] 具体地,若通过步骤S101检测当前的预加载类,确定当前的预加载类是内部类,则 可以按照预设的解析格式,解析当前的预加载类,以获取其在宿主类位置上对应记录的内 容;将获取的内容确定为当前的预加载类所属的宿主类。
[0057] 接上例,〈宿主类>$〈内部类〉的格式中,宿主类记录为HC,内部类记录为1C,若检测 当前的预加载类N中,1C不为空,则可以解析获取当前的预加载类N中HC所对应的内容,并将 获取的内容确定为当前的预加载类N所属的宿主类。
[0058]实际应用中,若预加载类配置文件严格按照要求,在记录宿主类之后,紧接着记录 宿主类的内部类,则在确定当前的预加载类之后,也可以从预加载类配置文件中确定上一 次检测为宿主类的预加载类,作为当前的预加载类所属的宿主类。
[0059] 在确定出作为内部类的当前的预加载类所属的宿主类之后,确定出宿主类的加载 线程。具体地,可以查找出当前空闲的线程,并确定为该宿主类的加载线程;或者,将宿主类 所对应的预设的线程确定为该宿主类的加载线程;或者,将当前正加载宿主类的线程确定 为该宿主类的加载线程。
[0060] 其中,宿主类所对应的预设的线程,可以是指在Zygote进程加载预加载类之前预 先针对系统启动所需的宿主类进行对应设置的线程。
[0061] 考虑到,通过多线程来并行加载嵌入式系统所需的预加载类,将可能面临预加载 类的分配问题,即预加载类由哪个进程来执行的问题。由于实际应用中,嵌入式系统所需的 预加载类中存在一些相互依赖的预加载类。例如,预加载类A与预加载类B之间存在依赖关 系,即如果要加载预加载类A必须加载预加载类B。
[0062] 因此,为了避免预加载类之间的相互影响,在进行加载之前,可以预先对预加载类 配置文件中的部分预加载类进行分组,以使得群组中的预加载类与其它群组中的预加载类 互不依赖。具体地,在获取中央处理器的核数之后,可以读取预加载类配置文件,从中获取 所有的宿主类;并根据获取的核数,将获取的所有的宿主类划分到相应数量的群组中。其 中,群组中的预加载类与其它群组中的预加载类互不依赖。这样,在嵌入式系统启动过程 中,可以根据中央处理器的核数,启动相应数量的线程,分别对应不同的群组,用于加载所 对应的群组中的预加载类。宿主类所对应的预设的线程为宿主类所属群组所对应的线程。 [00 63] 其中,中央处理器CPU的核数可以通过读取系统文件cat/proc/cpuinfo,过滤其中 的processor字段来获取。例如,如果嵌入系统中有两个核,则通过上述方法过滤过得到的 结果将为:
[0064] processor:0
[0065] processor:1
[0066] 例如,在中央处理器的核数具体为4个的情况下,可以将嵌入式系统的预加载类配 置文件中所有的宿主类划分到4个群组中。这样,后续在加载预加载类的过程中,可以通过4 个线程,并行加载各自对应的群组中的预加载类,宿主类的加载线程为其所属群组所对应 的线程。
[0067] S103:在宿主类加载完之后,通过宿主类的加载线程加载当前的预加载类。
[0068] 实际应用中,含有嵌入式系统所有预加载类的名单的预加载类配置文件中每个宿 主类的内部类连续记录。因此,正常情况下会先读取宿主类,后读取该宿主类的内部类。这 样,在完成宿主类的加载之后才会进行该宿主类的内部类的读取、检测、加载等操作。然而, 由于内部类的加载依赖其宿主类的加载,因此,若出现先读取某一宿主类的内部类,后读取 该内部类所属宿主类的异常情况,在确定内部类所属宿主类的加载线程之后,需要等待由 该线程加载宿主类结束之后,才能加载该内部类,以避免系统运行发生异常。
[0069]具体地,为了保证内部类的加载存在加载基础,在通过步骤S102确定出当前的预 加载类所属宿主类,以及宿主类的加载线程之后,可以检测宿主类的加载线程是否已经完 成宿主类的加载,在宿主类加载完之后,通过该加载线程加载当前的预加载类宿主类的内 部类,即宿主类的内部类。
[0070]实际应用中,完成当前的预加载类的加载之后,可以读取预加载类配置文件中的 下一个待加载的预加载类,执行步骤S101;若当前的预加载类为预加载类配置文件中最后 一个预加载类,则可以通过系统服务进程System Server的创建、应用启动器Launcher的启 动等操作,来完成嵌入式系统的启动。
[0071] S104:若待加载的预加载类不是内部类,则确定当前的预加载类为宿主类,确定出 该宿主类的加载线程,通过确定出的加载线程加载当前的预加载类。
[0072] 本发明实施例中,若通过步骤S101检测当前的预加载类,确定当前的预加载类不 是内部类,则说明当前的预加载类为包括内部类的宿主类,或者不包括内部类且不作为内 部类存在的预加载类。本文中,可以将包括内部类的预加载类、以及不包括内部类且不作为 内部类而存在的预加载类,均称为宿主类。因此,本文中,若确定当前的预加载类不是内部 类,则可以确定当前的预加载类为宿主类。
[0073] 为了完成嵌入式系统的启动,在确定当前的预加载类为宿主类之后,可以继而确 定宿主类的加载线程。具体地,可以查找出当前空闲的线程,并确定为该宿主类的加载线 程;或者,将宿主类所对应的预设的线程确定为该宿主类的加载线程;或者,将当前正加载 宿主类的线程确定为该宿主类的加载线程。
[0074]其中,宿主类所对应的预设的线程,可以是指在Zygote进程加载预加载类之前预 先针对系统启动所需的宿主类进行对应设置的线程。具体地,根据中央处理器的核数,将所 有的宿主类划分到相应数量的群组中。其中,群组中的预加载类与其它群组中的预加载类 互不依赖。这样,在嵌入式系统启动过程中,可根据中央处理器的核数,启动相应数量的线 程,分别对应不同的群组,用于加载所对应的群组中的预加载类。因此,可以直接查找出该 预加载类所在的群组,将查找出的群组所对应的线程作为当前的预加载类的加载线程;并 通过确定出的加载线程加载当前的预加载类。
[0075]实际应用中,完成当前的预加载类的加载之后,可以读取预加载类配置文件中的 下一个待加载的预加载类,执行步骤S101。若当前的预加载类为预加载类配置文件中最后 一个预加载类,则可以通过系统服务进程System Server的创建、应用启动器Launcher的启 动等操作,来完成嵌入式系统的启动。
[0076] 本发明实施例中,通过步骤S103和/或步骤S104,加载完嵌入系统所需的所有预加 载类之后,可以进一步地通过Zygote进程创建嵌入式系统的系统服务System Server进程。 之后,由创建的System Server进程所启动的Activity Manager Service(活动管理器服 务)来启动嵌入式系统的Launcher(应用启动器)。
[0077] 实际应用中,Activity Manager Service和Package Manager Service(应用程序 管理服务)一样,都是在嵌入式系统启动时由System Server(系统服务)进程启动的。
[0078] 具体地,System Server进程首先启动Package Manager Service,并由Package Manager Service来负责安装嵌入式系统的应用程序:Package Manager Service扫描嵌入 式系统中特定的目录,从中找出应用程序文件(比如,以Apk为后缀的文件);然后,Package Manager Service对查找出的应用程序文件进行解析,得到应用程序的相关信息;基于得到 的应用程序的相关信息,完成应用程序的安装过程。
[0079] 嵌入式系统中的应用程序安装好了以后,System Server进程接下来就要通过 Activity Manager Service来启动应用程序Launcher了。进而,Launcher在启动的时候可 以通过Package Manager Service把嵌入式系统中已经安装好的应用程序以快捷图标的形 式展示在智能终端的桌面上,就完成了嵌入式系统的启动,这样用户就可以使用这些应用 程序了。
[0080] 基于上述提供的嵌入式系统启动优化方法,本发明还提供了一种嵌入式系统启动 优化装置,如图2所示,包括:类检测单元201、类解析单元202、线程确定单元203、类加载单 元204。
[0081] 其中,类检测单元201用于在采用多线程并行加载嵌入式系统启动所需的预加载 类前,检测当前的预加载类是否为内部类。
[0082] 具体地,类检测单元201可以按照预设的解析格式,解析当前的预加载类,以获取 其在内部类位置上对应记录的内容;检测当前的预加载类在内部类位置上对应记录的内容 是否为空;若是,则确定当前的预加载类为宿主类;否则,确定当前的预加载类是内部类。 [0083]类解析单元202用于若当前的预加载类为内部类,则解析出当前的预加载类所属 的宿主类。
[0084] 具体地,若当前的预加载类为内部类,则类解析单元202可以按照预设的解析格 式,解析当前的预加载类,以获取其在宿主类位置上对应记录的内容;将获取的内容确定为 当前的预加载类所属的宿主类。
[0085] 线程确定单元203用于若当前的预加载类为内部类,则确定当前的预加载类所属 的宿主类的加载线程。
[0086] 具体地,线程确定单元具体用于查找出当前空闲的线程,并确定为宿主类的加载 线程;或将宿主类所对应的预设的线程确定为宿主类的加载线程;或将当前加载宿主类的 线程确定为宿主类的加载线程。
[0087] 类加载单元204用于若当前的预加载类为内部类,则在当前的预加载类所属的宿 主类加载完之后,通过线程确定单元203确定出的加载线程加载当前的预加载类。
[0088]进一步地,线程确定单元203还用于若当前的预加载类为宿主类,则确定出该宿主 类的加载线程。相应地,类加载单元204还用于确定当前的预加载类为宿主类时,通过线程 确定单元203确定出的加载线程加载当前的预加载类。
[0089] 本发明实施例中,嵌入式系统启动优化装置中的各个单元的具体功能实现可以参 考上述嵌入式系统启动优化方法中各个步骤的具体实现,在此不再赘述。
[0090] 为减少预加载类的加载时间,提高嵌入式系统的启动速度,相比现有多线程并行 加载方案,本发明的方案中,在采用采用多线程并行加载嵌入式系统启动所需的预加载类 前,通过预加载类的检测和内部类所属宿主类的加载线程的确定,保证宿主类与其内部类 由同一线程加载,且先加载宿主类后加载内部类,避免了内部类的加载无加载基础而出现 加载失败的异常情况,从而保障系统后续的正常运行,提高了系统运行的稳定性。
[0091] 本技术领域技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的 一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用 计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地 激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在 适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不 限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、R0M( Read-Only Memory,只 读存储器)、RAM(Random Access Memory,随即存储器)、EPROM(Erasable Programmable Read-Only Memory,可擦写可编程只读存储器)、EEPR0M(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡 片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介 质。
[0092] 本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或 框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领 域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他 可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理 器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
[0093]本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的 步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各 种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。 进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案 也可以被交替、更改、重排、分解、组合或删除。
[0094]以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人 员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应 视为本发明的保护范围。
【主权项】
1. 一种嵌入式系统启动优化方法,其特征在于,包括: 在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当前的预加载类是否 为内部类; 若是,则解析出当前的预加载类所属的宿主类;并确定出该宿主类的加载线程; 在所述宿主类加载完之后,通过所述加载线程加载所述当前的预加载类。2. 根据权利要求1所述的方法,其特征在于,所述检测当前的预加载类是否为内部类 后,还包括: 若否,则确定当前的预加载类为宿主类,确定出所述宿主类的加载线程,通过所述加载 线程加载所述当前的预加载类。3. 根据权利要求1或2所述的方法,其特征在于,所述检测当前的预加载类是否为内部 类,具体包括: 按照预设的解析格式,解析当前的预加载类,以获取其在内部类位置上对应记录的内 容; 检测当前的预加载类在内部类位置上对应记录的内容是否为空; 若是,则确定当前的预加载类为宿主类;否则,确定当前的预加载类为内部类。4. 根据权利要求3所述的方法,其特征在于,所述解析出当前的预加载类所属的宿主 类,具体包括: 按照预设的解析格式,解析当前的预加载类,以获取其在宿主类位置上对应记录的内 容; 将获取的内容确定为当前的预加载类所属的宿主类。5. 根据权利要求1或2所述的方法,其特征在于,所述确定出该宿主类的加载线程,具体 包括: 查找出当前空闲的线程,并确定为该宿主类的加载线程;或 将宿主类所对应的预设的线程确定为该宿主类的加载线程; 或将当前正加载宿主类的线程确定为该宿主类的加载线程。6. -种嵌入式系统启动优化装置,其特征在于,包括: 类检测单元,用于在采用多线程并行加载嵌入式系统启动所需的预加载类前,检测当 前的预加载类是否为内部类; 类解析单元,用于若当前的预加载类为内部类,则解析出当前的预加载类所属的宿主 类; 线程确定单元,用于若当前的预加载类为内部类,则确定当前的预加载类所属的宿主 类的加载线程; 类加载单元,用于若当前的预加载类为内部类,则在当前的预加载类所属的宿主类加 载完之后,通过所述线程确定单元确定出的加载线程加载当前的预加载类。7. 根据权利要求6所述的装置,其特征在于,所述线程确定单元还用于若当前的预加载 类为宿主类,则确定出该宿主类的加载线程;以及 所述类加载单元还用于确定当前的预加载类为宿主类时,通过所述线程确定单元确定 出的加载线程加载当前的预加载类。8. 根据权利要求6或7所述的装置,其特征在于,所述类检测单元具体用于按照预设的 解析格式,解析当前的预加载类,以获取其在内部类位置上对应记录的内容;检测当前的预 加载类在内部类位置上对应记录的内容是否为空;若是,则确定当前的预加载类为宿主类; 否则,确定当前的预加载类是内部类。9. 根据权利要求8所述的装置,其特征在于,所述类解析单元具体用于若当前的预加载 类为内部类,则按照预设的解析格式,解析当前的预加载类,以获取其在宿主类位置上对应 记录的内容;将获取的内容确定为当前的预加载类所属的宿主类。10. 根据权利要求6或7所述的装置,其特征在于, 所述线程确定单元具体用于查找出当前空闲的线程,并确定为宿主类的加载线程;或 将宿主类所对应的预设的线程确定为宿主类的加载线程;或将当前加载宿主类的线程确定 为宿主类的加载线程。
【文档编号】G06F9/445GK106095499SQ201610399093
【公开日】2016年11月9日
【申请日】2016年6月7日
【发明人】臧晓华, 王新鲁
【申请人】青岛海信电器股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1