<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning />
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas />
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL />
<w:BalanceSingleByteDoubleByteWidth />
<w:DoNotLeaveBackslashAlone />
<w:ULTrailSpace />
<w:DoNotExpandShiftReturn />
<w:AdjustLineHeightInTable />
<w:BreakWrappedTables />
<w:SnapToGridInCell />
<w:WrapTextWithPunct />
<w:UseAsianBreakRules />
<w:DontGrowAutofit />
<w:UseFELayout />
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--> <!--[if gte mso 10]>
<mce:style><!
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
-->
<!--[endif]-->
linux内核启动需要时间,并且需要很多的时间,这是逃避不了的,了解linuxbios的朋友可能知道,linuxbios作为bios和别的bios相比启动的特别快,因为它把硬件检测的任务交给了linux内核而不是bios,毕竟bios检测完了内核再检测是一种浪费,为了bios的性能,把工作推给内核是不负责任的行为吗?其实不是,实际上启动时最耗时的操作就是硬件检测和初始化,正是因为如此,linuxbios才把如此艰巨的任务避开,一并给了操作系统内核。
那么内核能把这些任务给谁呢?它必须自己解决之,因为它是基础。为了加快启动速度,linux设计者将硬件检测和初始化的任务交给了很多的内核线程,这样的话,一个内核线程在检测初始化一个硬件等待的时候就可以去检测初始化另一个硬件,一个并行进行,在多cpu机器上会更好。依照linux的传统,一切都是进程,最起码你得有这个意思想让任务成为进程,在内核初始化期间,内核维护了两个链表,一个是pending链表,一个是running链表,将要检测饼初始化的硬件相关的函数加入pending链表就不用管了,linux强大的进程调度机制会很好的处理诸多硬件初始化内核线程的执行,另外,在内核初始化完成以后,这些内核线程的机制接口将长期保留,一旦有繁琐的任务需要并发执行仍然可以用和硬件检测初始化的内核线程的方式来完成,这个机制十分灵活。
我有一点不解的是,为何不能用更加统一的工作队列来实现呢?难道工作队列的并行性不好吗?
分享到:
相关推荐
### Linux内核启动过程分析 #### 一、引言 随着技术的发展,Linux作为一个免费开源的Unix类操作系统,因其强大的功能、高效的性能以及良好的可移植性,在嵌入式系统乃至高性能服务器领域获得了广泛应用。理解Linux...
### Linux内核启动详解 #### 一、启动过程概述 Linux内核的启动是一个复杂而精细的过程,涉及多个阶段和步骤。一旦内核被加载到内存中并完成必要的解压缩操作,内核会跳转到`start_kernel`函数,这是整个内核启动...
### Linux内核启动过程 #### 一、引言 Linux作为一个免费开源的Unix类操作系统,在全球范围内得到了广泛应用,从嵌入式系统到超级服务器均有其身影。Linux内核以其紧凑的结构、强大的功能、高效的性能以及优秀的可...
"Linux内核启动流程" Linux内核启动流程是计算机启动过程中的一个重要步骤,它涉及到硬件检测、引导程序加载、内核初始化等多个方面。在本文中,我们将对 Linux 内核启动流程进行详细的分析和说明。 一、硬件检测 ...
在进行Linux内核启动地址修改的过程中,我们首先需要理解Linux内核启动地址的概念以及它在系统内存中的位置。通常Linux系统在启动时需要指定一个内存地址作为内核启动的起始点,这个地址被称为内核的起始地址。在...
### Linux内核启动过程分析 #### 一、引言 随着技术的发展,Linux作为一个免费开源的操作系统,在嵌入式系统到高性能服务器等多个领域都获得了广泛的应用。Linux内核以其高效、稳定、可移植性强等特点备受青睐。...
zImage自解压过程是Linux内核启动过程中的一个重要步骤,涉及到Bootloader的准备、zImage的生成和工作原理、MMU的设置等方面。通过对zImage自解压过程的分析,可以更好地理解Linux内核的启动过程,并为后续的内核...
理解Linux内核启动流程对于系统管理员、开发者和系统架构师来说至关重要,因为它有助于诊断启动问题、优化性能,甚至进行定制化的内核开发。通过深入学习这一流程,我们可以更好地了解操作系统如何控制和管理硬件...
这部书籍以0.11内核为基础,尽管这个版本相对较老,但它包含了Linux内核的基本构造和核心功能,是学习内核开发和优化的入门经典。 Linux内核是开源操作系统Linux的心脏,负责管理系统的硬件资源,调度进程,管理...
- **分析内核启动日志**:查看启动过程中内核输出的信息,找出耗时的环节。 - **使用工具进行性能分析**:如`perf`、`systemtap`等,可以帮助定位问题。 - **审查启动脚本和服务**:检查/etc/rc.d下的启动脚本和服务...
Linux内核解析笔记 在深入探讨Linux内核之前,我们首先要理解什么是内核。操作系统内核是系统的核心...对于IT专业人士来说,掌握Linux内核的工作原理和调优技巧,无疑能提升其在系统架构和性能优化方面的专业能力。
在深入探讨Linux内核启动和bootloader启动内核的过程之前,首先需要理解这两个概念的基本含义。Bootloader是操作系统加载前运行的一小段程序,它的主要任务是初始化硬件设备,如CPU、内存、显卡等,并将操作系统内核...
了解ARM上的Linux内核及启动过程对于嵌入式系统的开发和优化有着重要的意义。开发者可以针对特定的硬件平台定制内核,优化系统性能,提高系统的稳定性和效率。同时,对于内核源码的深入分析和理解,也有助于开发者在...
U-Boot是嵌入式设备常用的...掌握U-Boot如何向Linux内核传递启动参数的知识,对于开发嵌入式Linux系统至关重要,能够帮助开发者理解系统启动时的底层细节,以及如何配置和优化这些参数,以确保系统的稳定性和性能。