从程序员角度深入计算机系统的底层
程序员为什么要学习底层知识

程序员为什么要学习底层知识
这两天每天中午午休前都会看一些《编程人生》。
现在已经看了七八个人,这些人开始编程的时候,正好是计算机的起步期,所以对整个计算机的底层都比较了解。
不知道这是不是这些人能够成为大师的一个必要条件,自己有没有必要在这方面努力一下。
我想这也是很多程序员思考过的问题。
现在分享一下我的思考,和大家一起探讨。
——ps:这些人大部分在中学的时候就开始编程,而那个时候我们一般都正在为考试闷头学习,这个差距要我们现在来弥补。
好的,首先有必要澄清一下“底层知识”的概念,对程序员来说什幺才是底层知识?
一般情况下,我们可能会认为底层知识就是操作系统,编译器,寄存器等等相关知识。
我认为这个问题是相对的,而不是绝对的。
这取决于程序员从事那个层次的开发工作。
如果是一个c语言开发者,把这些知识归为底层知识也许很合理,但是对一个java或者更高级语言的开发者来说,有些不准确,或者不可以称为直接的底层知识。
我认为,所谓的底层知识,是指他编程或开发所依赖的平台(或者框架,工具)的知识。
比如,对于java开发者来说,java虚拟机,以及它所用的框。
深入C语言:底层开发的奇幻世界

深入C语言:底层开发的奇幻世界C语言,作为一门广泛应用于系统级编程的编程语言,深入其底层开发世界,就仿佛踏入了一个奇幻的世界。
这个世界充满了神奇和挑战,需要开发者具备深厚的知识和技能,同时也让人留下无尽的惊叹。
在C语言的底层开发中,程序员需要直面计算机的硬件,与机器进行沟通。
他们要与内存、指针、寄存器等概念打交道,了解二进制和位操作,还要关注内存管理和性能优化。
这些知识控制着程序的运行,决定着程序的效率和质量。
底层开发的奇幻之处在于,它让程序员能够直接掌握计算机的本质。
他们可以通过编写底层代码,实现对硬件的直接控制和优化,以达到提高程序性能的目的。
这是一种强大的能力,也是其他高级编程语言无法比拟的。
底层开发让程序员不再满足于仅仅使用高级语言的抽象,而能够真正理解和改变计算机的工作原理。
底层开发的奇幻还表现在其复杂性和挑战性上。
C语言的底层开发需要程序员具备精确的思维和清晰的逻辑,他们必须善于调试和排错,对代码进行精确的控制。
任何一个细微的错误都可能导致程序崩溃或者产生严重的后果。
因此,底层开发是一门需要严谨和耐心的工作。
底层开发的奇幻世界也让人体悟到了程序员的责任和使命。
他们要编写安全可靠的代码,保护用户的数据和隐私,维护计算机系统的稳定和安全。
他们需要不断学习和研究,跟上技术的发展和变化,以适应日新月异的底层开发领域。
然而,底层开发也并非没有乐趣和回报。
当程序员将自己的代码编译成机器语言,运行在计算机上,看到程序正常工作并发挥出强大的性能时,他们会充满成就感和满足感。
这种身临其境的亲身体验是其他领域无法替代的。
总的来说,底层开发的奇幻世界需要开发者具备扎实的知识和技能,同时也带给他们无尽的刺激和满足感。
没有底层开发,我们将无法享受到现代计算机的高效和强大,而只是停留在表面的应用层面。
因此,让我们一同踏入这个奇幻的世界,探索其无尽的可能性与魅力。
详解计算机底层技术

详解计算机底层技术
计算机底层技术是指与计算机硬件直接相关的技术,包括计算机组成原理、计算机结构、计算机硬件设计、数字逻辑电路设计等等。
它是计算机科学与工程学科中的基础内容,负责研究计算机硬件的构造和工作原理。
计算机底层技术的主要内容包括以下几个方面:
1.计算机组成原理:计算机组成原理研究计算机的基本组成部分,包括中央处理器(CPU)、内存(Memory)、输入输出设备等,以及它们之间的连接方式和控制方式。
2.计算机结构:计算机结构描述计算机硬件的组织方式和协调关系,包括指令系统、寻址方式、数据传输方式等。
它主要研究的是计算机中的指令和数据在硬件中的流动过程,以及如何将高级语言程序转化为机器代码并执行。
3.计算机硬件设计:计算机硬件设计是指根据计算机结构和组成原理,设计和实现计算机硬件电路。
它涉及到数字电路设计、信号处理、电路仿真、硬件接口设计等一系列技术。
4.数字逻辑电路设计:数字逻辑电路设计是计算机底层技术中的重要内容,它主要研究的是用逻辑门实现的数字电路,例如与门、或门、非门等。
通过设计和实现数字逻辑电路,可以实现各种逻辑功能,如加法器、减法器、乘法器、除法器等。
5.存储器技术:存储器技术是计算机底层技术中的关键内容,它包括主存储器和辅助存储器。
主存储器(RAM)用于存储计
算机正在运行的数据和指令,辅助存储器(硬盘、光盘等)用
于长期存储数据和程序。
计算机底层技术对于理解计算机的工作原理和性能提升具有
重要意义。
只有通过深入研究计算机底层技术,才能更好地理
解计算机的硬件结构和工作原理,为计算机的设计和优化提供
理论基础和技术支持。
计算机底层的秘密

读书笔记
01 思维导图
03 精彩摘录 05 目录分析
目录
02 内容摘要 04 阅读感受 06 作者简介
思维导图
本书关键字分析思维导图
理解
帮助
计算机
硬件
原理
系统
深入
秘密
计Байду номын сангаас机
读者 底层
内存
底层
操作系统
大家
工作
物理
内容
明白
内容摘要
内容摘要
《计算机底层的秘密》是一本深入剖析计算机底层原理的书籍,为读者揭示了那些看似普通的计 算机操作背后隐藏的复杂机制。从物理硬件到操作系统,从汇编语言到高级编程,这本书涵盖了 计算机科学的各个方面,旨在帮助读者建立起对整个计算机系统的全面理解。 书中详细介绍了计算机的物理硬件结构,包括中央处理器、内存、硬盘等,以及它们如何协同工 作。通过这一部分,读者可以明白计算机如何将电子信号转化为指令,进而驱动硬件执行任务。 接下来,作者深入探讨了操作系统的工作原理。这部分内容涵盖了进程管理、内存管理、文件系 统和设备驱动等核心概念。通过学习,读者将明白操作系统如何实现对硬件的抽象,以及如何提 供稳定、高效的服务。 书中还有一章专门讲解汇编语言。
进入更为专业的主题,这本书对计算机底层的工作原理进行了深入的剖析。例 如,“计算机体系结构”一章详细介绍了计算机体系结构的构成和设计理念, 帮助读者理解计算机如何将高级语言编写的程序转换成机器语言进行执行。 “编译器原理”一章则深入探讨了编译器的工作原理和优化技术,使读者对软 件开发中编译器的角色有了更为深刻的认识。
精彩摘录
《计算机底层的秘密》是一本深入揭示计算机底层工作原理的书籍,它为读者 打开了一扇通往计算机科学深处的窗户。这本书的精彩摘录,让我们一起领略 其中的智慧和洞见。
底层实现原理

底层实现原理是指计算机系统或软件的底层核心运行机制和实现细节。
以下是关于计算机底层实现原理的一些常见方面:1. 计算机硬件:计算机硬件包括中央处理器(CPU)、内存(RAM)、存储设备(如硬盘和固态硬盘)、输入输出设备(如键盘、鼠标和显示器)等。
底层实现原理涉及到计算机硬件的架构、工作方式和相互连接方式等。
2. 指令集架构:计算机的底层实现依赖于特定的指令集架构,例如x86、ARM等。
指令集架构定义了计算机能够执行的操作指令和寄存器等相关信息。
3. 操作系统:操作系统是计算机系统的核心软件,它管理着计算机的资源和提供服务,如进程管理、内存管理和文件系统等。
底层实现原理包括操作系统的内核通信、调度算法和内存管理机制等。
4. 编译器和解释器:编译器和解释器是将高级语言转化为机器代码的工具,用于实现软件的底层执行原理。
编译器将整个源代码翻译成目标机器的指令,而解释器则逐行解释执行源代码。
5. 内存管理:底层实现原理还包括内存管理机制,包括虚拟内存、分段和分页机制等。
这些机制帮助操作系统有效地管理计算机内存,提供给应用程序使用。
6. 并发和并行计算:底层实现原理涉及到处理多个任务和线程的并发和并行计算。
这包括进程间通信(IPC)机制、锁机制、线程调度和同步原语等。
7. 输入输出:底层实现原理中还包括输入输出设备的访问和数据传输机制。
这涉及到设备驱动程序、中断处理和缓冲区管理等。
总之,底层实现原理涉及到计算机硬件和软件的各个方面,包括硬件架构、操作系统、编译器、内存管理、并发计算和输入输出等。
了解底层实现原理有助于深入理解计算机系统的工作原理和优化应用程序的性能。
底层逻辑讲解

底层逻辑讲解底层逻辑是计算机科学中一个非常重要的概念,它指的是程序运行时所涉及的底层细节和操作逻辑。
在计算机系统中,底层逻辑扮演着至关重要的角色,它直接影响着程序的性能、可靠性和稳定性。
本文将从底层逻辑的定义、作用、原理以及在计算机系统中的具体应用等方面展开讨论,旨在深入探究底层逻辑的重要性和实际应用。
底层逻辑是指计算机程序在硬件层面上的运行逻辑,它包括了指令的执行、内存管理、寄存器操作、数据传输等方面的细节。
在计算机科学中,底层逻辑是构造程序的基础,只有深入理解和掌握底层逻辑,才能够编写高效、稳定的程序。
底层逻辑通常与计算机体系结构、操作系统、编程语言等密切相关,是计算机科学中的重要组成部分。
底层逻辑在计算机系统中具有至关重要的作用。
首先,底层逻辑直接影响着程序的性能。
通过对硬件层面的优化和调整,可以提高程序的执行速度和效率。
其次,底层逻辑对程序的可靠性和稳定性也起着决定性的影响。
只有在理解和掌握底层逻辑的基础上,才能够编写健壮、可靠的程序,减少程序出错的可能性。
此外,底层逻辑还可以帮助开发人员更好地理解计算机系统的工作原理,从而提高程序员的素质和能力。
底层逻辑的原理主要包括指令执行、内存管理、寄存器操作和数据传输等方面。
指令执行是计算机程序中最基本的操作,它包括了取指、译码、执行和写回等过程。
在这一过程中,计算机按照指令的顺序逐条执行,完成程序的功能。
内存管理是指计算机系统中用于管理内存的机制,包括内存分配、回收、地址转换等操作。
寄存器是计算机中用于存储数据的高速存储器,它在程序执行中起着举足轻重的作用。
数据传输是指计算机系统中数据在各个部件之间的传递和交换,它需要借助总线和控制器等硬件来完成。
在计算机系统中,底层逻辑的具体应用非常广泛。
首先,在操作系统中,底层逻辑扮演着关键的角色。
操作系统通过对内存、硬件等资源进行管理和调度,为用户程序提供了一个良好的执行环境。
其次,在编程语言中,底层逻辑也发挥着不可替代的作用。
软件底层的原理

软件底层的原理软件底层的原理是指软件在计算机系统中运行的基本原理和机制。
软件底层通常包括硬件中断、操作系统、编程语言和编译器等组成部分,它们共同工作以提供计算机系统的功能和性能。
首先,软件底层与硬件之间存在着硬件中断的机制。
硬件中断是指当系统发生硬件故障或需要处理特定的事件时,硬件通过触发中断信号来中断正在执行的程序,转而执行中断服务程序。
中断服务程序负责处理中断,并根据需要修改计算机的状态。
操作系统是软件底层的核心组成部分之一。
操作系统负责管理和控制计算机硬件资源,提供给应用软件一个环境和接口来运行。
操作系统通过调度算法和资源分配策略,协调不同应用程序对计算机资源的竞争,提高系统的利用率和性能。
编程语言是软件底层的另一个重要组成部分。
编程语言是开发软件的工具,它提供了一套语法和语义规则,使程序员能够编写高级抽象的代码。
不同编程语言具有不同的特点和应用领域,例如C语言适用于系统级编程,Python适用于科学计算和Web开发。
在编程语言的背后,编译器起着关键作用。
编译器是将高级语言代码转换为底层机器代码的程序。
编译器通过不同的阶段,包括词法分析、语法分析、语义分析、代码优化和代码生成,将源代码转换为可执行的机器指令。
编译器的优化阶段可以根据目标机器的特点,对程序进行性能优化。
此外,软件底层还包括计算机体系结构和存储系统等方面。
计算机体系结构决定了计算机的结构和功能,包括处理器、存储器、总线等。
不同的体系结构对软件的运行性能和能力有着重要影响。
存储系统包括主存储器、辅助存储器和缓存等,它们是计算机存储数据的载体,对软件的运行速度也有重要影响。
软件底层的原理可以从不同的角度进行分析和理解。
从计算机系统的层次结构来看,软件底层主要与硬件和操作系统相关,通过硬件中断、操作系统调度和资源管理来实现软件的功能和性能。
从软件开发的角度来看,软件底层主要包括编程语言和编译器,通过编码、编译和优化等过程来开发和执行软件。
底层逻辑主要内容

底层逻辑主要内容底层逻辑是指计算机系统中最基础的部分,包括硬件和操作系统等。
在计算机科学领域中,底层逻辑是非常重要的,因为它直接影响到计算机的性能和稳定性。
本文将从以下几个方面详细介绍底层逻辑的主要内容。
一、硬件硬件是计算机系统中最基本的组成部分,包括中央处理器(CPU)、内存、硬盘、显卡、声卡等。
其中,CPU是整个计算机系统的核心,负责执行所有指令。
内存用于存储数据和程序,在计算机运行时起到临时存储数据的作用。
硬盘则用于永久性地存储数据和程序。
除了这些核心组件之外,还有许多其他的硬件设备,例如键盘、鼠标、打印机等外设。
这些设备通过不同的接口与计算机连接,并通过操作系统提供的驱动程序来实现与计算机通信。
二、操作系统操作系统是底层逻辑中非常重要的一部分,它负责管理和控制计算机系统中各个组件之间的交互。
操作系统提供了许多功能,例如文件管理、内存管理、进程管理等。
在操作系统中,进程是一个非常重要的概念。
进程是指计算机中正在运行的程序。
操作系统通过进程管理来控制计算机系统中各个程序之间的交互和资源的分配。
另外,操作系统还提供了许多服务,例如网络服务、安全服务等。
这些服务使得计算机系统更加安全和易于使用。
三、底层编程语言底层编程语言是指直接与计算机硬件交互的编程语言,例如汇编语言和机器语言。
这些编程语言可以直接操作计算机硬件,并且可以实现非常高效的代码。
汇编语言是一种基于机器指令的低级别编程语言,它使用助记符来代替二进制代码,使得程序员更容易理解和编写代码。
汇编语言通常用于嵌入式系统开发、驱动程序开发等领域。
机器语言则是一种直接使用二进制代码进行编写的低级别编程语言。
由于其难以阅读和理解,因此通常只用于特定领域或特定任务。
四、底层逻辑应用底层逻辑在计算机科学领域中有着广泛的应用。
以下是一些典型的应用场景:1. 嵌入式系统开发嵌入式系统通常是指嵌入到其他设备中的计算机系统,例如智能手机、汽车控制系统等。
由于这些设备的资源非常有限,因此需要使用底层编程语言和底层逻辑来实现高效的代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主板芯片组与内存映射(Motherboard Chipsets and the Memory Map)一组讲述计算机内幕的文章,旨在揭示现代操作系统内核的工作原理。
我希望这些文章能对电脑爱好者和程序员有所帮助,特别是对这类话题感兴趣但没有相关知识的人们。
讨论的焦点是Linux,Windows,和Intel处理器。
钻研系统内幕是我的一个爱好。
我曾经编写过不少内核模式的代码,只是最近一段时间不再写了。
这第一篇文章讲述了现代Intel主板的布局,CPU如何访问内存,以及系统的内存映射。
作为开始,让我们看看当今的Intel计算机是如何连接各个组件的吧。
下图展示了主板上的主要组件:现代主板的示意图,北桥和南桥构成了芯片组。
当你看图时,请牢记一个至关重要的事实:CPU一点也不知道它连接了什么东西。
CPU仅仅通过一组针脚与外界交互,它并不关心外界到底有什么。
可能是一个电脑主板,但也可能是烤面包机,网络路由器,植入脑内的设备,或CPU测试工作台。
CPU主要通过3种方式与外界交互:内存地址空间,I/O地址空间,还有中断。
眼下,我们只关心主板和内存。
安装在主板上的CPU与外界沟通的门户是前端总线(front-side bus),前端总线把CPU与北桥连接起来。
每当CPU需要读写内存时,都会使用这条总线。
CPU通过一部分管脚来传输想要读写的物理内存地址,同时另一些管脚用于发送将被写入或接收被读出的数据。
一个Intel Core 2 QX6600有33个针脚用于传输物理内存地址(可以表示233个地址位置),64个针脚用于接收/发送数据(所以数据在64位通道中传输,也就是8字节的数据块)。
这使得CPU可以控制64GB的物理内存(233个地址乘以8字节),尽管大多数的芯片组只能支持8GB的RAM。
现在到了最难理解的部分。
我们可能曾经认为内存指的就是RAM,被各式各样的程序读写着。
的确,大部分CPU发出的内存请求都被北桥转送给了RAM管理器,但并非全部如此。
物理内存地址还可能被用于主板上各种设备间的通信,这种通信方式叫做内存映射I/O。
这类设备包括显卡,大多数的PCI卡(比如扫描仪或SCSI卡),以及BIOS中的flash存储器等。
当北桥接收到一个物理内存访问请求时,它需要决定把这个请求转发到哪里:是发给RAM?抑或是显卡?具体发给谁是由内存地址映射表来决定的。
映射表知道每一个物理内存地址区域所对应的设备。
绝大部分的地址被映射到了RAM,其余地址由映射表来通知芯片组该由哪个设备来响应此地址的访问请求。
这些被映射为设备的内存地址形成了一个经典的空洞,位于PC内存的640KB到1MB之间。
当内存地址被保留用于显卡和PCI设备时,就会形成更大的空洞。
这就是为什么32位的操作系统无法使用全部的4GB RAM。
Linux中,/proc/iomem这个文件简明的列举了这些空洞的地址范围。
下图展示了Intel PC低端4GB物理内存地址形成的一个典型的内存映射:Intel系统中,低端4GB内存地址空间的布局。
实际的地址和范围依赖于特定的主板和电脑中接入的设备,但是对于大多数Core 2系统,情形都跟上图非常接近。
所有棕色的区域都被设备地址映射走了。
记住,这些在主板总线上使用的都是物理地址。
在CPU内部(比如我们正在编写和运行的程序),使用的是逻辑地址,必须先由CPU翻译成物理地址以后,才能发布到总线上去访问内存。
这个把逻辑地址翻译成物理地址的规则比较复杂,而且还依赖于当时CPU的运行模式(实模式,32位保护模式,64位保护模式)。
不管采用哪种翻译机制,CPU的运行模式决定了有多少物理内存可以被访问。
比如,当CPU 工作于32位保护模式时,它只可以寻址4GB物理地址空间(当然,也有个例外叫做物理地址扩展,但暂且忽略这个技术吧)。
由于顶部的大约1GB物理地址被映射到了主板上的设备,CPU实际能够使用的也就只有大约3GB的RAM(有时甚至更少,我曾用过一台安装了Vista的电脑,它只有2.4GB可用)。
如果CPU工作于实模式,那么它将只能寻址1MB的物理地址空间(这是早期的Intel处理器所支持的唯一模式)。
如果CPU工作于64位保护模式,则可以寻址64GB的地址空间(虽然很少有芯片组支持这么大的RAM)。
处于64位保护模式时,CPU就有可能访问到RAM空间中被主板上的设备映射走了的区域了(即访问空洞下的RAM)。
要达到这种效果,就需要使用比系统中所装载的RAM地址区域更高的地址。
这种技术叫做回收(reclaiming),而且还需要芯片组的配合。
这些关于内存的知识将为下一篇文章做好铺垫。
下次我们会探讨机器的启动过程:从上电开始,直到boot loader准备跳转执行操作系统内核为止。
如果你想更深入的学习这些东西,我强烈推荐Intel手册。
虽然我列出的都是第一手资料,但Intel手册写得很好很准确。
这是一些资料:●《Datasheet for Intel G35 Chipset》描述了一个支持Core 2处理器的有代表性的芯片组。
这也是本文的主要信息来源。
●《Datasheet for Intel Core 2 Quad-Core Q6000 Sequence》是一个处理器数据手册。
它记载了处理器上每一个管脚的作用(当你把管脚按功能分组后,其实并不算多)。
很棒的资料,虽然对有些位的描述比较含糊。
●《Intel Software Developer’s Manuals》是杰出的文档。
它优美的解释了体系结构的各个部分,一点也不会让人感到含糊不清。
第一卷和第三卷A部很值得一读(别被“卷”字吓倒,每卷都不长,而且您可以选择性的阅读)。
计算机的引导过程(How Computers Boot Up)前一篇文章介绍了Intel计算机的主板与内存映射,从而为本文设定了一个系统引导阶段的场景。
引导(Booting)是一个复杂的,充满技巧的,涉及多个阶段,又十分有趣的过程。
下图列出了此过程的概要:引导过程概要当你按下计算机的电源键后(现在别按!),机器就开始运转了。
一旦主板上电,它就会初始化自身的固件(firmware)——芯片组和其他零零碎碎的东西——并尝试启动CPU。
如果此时出了什么问题(比如CPU坏了或根本没装),那么很可能出现的情况是电脑没有任何动静,除了风扇在转。
一些主板会在CPU故障或缺失时发出鸣音提示,但以我的经验,此时大多数机器都会处于僵死状态。
一些USB或其他设备也可能导致机器启动时僵死。
对于那些以前工作正常,突然出现这种症状的电脑,一个可能的解决办法是拔除所有不必要的设备。
你也可以一次只断开一个设备,从而发现哪个是罪魁祸首。
如果一切正常,CPU就开始运行了。
在一个多处理器或多核处理器的系统中,会有一个CPU被动态的指派为引导处理器(bootstrap processor简写BSP),用于执行全部的BIOS和内核初始化代码。
其余的处理器,此时被称为应用处理器(application processor简写AP),一直保持停机状态直到内核明确激活他们为止。
虽然Intel CPU经历了很多年的发展,但他们一直保持着完全的向后兼容性,所以现代的CPU可以表现得跟原先1978年的Intel 8086完全一样。
其实,当CPU上电后,它就是这么做的。
在这个基本的上电过程中,处理器工作于实模式,分页功能是无效的。
此时的系统环境,就像古老的MS-DOS一样,只有1MB内存可以寻址,任何代码都可以读写任何地址的内存,这里没有保护或特权级的概念。
CPU上电后,大部分寄存器的都具有定义良好的初始值,包括指令指针寄存器(EIP),它记录了下一条即将被CPU执行的指令所在的内存地址。
尽管此时的Intel CPU还只能寻址1MB的内存,但凭借一个奇特的技巧,一个隐藏的基地址(其实就是个偏移量)会与EIP相加,其结果指向第一条将被执行的指令所处的地址0xFFFFFFF0(长16字节,在4GB内存空间的尾部,远高于1MB)。
这个特殊的地址叫做复位向量(reset vector),而且是现代Intel CPU的标准。
主板保证在复位向量处的指令是一个跳转,而且是跳转到BIOS执行入口点所在的内存映射地址。
这个跳转会顺带清除那个隐藏的、上电时的基地址。
感谢芯片组提供的内存映射功能,此时的内存地址存放着CPU初始化所需的真正内容。
这些内容全部是从包含有BIOS的闪存映射过来的,而此时的RAM模块还只有随机的垃圾数据。
下面的图例列出了相关的内存区域:引导时的重要内存区域随后,CPU开始执行BIOS的代码,初始化机器中的一些硬件。
之后BIOS开始执行上电自检过程(POST),检测计算机中的各种组件。
如果找不到一个可用的显卡,POST就会失败,导致BIOS进入停机状态并发出鸣音提示(因为此时无法在屏幕上输出提示信息)。
如果显卡正常,那么电脑看起来就真的运转起来了:显示一个制造商定制的商标,开始内存自检,天使们大声的吹响号角。
另有一些POST失败的情况,比如缺少键盘,会导致停机,屏幕上显示出错信息。
其实POST即是检测又是初始化,还要枚举出所有PCI设备的资源——中断,内存范围,I/O 端口。
现代的BIOS会遵循高级配置与电源接口(ACPI)协议,创建一些用于描述设备的数据表,这些表格将来会被操作系统内核用到。
POST完毕后,BIOS就准备引导操作系统了,它必须存在于某个地方:硬盘,光驱,软盘等。
BIOS搜索引导设备的实际顺序是用户可定制的。
如果找不到合适的引导设备,BIOS会显示出错信息并停机,比如“Non-SystemDisk or Disk Error”没有系统盘或驱动器故障。
一个坏了的硬盘可能导致此症状。
幸运的是,在这篇文章中,BIOS 成功的找到了一个可以正常引导的驱动器。
现在,BIOS会读取硬盘的第一个扇区(0扇区),内含512个字节。
这些数据叫做主引导记录(Master Boot Record简称MBR)。
一般说来,它包含两个极其重要的部分:一个是位于MBR开头的操作系统相关的引导程序,另一个是紧跟其后的磁盘分区表。
BIOS 丝毫不关心这些事情:它只是简单的加载MBR的内容到内存地址0x7C00处,并跳转到此处开始执行,不管MBR里的代码是什么。
主引导记录这段在MBR内的特殊代码可能是Windows 引导装载程序,Linux 引导装载程序(比如LILO或GRUB),甚至可能是病毒。
与此不同,分区表则是标准化的:它是一个64字节的区块,包含4个16字节的记录项,描述磁盘是如何被分割的(所以你可以在一个磁盘上安装多个操作系统或拥有多个独立的卷)。
传统上,Microsoft的MBR代码会查看分区表,找到一个(唯一的)标记为活动(active)的分区,加载那个分区的引导扇区(boot sector),并执行其中的代码。