CN110874242A - 一种初始化并行启动的方法、装置及系统 - Google Patents
一种初始化并行启动的方法、装置及系统 Download PDFInfo
- Publication number
- CN110874242A CN110874242A CN201811020670.4A CN201811020670A CN110874242A CN 110874242 A CN110874242 A CN 110874242A CN 201811020670 A CN201811020670 A CN 201811020670A CN 110874242 A CN110874242 A CN 110874242A
- Authority
- CN
- China
- Prior art keywords
- parallel
- initialization
- thread
- code
- threads
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 21
- 230000006870 function Effects 0.000 claims description 17
- 230000001360 synchronised effect Effects 0.000 claims description 8
- 238000003780 insertion Methods 0.000 claims description 2
- 230000037431 insertion Effects 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 11
- 230000004048 modification Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000000694 effects Effects 0.000 description 3
- 238000003860 storage Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提出了一种初始化并行启动的方法,用于软件linux的initcall代码中,包括:S1.编辑包括多个设备初始化时并行启动的并行线程;S2.在多个串行线程中,插入所述的并行线程,形成混合线程;S3.执行所述的混合线程。本发明还公开了一种并行启动的装置和系统。实施本发明的技术方案中,针对initcall初始化的内核模块的启动模式进行优化,由部分串行启动修改为并行启动,缩短内核启动时间。
Description
技术领域
本发明涉及一种linux社区主线领域,特别涉及一种初始化并行启动的方法、装置及系统。
背景技术
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
目前Linux社区主线上的initcall初始化init函数都是串行模式,其目的主要是为了节省启动过程中的同步操作,降低代码耦合性问题。但是这也造成一个问题,对于那些代码原本独立的模块,串行初始化方式无疑会增加系统启动时间。
发明内容
为了解决以上的问题,本发明能提供一种用于实现Linux initcall模块并行初始化,支持代码独立的模块并行启动,最大化缩短内核启动时间的初始化并行启动的方法、装置及系统。
本发明的技术方案是这样实现的:
本发明公开了一种初始化并行启动的方法,用于软件linux的 initcall代码中,包括:
S1. 编辑包括多个设备初始化时并行启动的并行线程;
S2. 在多个串行线程中,插入所述的并行线程,形成混合线程;
S3. 执行所述的混合线程。
进一步地,所述的并行线程段内的代码数据为需要并行启动的模块驱动初始化函数。
进一步地,所述的initcall代码的内核启动时,先开启多线程并行初始化并行线程段,接着串行初始化device段,最终通过同步操作等待这两个段初始化完成。
进一步地,在所述的并行线程中,增加代码独立的模块。
本发明公开了一种初始化并行启动的装置,用于软件linux的 initcall代码中,包括:
编辑单元,用于编辑包括多个设备初始化时并行启动的并行线程;
插入单元,用于在多个串行线程中,插入所述的并行线程,形成混合线程;
执行单元,用于执行所述的混合线程。
进一步地,所述的并行线程段内的代码数据为需要并行启动的模块驱动初始化函数。
进一步地,所述的initcall代码的内核启动时,先开启多线程并行初始化并行线程段,接着串行初始化device段,最终通过同步操作等待这两个段初始化完成。
进一步地,还包括增加单元,用于在所述的并行线程中,增加代码独立的模块。
本发明公开了一种初始化并行启动的系统,包括linux社区主线,其特征在于,所述的linux社区主线具有上述的装置。
实施本发明的一种初始化并行启动的方法、装置及系统,具有以下有益的技术效果:
区别于现有技术中,Linux社区主线上的initcall初始化init函数都是串行模式,串行初始化方式会增加系统启动时间的不足,本技术方案中,针对initcall初始化的内核模块的启动模式进行优化,由部分串行启动修改为并行启动,最大化的缩短内核启动时间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的实施例一种并行启动的方法流程图;
图2为Linux内核支持多个level的initcall段的示意图;
图3为本发明的实施例一种并行启动的装置模块图;
图4为本发明的实施例一种并行启动的系统模块图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,实施例一,一种初始化并行启动的方法,用于软件linux的 initcall代码中,包括:
S1. 编辑包括多个设备初始化时并行启动的并行线程;
例如:在并行线程中,可以加入USB初始化代码段、WIFI模块初始化代码段、无线遥控初始化代码段、键盘模块初始化代码等, 其中,USB初始化代码段需要时间为3秒,WIFI模块初始化代码段、无线遥控初始化代码段、键盘模块初始化代码分别为1秒。
S2. 在多个串行线程中,插入所述的并行线程,形成混合线程;
S3. 执行所述的混合线程。
并行线程段内的代码数据为需要并行启动的模块驱动初始化函数。
initcall代码的内核启动时,先开启多线程并行初始化并行线程段,接着串行初始化device段,最终通过同步操作等待这两个段初始化完成。
在并行线程中,增加代码独立的模块。
下面详细说明如下:
Linux内核通过do_initcalls初始化之前,系统已经开启了多核,那么此时是可以通过多核优势来并行的启动initcall。
如图2所示,Linux内核原本支持8个level的initcall段,启动时依次从level0至level7串行初始化各个level,本设计通过增加level段来实现并行和同步。
以耗时最长的device_initcall为例,其对应level6,本设计将其修改为level7,并增加device_paralell_initcall段,对应level6,该段内的代码数据即为device需要并行启动的模块驱动初始化函数,另外也可以将代码独立的模块例如ramdisk的解压缩都放进该段内。
内核启动时先开启多线程并行初始化device_paralell_initcall段,接着串行初始化device段,最终通过同步操作等待这两个段初始化完成再初始化level8,以此来完成initcall并行初始化的功能。
另外为了驱动修改简易性,本设计还完成module_driver_paralell和device_paralell_initcall等宏供驱动调用,驱动只需要将其替代module_init和module_platform_driver即可,极大的方便驱动修改。
Linux内核initcall代码放在(.init.data)段中,其针对不同的系统资源分成了level0至level7,启动时按level串行初始化,下面以device并行启动为例子来阐述并行initcall的实现原理。
在(.init.data)段中增加device_paralell段,其initcall_level为6,该段用于存放并行初始化的module的初始化函数。当系统启动时根据initcall level的顺序利用多核先运行内核线程初始化device_paralell段中的代码,该操作为并行操作,接着继续串行初始化device段中模块,以此来达到并行initcall的操作。
例如:USB初始化代码段需要时间为3秒,WIFI模块初始化代码段、无线遥控初始化代码段、键盘模块初始化代码段分别为1秒时,USB初始化代码段通过第一通道运行,耗时3秒,WIFI模块初始化代码段、无线遥控初始化代码段、键盘模块初始化代码段串行通过第二通道运行,每一代码段均为1秒,第一通道与第二通道可同时运行,相当于用3秒运行完USB初始化代码段、WIFI模块初始化代码段、无线遥控初始化代码段、键盘模块初始化代码段,相对于串行运行,需要6秒,大大减少了启动的时间。
下面介绍实现以上方法的装置,装置中的未记载的部分,可参考以上方法的记载。
请参阅图3,一种初始化并行启动的装置1,用于软件linux的 initcall代码中,包括:
编辑单元10,用于编辑包括多个设备初始化时并行启动的并行线程;
插入单元20,用于在多个串行线程中,插入所述的并行线程,形成混合线程;
执行单元30,用于执行所述的混合线程。
并行线程段内的代码数据为需要并行启动的模块驱动初始化函数。
initcall代码的内核启动时,先开启多线程并行初始化并行线程段,接着串行初始化device段,最终通过同步操作等待这两个段初始化完成。
装置1还包括增加单元,用于在所述的并行线程中,增加代码独立的模块。
对于那些代码原本独立的模块,串行初始化方式无疑会增加系统启动时间。针对以上问题,本技术方案,实现了一套软件框架,用于实现Linux initcall模块并行初始化,支持代码独立的模块并行启动,最大化缩短内核启动时间。
请参阅图4,一种初始化并行启动的系统100,包括linux社区主线200,所述的linux社区主线具有上述的装置1。
系统启动时会遍历(.init.data)段里面的__initcall_levels段,当遍历到device_paralell段时,会利用多核开启多线程并行初始化,当这些线程运行的同时系统会继续device段的串行初始化,以此来达到并行初始化device的效果。除此之外,一些代码独立运行的模块也可以添加到该段中进行串行初始化,例如ramdisk的解压缩等。
为了让驱动的修改更加简易性,本设计定义以下宏定义,用于实现设备的并行初始化:
device_paralell_initcall:用于替代module_init,实现模块init并行初始化。
module_platform_driver_paralell:用于替代module_platform_driver。
通过加速将内核、文件系统等读取到内存的速度来进行启动速度的提升;本发明针对的是内核模块initcall的启动模式进行优化,由串行启动修改为并行启动,最大化的缩短内核启动时间;
实施本发明的一种初始化并行启动的方法、装置及系统,具有以下有益的技术效果:
区别于现有技术中,Linux社区主线上的initcall初始化init函数都是串行模式,串行初始化方式会增加系统启动时间的不足,本技术方案中,针对initcall初始化的内核模块的启动模式进行优化,由部分串行启动修改为并行启动,最大化的缩短内核启动时间。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或至少一个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或至少一个流程和/或方框图一个方框或至少一个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或至少一个流程和/或方框图一个方框或至少一个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或至少一个流程和/或方框图一个方框或至少一个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (9)
1.一种初始化并行启动的方法,用于软件linux的 initcall代码中,其特征在于,包括:
S1. 编辑包括多个设备初始化时并行启动的并行线程;
S2. 在多个串行线程中,插入所述的并行线程,形成混合线程;
S3. 执行所述的混合线程。
2.根据权利要求1所述的方法,其特征在于,所述的并行线程段内的代码数据为需要并行启动的模块驱动初始化函数。
3.根据权利要求1所述的方法,其特征在于,所述的initcall代码的内核启动时,先开启多线程并行初始化并行线程段,接着串行初始化device段,最终通过同步操作等待这两个段初始化完成。
4.根据权利要求1所述的方法,其特征在于,在所述的并行线程中,增加代码独立的模块。
5.一种初始化并行启动的装置,用于软件linux的 initcall代码中,其特征在于,包括:
编辑单元,用于编辑包括多个设备初始化时并行启动的并行线程;
插入单元,用于在多个串行线程中,插入所述的并行线程,形成混合线程;
执行单元,用于执行所述的混合线程。
6.根据权利要求5所述的装置,其特征在于,所述的并行线程段内的代码数据为需要并行启动的模块驱动初始化函数。
7.根据权利要求5所述的装置,其特征在于,所述的initcall代码的内核启动时,先开启多线程并行初始化并行线程段,接着串行初始化device段,最终通过同步操作等待这两个段初始化完成。
8.根据权利要求5所述的装置,其特征在于,还包括增加单元,用于在所述的并行线程中,增加代码独立的模块。
9.一种初始化并行启动的系统,包括linux社区主线,其特征在于,所述的linux社区主线具有权利要求5至8任一项所述的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811020670.4A CN110874242A (zh) | 2018-09-03 | 2018-09-03 | 一种初始化并行启动的方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811020670.4A CN110874242A (zh) | 2018-09-03 | 2018-09-03 | 一种初始化并行启动的方法、装置及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110874242A true CN110874242A (zh) | 2020-03-10 |
Family
ID=69716672
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811020670.4A Pending CN110874242A (zh) | 2018-09-03 | 2018-09-03 | 一种初始化并行启动的方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110874242A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114064138A (zh) * | 2022-01-17 | 2022-02-18 | 杭州研极微电子有限公司 | 包括多核处理器的系统的启动方法以及采用该方法的系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104778066A (zh) * | 2015-04-21 | 2015-07-15 | 北京凌阳益辉科技有限公司 | 一种嵌入式操作系统的快速启动方法及其装置 |
CN106354535A (zh) * | 2016-08-31 | 2017-01-25 | 福建联迪商用设备有限公司 | 一种提高支付终端启动速度的方法及装置 |
-
2018
- 2018-09-03 CN CN201811020670.4A patent/CN110874242A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104778066A (zh) * | 2015-04-21 | 2015-07-15 | 北京凌阳益辉科技有限公司 | 一种嵌入式操作系统的快速启动方法及其装置 |
CN106354535A (zh) * | 2016-08-31 | 2017-01-25 | 福建联迪商用设备有限公司 | 一种提高支付终端启动速度的方法及装置 |
Non-Patent Citations (1)
Title |
---|
佚名: "第三部分:浅析 Linux 初始化 init 系统:systemd" * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114064138A (zh) * | 2022-01-17 | 2022-02-18 | 杭州研极微电子有限公司 | 包括多核处理器的系统的启动方法以及采用该方法的系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104598254A (zh) | 一种安卓系统快速开机的方法及装置 | |
US9513889B2 (en) | System and method of automating installation of applications | |
CN105721942A (zh) | 一种智能电视的启动方法和智能电视 | |
CN114489927A (zh) | 一种解耦依赖文件的容器部署方法及系统 | |
EP3798826A1 (en) | Methods of hardware and software coordinated opt-in to advanced features on hetero isa platforms | |
CN110557682B (zh) | 基于双核启动的智能电视快速开机方法及双核智能电视 | |
CN110874242A (zh) | 一种初始化并行启动的方法、装置及系统 | |
US20180267829A1 (en) | Method for configuring an it system, corresponding computer program and it system | |
CN116991622A (zh) | 一种可信dcs控制器系统无法启动时的恢复方法及系统 | |
CN114721735B (zh) | 一种程序动态加载方法、装置及电子设备 | |
CN114489941B (zh) | 运行在宿主模式用户态的虚拟机管理方法及系统 | |
US20050086667A1 (en) | Symmetric Scheduling for parallel execution | |
WO2018228528A1 (zh) | 一种批量化电路仿真方法和系统 | |
US7984446B1 (en) | Method and system for multitasking BIOS initialization tasks | |
CN103970658A (zh) | Pmon与内核版本兼容性测试的方法和装置 | |
CN105138380B (zh) | 一种Linux系统的启动方法及装置 | |
WO2017128589A1 (zh) | 可运行文件生成方法、art虚拟机运行方法和装置 | |
CN109582370B (zh) | 一种nor flash嵌入式设备的启动方法及装置 | |
EP3989059B1 (en) | Interactive code optimizer | |
CN107479864B (zh) | MapReduce计算框架的平台移植方法和装置 | |
CN102629209B (zh) | 实现单板即插即用的方法、单板及系统 | |
CN111714879B (zh) | 物理状态的更新方法和装置、存储介质、电子装置 | |
CN114968388B (zh) | 应用于微处理器的引导方法和系统 | |
CN115145642B (zh) | 一种软件启动方法和系统 | |
CN112199101A (zh) | 一种基于串口的mcu升级方法、系统、设备及介质 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200310 |
|
RJ01 | Rejection of invention patent application after publication |