在计算中,引导用来启动计算机或计算机设备,直到它可以被使用。它可以由硬件启动,如按下按钮或软件命令完成。开机后,计算机的中央处理器(CPU)的主内存中没有软件,所以一些进程必须先将软件加载到内存中才能执行。这可以通过中央处理器中的硬件或固件来完成,或者通过计算机系统中的独立处理器来完成。
重启计算机也称为重启,重启可以是“硬”的,例如在中央处理器的电源从关闭切换到打开之后,或者是“软”的,即电源没有切断。在某些系统上,软引导可以选择性地将内存清零。硬启动和软启动都可以通过硬件启动,如按下按钮或软件命令。当操作运行时系统(通常是操作系统和一些应用程序) 达到时,引导完成。
从休眠或睡眠状态返回计算机的过程不涉及引导。最少来说,一些嵌入式系统不需要明显的引导序列就可以开始运行,并且当打开时,可以简单地运行存储在只读存储器中的操作程序。所有计算系统都是状态机,重启可能是从非预期的锁定状态返回到指定零状态的唯一方法。
除了加载操作系统或独立实用程序之外,引导过程还可以加载存储转储程序,用于诊断操作系统中的问题。
Boot是bootstrap[1][2]或bootstrap load的缩写,来源于“靠自己的bootstrap拉起来”[3][4]这句话。这种用法需要注意的是,如果大多数软件是由已经在计算机上运行的其他软件加载到计算机上的,则必须存在某种机制来将初始软件加载到计算机上。[5] 早期的计算机使用各种特殊的方法将一个小程序存入内存来解决这个问题。各种类型的只读存储器的发明解决了这一矛盾,它允许计算机附带一个无法被擦除的启动程序。只读存储器容量的增长使得更复杂的启动程序得以实施。
有许多不同的方法可以将一个简短的初始程序加载到计算机中。这些方法从简单的物理输入延伸到可移动介质,这些介质可以容纳更复杂的程序。
早期计算机
20世纪40年代和50年代的早期计算机是一种工程上的努力,可能需要几周的时间来编程,程序加载是许多必须解决的问题之一。早期的计算机ENIAC没有存储在内存中的程序,而为每个问题设置了互连电缆的配置。引导不适用于ENIAC,ENIAC的硬件配置可以在通电后立即解决问题。
EDSAC系统是要建造的第二台存储程序计算机,当按下启动按钮时,它使用步进开关将固定程序转移到内存中。大卫·惠勒(David Wheeler)在1948年末完成了通过存储在这个设备上的程序,它从穿孔带中加载了更多的指令,然后执行它们。[6][7]
第一台商用计算机
第一批用于商业销售的可编程计算机,如UNIVAC和IBM 701,[8] 包含了使其操作更简单的功能。它们通常包括执行完整输入或输出操作的指令。可以使用相同的硬件逻辑来加载穿孔卡(最典型的穿孔卡)或其他输入介质(如磁鼓或磁带)的内容,这些介质通过按下单个按钮包含引导程序。这种引导概念在20世纪50年代和60年代早期有各种各样的名称,但是在IBM 7030 Stretch中使用了术语“初始程序加载”[9] ,后来从1964年的System/360开始,它在其大型机生产线中被使用了。
IBM 701计算机(1952-1956)有一个“加载”按钮,根据加载选择器开关的位置,从读卡器中的穿孔卡、磁带机中的磁带或磁鼓单元开始向主存储器中读取第一个36位字。然后,左边的18位半字作为指令执行,通常会将附加字读入内存。[10][11] 加载的引导程序随后被执行,这反过来又将更大的程序从该介质加载到存储器中,而无需操作员的进一步帮助。至少从1958年起,“boot”一词就在这个意义上使用了。[12]
那个时代的其他IBM计算机也有类似的特点。例如,IBM 1401系统(约1958年)使用读卡器从穿孔卡加载程序。存储在穿孔卡中的80个字符被读入存储单元001至080,然后计算机将跳转到存储单元001以读取其第一存储指令。该指令始终是相同的:将前80个存储位置中的信息移动到一个组装区域,在那里穿孔卡2、3、4等中的信息可以被组合以形成存储的程序。一旦该信息被移动到组装区域,机器将转移到位置080的指令(读取卡),下一张卡将被读取并处理其信息。
另一个例子是IBM 650 (1953),一种十进制机器,它的操作面板上有十个10位开关,这些开关可以作为存储字(地址8000)寻址,也可以作为指令执行。因此,将开关设置为7004000400并按下适当的按钮将读卡器中的第一张卡读入存储器(操作码70),从地址400开始,然后跳到400开始在该卡上执行程序。[13]
IBM的竞争对手也提供单按钮程序加载。
一个值得注意的变化是在巴勒斯(Burroughs )B1700上发现的,那里既没有引导只读存储器,也没有硬连线IPL操作。相反,在系统复位后,它从安装在前面板上的磁带机中顺序读取和执行操作码;这将在内存中设置一个引导加载程序,然后执行。然而,由于这很少对系统作出假设,因此它同样可以很好地用于加载诊断(维护测试例程)磁带,即使在严重的中央处理器故障的情况下,这些磁带也可以在前面板上显示可理解的代码。
IBM系统/360及其后续产品
在IBM System/360及其后继系统中,包括当前的z/架构机器,引导过程被称为初始程序加载(IPL)。
国际商用机器公司(IBM)为7030(Stretch)[9] 创造了这个术语,为System/360的设计重新启用了它,并在今天的环境中继续使用它。[16] 在System/360处理器中,通过选择三个十六进制数字设备地址(CUU;c =输入/输出通道地址,UU =控制单元和设备地址),然后按下加载按钮。在高端System/360型号、大多数 System/370和一些更高版本的系统中,开关和加载按钮的功能是使用图形控制台屏幕上的可选区域来模拟的,图形控制台通常 是类似于IBM 2250的设备或类似于IBM 3270的设备。例如,在系统/370型号158上,键盘序列0-7-X(依次为0、7和X)从键入输入区域的设备地址产生一个IPL。Amdahl 470V/6和相关的处理器在安装了可选第二通道单元的处理器上支持四个十六进制数字,总共32个通道。后来,IBM还将支持16个以上的渠道。
System/360及其后继系统中的IPL功能,以及它的兼容性产品,如Amdahl,从实际地址0开始,从操作员指定的设备读取24字节到主存储器。第二和第三组八字节被视为通道命令字(CCW),以继续加载启动程序(第一个CCW总是由中央处理器模拟,并由读取IPL命令02h组成,命令链接和抑制不正确的长度指示被强制执行)。当输入/输出通道命令完成时,第一组八个字节随后被加载到处理器的程序状态字(PSW)中,启动程序在该PSW指定的位置开始执行。[16] IPL设备通常是磁盘驱动器,因此02h读类型命令具有特殊的意义,但是也可以使用完全相同的过程来以独立于设备的方式从其他输入类型设备(例如磁带驱动器,甚至读卡器)进行IPL,例如,允许从操作系统初始分发磁带在全新的计算机上安装操作系统。对于磁盘控制器,02h命令还使所选设备搜索磁盘柱面0000h,磁头0000h,模拟搜索磁盘柱面命令07h,并搜索记录01h,模拟搜索标识相等命令31h磁带和卡控制器不会模拟寻道和搜索,因为对于这些设备类别,02h命令只是顺序读取命令,而不是读取IPL命令。
磁盘、磁带或卡片组必须包含一个特殊的程序,以将实际操作系统或独立实用程序加载到主存储器中,为此目的,“IPL文本”由独立的DASDI(直接存取存储设备初始化)程序或在操作系统(例如ICKDSF)下运行的等效程序放置在磁盘上,但可IPL的磁带和卡片组通常与已经存在的该“IPL文本”一起分发。
小型计算机
小型计算机,从数字设备公司(DEC)的PDP-5和PDP-8 (1965)开始,通过使用中央处理器来辅助输入和输出操作从而简化了设计。这节省了成本,但使启动比按一个按钮更复杂。小型计算机通常可以通过操纵前面板上的一系列开关来切换短程序。由于早期的小型计算机使用磁芯存储器,当电源关闭时,磁芯存储器不会丢失信息,因此这些引导加载程序将保持不变,除非它们被擦除。当程序错误导致覆盖所有内存的循环时,擦除有时会意外发生。
其他具有这种简单引导形式的小型计算机包括惠普的惠普2100系列(20世纪60年代中期)、Data General Nova (1969年)和DEC的PDP-11 (1970年)。
DEC后来为PDP-11增加了一个可选的二极管矩阵只读存储器,它存储了一个最多32个字(64字节)的引导程序。它由一个印刷电路卡M792组成,它插在Unibus上,并装有一个32×16的半导体二极管阵列。所有512个二极管到位后,存储器包含所有“1”位;该卡通过切断每个位为“0”的二极管进行编程。DEC还销售了BM792-Yx系列卡的版本,通过简单地省略不需要的二极管,为许多标准输入设备预编程。[17]
按照旧的方法,早期的PDP-1有一个硬件加载器,这样操作者只需按下“加载”开关,就能指示纸带阅读器将程序直接加载到核心存储器中。数据通用超新星(Data General Supernova)使用前面板开关,使计算机自动将指令从前面板数据开关指定的设备加载到内存中,然后跳转到加载的代码;Nova 800和1200有一个开关,它将程序从一个特殊的只读存储器加载到主存储器中,然后跳转到主存储器。[18]
早期小型计算机引导加载程序示例
在带有纸带阅读机的小型计算机中,引导过程中运行的第一个程序,即引导加载程序,将把第二级引导加载程序(通常称为二进制加载程序)读入核心内存,该程序可以从外部存储介质读取带校验和的纸带,也可以读取操作系统。引导加载程序的伪代码可能像以下八条指令一样简单:
一个相关的例子是基于20世纪70年代尼科莱(Nicolet)仪器公司小型计算机的加载器,使用电传打字机33型ASR电传打字机上的纸带阅读器打孔单元。其第二级加载器的字节以相反的顺序从纸带中读取。
第二阶段加载器的长度使得最后一个字节覆盖位置7。在位置6中的指令执行之后,位置7开始执行第二阶段加载器。然后,第二阶段加载器等待包含操作系统的更长的磁带放入磁带读取器。引导加载器和第二阶段加载器之间的区别在于添加了检查代码来捕获纸带读取错误,这种错误在成本相对较低的“兼职”硬件中经常发生,例如电传打字机33 ASR。(Friden Flexowriters要可靠得多,但也相对昂贵。)
启动第一台微型计算机
最早的微型计算机,如阿尔泰(Altair )8800(1975年首次发布)和更早的类似机器(基于英特尔8008处理器)没有引导硬件。[19] 启动时,中央处理器将会看到内存中只包含二进制零的可执行代码——上电时通过复位来清除内存。这些机器的前面板带有用于输入地址和数据的拨动开关,计算机存储字和地址总线的每一位有一个开关。对硬件的简单添加允许一次从这些交换机加载一个内存位置来存储引导代码。同时,中央处理器被阻止尝试执行内存内容。一旦正确加载,中央处理器就能够执行引导代码。这个过程是繁琐的,必须没有错误。[20]
小型计算机和微型计算机的引导过程 因集成电路只读存储器的引入而发生了革命性的变化,集成电路只读存储器有许多变体,包括屏蔽编程只读存储器、可编程只读存储器、可擦除可编程只读存储器和闪存。这使得固件引导程序作为计算机的一部分。一种(外部)只读存储器的引入是在一种意大利电话交换设备中进行的,这种设备被称为“格鲁皮专用设备(Gruppi Speciali)”,于1975年获得加拿大英语教学研究所研究员阿尔韦托·恰拉米拉(Alberto Ciaramella)的专利。[21] 从1975年开始,Gruppi Speciali是一台完全单按钮的机器,它从半导体构成的只读存储器启动到操作系统,而不是从铁氧体磁心启动。虽然只读存储器设备并不是天生嵌入在Gruppi Speciali的计算机中,但由于机器的设计,它也允许在非专门设计的机器中引导单按钮只读存储器(因此,这个“引导设备”是独立于体系结构的),例如PDP-11。关机后存储机器的状态也已就绪,这是电话交换竞争的另一个关键特征。[22]
通常,每个微处理器将在复位或通电条件后执行启动过程,该启动过程通常采取“从特定地址开始执行代码”或“在特定地址寻找多字节代码并跳转到指定位置开始执行”的形式。使用该微处理器构建的系统将具有占据这些特殊位置的永久只读存储器,因此该系统总是在没有操作员帮助的情况下开始运行。例如,英特尔x86处理器总是从运行从F000:FFF0开始的指令开始,[23][24] 而对于MOS 6502处理器,初始化是从读取$FFFD(字节)和$FFFC(字节)的两字节向量地址开始,并跳转到该位置运行引导代码。[25]
苹果公司的第一台电脑,苹果1号于1976年推出,采用了可编程只读存储器芯片,无需在商用电脑上安装前面板进行引导(就像阿尔泰(Altair )8800一样)。根据苹果公司宣布“不再有开关,不再有灯”的广告……PROMS中的固件使您能够从键盘输入、显示和调试程序(都是十六进制的)。”[26]
由于当时只读存储器的开销,苹果二代使用一系列非常小的增量步骤引导其磁盘操作系统,每个步骤都将控制权向前传递到逐渐更复杂的引导过程的下一阶段。因为磁盘操作系统很少依赖只读存储器,所以硬件也非常灵活,并且支持各种定制的磁盘复制保护机制。
一些操作系统,尤其是苹果公司1995年以前的麦金塔(Macintosh )系统,与其硬件紧密交织在一起,以至于除了标准操作系统之外,不可能从本机启动其他操作系统。这与使用上述开关的情况相反;只要所有硬件都正常工作,它就非常不灵活,但相对来说是防错和万无一失的。在这种情况下,一个常见的解决方案是设计一个引导加载程序,它作为一个属于标准操作系统的程序工作,劫持系统并加载替代操作系统。这项技术被苹果公司用于它的UX Unix实现,并被各种免费软件操作系统和BeOS个人版5复制。
有些机器,像雅达利科技(Atari)的微型计算机,是“即时开启”的,操作系统从只读存储器中执行。因此,从二级或三级存储中检索操作系统不再是引导的特征操作之一。为了允许自动加载系统定制、附件和其他支持软件,在引导过程中读取雅达利(Atari)软驱中的其他组件。系统搜索额外组件时,超时延迟为手动插入软盘提供了时间。这可以通过插入空白磁盘来避免。雅达利(Atari)科技硬件的设计也是为了使盒式插槽能够为游戏目的提供本地程序执行,作为雅达利(Atari)传统电子游戏的延续;通过将带有麦金塔系统(Macintosh )只读存储器的幽灵GCR卡盒插入游戏插槽并打开雅达利,它可以“本机启动”麦金塔操作系统,而不是雅达利自己的TOS。
IBM个人计算机包括基于只读存储器的固件,称为基本输入输出系统(BIOS);该固件的功能之一是在机器通电时执行通电自检,然后从引导设备读取软件并执行。与个人电脑上的基本输入输出系统兼容的固件用于个人电脑兼容的电脑。可扩展固件接口是由英特尔开发的,最初是为基于安腾(Itanium)的机器开发的,后来也作为x86机器的基本输入输出系统的替代,包括使用英特尔处理器的苹果电脑。
Unix工作站最初有供应商特定的基于只读存储器的固件。太阳微系统(Sun Microsystems)公司后来开发了OpenBoot,后来被称为开放固件,它包含了一个Foth解释器,大部分固件都是用Foth编写的。它被IEEE标准化为IEEE标准1275-1994;实现该标准的固件被用于基于PowerPC的苹果机和其他一些基于PowerPC的机器,以及Sun自己的基于SPARC的计算机。高级RISC计算规范定义了另一个固件标准,该标准在一些基于MIPS和阿尔法的机器以及基于x86的SGI可视化工作站上实现。
当计算机关闭时,它的软件——包括操作系统、应用程序代码和数据存储在非易失性存储器中。当计算机开机时,它通常没有操作系统或随机存取存储器中的加载程序。计算机首先执行存储在只读存储器中的相对较小的程序以及少量所需的数据,以访问非易失性设备,操作系统程序和数据可以从这些设备加载到随机存取存储器中。
启动这个序列的小程序称为引导加载程序、引导或引导加载程序。这个小程序的唯一任务是加载其他数据和程序,然后从内存中执行。通常使用多级引导加载器,在此期间,在链式加载过程中,几个增加复杂性的程序一个接一个地加载。
一些计算机系统在接收到来自操作员或外围设备的引导信号后,可以将非常少量的固定指令加载到特定位置的存储器中,初始化至少一个中央处理器,然后将中央处理器指向指令并开始它们的执行。这些指令通常从一些外围设备开始输入操作(操作者可以切换选择)。其他系统可以直接向外围设备或输入/输出控制器发送硬件命令,使得执行极其简单的输入操作(例如“从位置1000开始将系统设备的扇区0读取到存储器中”),有效地将少量引导加载器指令加载到存储器中;然后,来自输入/输出设备的完成信号可用于开始由中央处理器执行指令。
较小的计算机通常使用不太灵活但更自动的引导加载器机制,以确保计算机快速启动并具有预定的软件配置。例如,在许多台式计算机中,引导过程始于中央处理器在预定义的地址执行包含在只读存储器(例如,IBM个人计算机的基本输入输出系统)中的软件(包括英特尔x86系列在内的一些中央处理器被设计为在复位后在没有外部帮助的情况下执行该软件)。该软件包含基本功能,用于搜索有资格参与引导的设备,并从最有希望的设备的特殊部分(最常见的是引导扇区)加载小程序,通常从固定的入口点(例如扇区的起点)开始。
引导加载程序可能面临特殊的限制,尤其是在大小上;例如,在IBM PC机和兼容机上,引导扇区通常只能在32 KB[27](后来放宽到64 KB[28])的系统内存中工作,并且不使用原始8088/8086处理器不支持的指令。位于固定磁盘和可移动驱动器上的第一级电脑引导加载程序(FSBL,第一级引导加载程序)必须能放入主引导记录的前446字节,以便为默认的64字节分区表(具有四个分区条目和两字节引导签名)留出空间,这是BIOS正确引导加载程序所需的,当附加功能如多于四个分区条目(最多16个,每个16字节)时,或者甚至更少的字节中,磁盘签名(6字节)、磁盘时间戳(6字节)、高级活动分区(18字节)或特殊的多重引导加载程序在某些环境中也必须得到支持。在软盘和超级卷引导记录中,自DOS 4.0以来,FAT12和FAT16卷上的扩展BIOS参数块最多占用59个字节,而DOS 7.1引入的FAT32 EBPB甚至需要71个字节,当假设扇区大小为512个字节时,引导加载程序只剩下441个字节。因此,微软引导扇区传统上对引导过程施加某些限制,例如,引导文件必须位于文件系统根目录中的固定位置,并作为连续扇区存储,条件由SYS命令处理,在较高版本的DOS中稍有放松限制。然后,引导加载程序能够将文件的前三个扇区加载到内存中,而内存恰好包含另一个能够将文件的剩余部分加载到内存中的嵌入式引导加载程序。当他们添加LBA和FAT32支持时,他们甚至使用386条指令切换到两个扇区的引导加载器。与此同时,其他供应商设法将更多功能压缩到一个引导扇区中,而没有放松最初对仅有的最小可用内存和处理器支持的限制。例如,DR-DOS引导扇区能够在FAT12、FAT16和FAT32文件系统中定位引导文件,并通过CHS或LBA将其作为一个整体加载到内存中,即使文件没有存储在固定位置和连续扇区中。
第一阶段引导加载器的例子包括coreboot、Libreboot和Das U-Boot。
第二阶段引导加载程序,如GNU GRUB、BOOTMGR、Syslinux、NTLDR或BootX,本身不是操作系统,但能够正确加载操作系统并将执行转移到操作系统;操作系统随后初始化自己,并可以加载额外的设备驱动程序。第二阶段引导加载程序本身不需要驱动程序,而是可以使用由系统固件(如BIOS或开放固件)提供的通用存储访问方法,尽管通常硬件功能受限且性能较低。[29]
许多引导加载程序(如GNU GRUB、Windows的BOOTMGR和WindowsNT/2000/XP的NTLDR)可以被配置为给用户多个引导选择。这些选择可以包括不同的操作系统(用于从不同的分区或驱动器进行双重或多重引导)、相同操作系统的不同版本(以防新版本出现意外问题)、不同的操作系统加载选项(例如,引导到救援或安全模式),以及一些可以在没有操作系统的情况下运行的独立程序,例如内存测试器(例如,memtest86+)、基本外壳(如GNU GRUB),甚至游戏(参见电脑引导程序游戏列表)。[30] 一些引导加载程序也可以加载其他引导加载程序;例如,GRUB加载BOOTMGR,而不是直接加载Windows。通常,默认选择是在一个时间延迟中被预先选定的,在此期间,用户可以按键来更改选择;经过这一延迟后,默认选项会自动运行,这样就可以在没有交互的情况下正常启动。
当计算机准备好与用户交互,或者操作系统能够运行系统程序或应用程序时,可以认为引导过程已经完成。
许多嵌入式系统必须立即启动。例如,等待一分钟数字电视或全球定位系统导航设备启动通常是不可接受的。因此,这种设备在只读存储器或闪存中具有软件系统,因此设备可以立即开始运行;很少或没有加载是必要的,因为在制造设备时,加载可以预先计算并存储在只读存储器中。
大型复杂系统的引导过程可能会分多个阶段进行,直到最终操作系统和其他程序被加载并准备执行。因为操作系统的设计就好像它们从不启动或停止一样,引导加载程序可能会加载操作系统,将自身配置为该系统中的一个进程,然后不可撤销地将控制权转移给操作系统。然后,引导加载程序像任何其他进程一样正常终止。
大多数计算机也能够通过计算机网络启动。在这种情况下,操作系统存储在服务器的磁盘上,它的某些部分使用简单的协议(如简单文件传输协议(TFTP))传输到客户端。这些部分转移后,操作系统接管引导过程的控制。
与第二阶段引导加载程序一样,网络引导通过使用网络接口引导只读存储器提供的通用网络访问方法开始,该只读存储器通常包含预引导执行环境(PXE)映像。不需要驱动程序,但是在操作系统内核和驱动程序被转移和启动之前,系统功能是有限的。因此,一旦基于只读存储器的引导完成,就完全有可能将网络引导到本身没有能力使用网络接口的操作系统中。
Windows To Go可启动闪存驱动器,一个Live USB示例
引导设备是加载操作系统的设备。现代电脑的UEFI或BIOS固件支持从各种设备引导,通常是本地固态驱动器或硬盘驱动器,通过GPT或主引导记录(MBR)在这样的驱动器或磁盘上引导,光盘驱动器(使用El Torito),通用串行总线大容量存储设备(基于FTL的闪存驱动器,SD卡,或多媒体卡插槽;硬盘驱动器、光盘驱动器等。),或者网络接口卡(使用PXE)。旧的、不太常见的BIOS引导设备包括软盘驱动器、SCSI设备、Zip驱动器和LS-120驱动器。
通常,固件(UEFI或BIOS)将允许用户配置引导顺序。如果引导顺序设置为“第一,光驱;第二,硬盘驱动器”,然后固件将尝试从光盘驱动器引导,如果失败(例如,因为驱动器中没有光盘),它将尝试从本地硬盘驱动器引导。
例如,在硬盘上安装了Windows XP的电脑上,用户可以将引导顺序设置为上面给出的顺序,然后插入一张Linux实时光盘,以便在不需要在硬盘上安装操作系统的情况下试用Linux。这是双重引导的一个例子,用户在计算机执行开机自检(POST)后选择启动哪个操作系统。在这个双重引导的例子中,用户通过插入光盘或从计算机中取出光盘进行选择,但是更常见的是通过使用计算机键盘从BIOS或UEFI引导菜单中选择引导哪个操作系统;开机自检期间,通常通过按Delete 键或 F11 键进入引导菜单。
有几种设备可以让用户快速启动到通常是不同版本的Linux中,执行各种简单的任务,如访问互联网;这样的例子有:Splashtop 和 Latitude ON。[31][32][33]
启动时,一台与IBM兼容的个人电脑的x86中央处理器以实模式执行位于复位向量的指令(16位x86处理器上[34] 的物理内存地址FFFF0h和32位和64位x86处理器上的FFFF0h[35][36]),通常指向只读存储器内的固件(UEFI或BIOS)入口点。该存储器位置通常包含转移执行到固件(UEFI或BIOS)启动程序位置的跳转指令。该程序运行开机自检(POST)来检查和初始化所需的设备,如动态随机存取存储器和PCI总线(包括运行嵌入式只读存储器)。最复杂的步骤是通过SPI设置动态随机存取存储器,由于此时内存非常有限,这一步骤变得更加困难。
初始化所需的硬件后,固件(UEFI或BIOS)会通过预配置的非易失性存储设备列表(“引导设备序列”),直到找到一个可引导的设备。可引导MBR设备被定义为可读取的设备,并且其中第一扇区的最后两个字节包含小端字AA55h,在磁盘上被发现为字节序列55h、AAh(也称为MBR引导签名),或者其中以其他方式确定扇区内的代码可在x86计算机上执行。
一旦BIOS找到可引导设备,它将引导扇区加载到线性地址7C00h(通常段:偏移量0000h:7C00h,但是一些BIOS错误地使用07C0h:0000h),并将执行转移到引导代码。就硬盘而言,这被称为主引导记录(MBR),根据定义,它不是特定于操作系统的。传统的MBR代码检查MBR的分区表中是否有可引导的分区集(设置了活动标志的分区)。如果找到活动分区,MBR代码将从该分区加载引导扇区代码,称为卷引导记录(VBR),并执行它。
VBR通常是特定于操作系统的;然而,在大多数操作系统中,它的主要功能是加载和执行操作系统内核,使其继续启动。
如果没有活动分区,或者活动分区的引导扇区无效,MBR可以加载辅助引导加载器,该加载器将选择一个分区(通常通过用户输入)并加载其引导扇区,该引导扇区通常加载相应的操作系统内核。在某些情况下,在尝试引导活动分区之前,MBR还可能尝试加载辅助引导加载程序。如果所有其他方法都失败了,它应该发出INT 18h[28] BIOS中断调用(接下来是INT 19h,以防INT 18h返回),以便将控制权交还给BIOS,然后它将尝试引导其他设备,尝试通过网络远程引导或调用只读存储器基本功能。
一些系统(尤其是较新的麦金塔和微软Windows系统的新版本)使用英特尔的EFI。此外,coreboot允许计算机在没有固件/基本输入输出系统的时候在系统管理模式下持续运行的情况下启动。某些x86操作系统需要16位基本输入输出系统接口,如DOS和Windows 3.1/95/98(以及所有不通过UEFI引导的操作系统)。然而,大多数引导加载程序保留16位基本输入输出系统调用支持。[37][38]
一些现代的处理器和微控制器(例如TI OMAP)或者有时甚至是数字信号处理器(DSP)可能有引导只读存储器(boot ROM),引导代码直接集成到它们的芯片中,所以这样的处理器可以自己执行相当复杂的引导序列,并从不同的来源加载引导程序,例如NAND闪存、SD或MMC卡等。很难通过硬连接的方式处理这些设备所需的所有逻辑,因此在这种情况下使用集成启动只读存储器。引导只读存储器的使用使得引导序列比硬连线逻辑能够提供的更灵活。例如,引导只读存储器可以尝试从多个引导源执行引导。此外,引导只读存储器通常能够通过串行接口(如通用异步收发器、串行接口、通用串行总线等)加载引导加载程序或诊断程序。当由于某些原因,非易失性存储器中通常的引导软件被擦除时,该特征通常用于系统恢复目的,并且当安装了空的非易失性存储器并且因此系统中还没有可用的软件时,该特征也可以用于初始非易失性存储器编程。
一些嵌入式系统设计还可以包括附加代码形式的中间引导序列步骤,该附加代码由集成引导只读存储器加载到系统随机存取存储器中。以这种方式加载的额外代码通常作为克服平台限制的一种方式,例如少量内存,因此专用的主引导加载程序(例如Das U-Boot)可以作为系统引导序列的下一步进行加载。附加代码和引导序列步骤通常被称为 辅助程序加载器 (SPL)。[39]
也可以通过使用硬件调试接口(如JTAG)来控制系统。这种接口可用于通过指示处理器核心执行对非易失性存储器编程的必要操作,将引导加载程序写入可引导非易失性存储器(例如闪存)。或者,调试接口可用于将一些诊断或引导代码上传到内存中,然后启动处理器内核并指示其执行上传的代码。例如,这使得没有软件保留在任何支持的引导设备上,并且处理器没有任何集成的引导只读存储器的嵌入式系统能够恢复。JTAG是一个标准和流行的接口;许多处理器、微控制器和其他设备都是用JTAG接口制造的(截至2009年)。
一些微控制器提供特殊的硬件接口,不能用于任意控制系统或直接运行代码,而是允许通过简单协议将引导代码插入可引导的非易失性存储器(如闪存)。然后在制造阶段,这种接口用于将引导代码(以及可能的其他代码)注入非易失性存储器。系统复位后,微控制器开始执行编程到其非易失性存储器中的代码,就像普通处理器使用只读存储器进行引导一样。最值得注意的是,Atmel AVR微控制器和其他器件都使用这种技术。在许多情况下,这种接口由硬连线逻辑实现。在其他情况下,这种接口可以由运行在集成片上引导只读存储器中的软件从GPIO引脚创建。
大多数数字信号处理器都有串行模式引导和并行模式引导,例如主机端口接口(HPI引导)。
在使用数字信号处理器的情况下,系统设计中通常有第二个微处理器或微控制器,负责整体系统行为、中断处理、处理外部事件、用户界面等。而数字信号处理器仅用于信号处理任务。在这样的系统中,数字信号处理器可以由另一个处理器引导,该处理器有时被称为主处理器(给主机端口命名)。这种处理器有时也被称为主机,因为它通常首先从自己的存储器引导,然后控制整个系统行为,包括引导数字信号处理器,然后进一步控制数字信号处理器的行为。数字信号处理器通常缺少自己的启动存储器,而是依靠主处理器来提供所需的代码。具有这种设计的最显著的系统是手机、调制解调器、音频和视频播放器等,其中数字信号处理器和中央处理器/微控制器共存。
许多现场可编程门阵列芯片在通电时从外部串行可编程只读存储器(“配置只读存储器”)加载其配置。
^"Bootstrap". Dictionary.com..
^"Bootstrap". TheFreeDictionary.com..
^"Pull oneself up by bootstraps - Idioms by The Free Dictionary". TheFreeDictionary.com. Retrieved 8 September 2015..
^"Bootstrap Definition". techterms.com (in 英语). Retrieved 2018-10-16..
^"Phrase Finder". phrases.org.uk..
^Campbell-Kelly, Martin (1980). "Programming the EDSAC". IEEE Annals of the History of Computing. 2 (1): 7–36..
^Wilkes, Maurice V.; Wheeler, David J.; Gill, Stanley (1951). The Preparation of Programs for an Electronic Digital Computer. Addison-Wesley..
^Buchholz, Werner (1953). "The System Design of the IBM Type 701 Computer" (PDF). Proceedings of the I.R.E. 41 (10): 1273..
^"IBM 7619 Exchange". Reference Manual 7030 Data Processing System (PDF). IBM. August 1961. pp. 125–127. A22-6530-2..
^Principles of Operation Type 701 And Associated Equipment (PDF). IBM. 1953. p. 26. Retrieved November 9, 2012..
^From Gutenberg to the Internet, Jeremy M. Norman, 2005, page 436, ISBN 0-930405-87-0.
^Oxford English Dictionary. Oxford University..
^650 magnetic drum data-processing machine manual of operation (PDF). IBM. 1955. pp. 49, 53–54..
^GE-645 System Manual (PDF). General Electric. January 1968. Retrieved December 21, 2017..
^PDP-10 System Reference Manual, Part 1 (PDF). Digital Equipment Corporation. 1969. pp. 2–72. Retrieved November 9, 2012..
^z/Architecture Principles of Operation (PDF). IBM. September 2005. Chapter 17. Retrieved 2007-04-14..
^PDP-11 Peripherals Handbook (PDF). Digital Equipment Corporation. 1976. pp. 4–25..
^How To Use The Nova Computers (PDF). Data General. October 1974. section 2.8 "Program Loading"..
^Oldcomputers: Altair 8800b.
^"Altair 8800 loads 4K BASIC from paper tape", video by Glenn Holmer.
^Ciaramella, Alberto. "Device for automatically loading the central memory of electronic processors." U.S. Patent No. 4,117,974. 3 Oct. 1978. (submitted in 1975).
^Alberto Ciaramella racconta il brevetto del boostrap dei computer concepito in CSELT [Alberto Ciaramella discusses the patent for bootstrapping computers conceived at CSELT] (in Italian).CS1 maint: Unrecognized language (link).
^Adam Osborne; Gerry Kane. Osborne 16-Bbit Microprocessor Handbook (PDF). pp. 5–27. ISBN 0-931988-43-8..
^Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3 (3A, 3B, 3C & 3D): System Programming Guide (PDF)..
^Adam Osborne; Gerry Kane. Osborne 4&8-Bit Microprocessor Handbook. pp. 10–20. ISBN 0-931988-42-X..
^Apple Ad, Interface Age, October 1976.
^Masahiko Sakamoto (May 13, 2010). "Why BIOS loads MBR into 7C00h in x86?". Glamenv-Septzen.net. Retrieved 2012-08-22..
^Compaq Computer Corporation; Phoenix Technologies Ltd; Intel Corporation (January 11, 1996). "BIOS Boot Specification 1.01" (PDF). Retrieved December 21, 2017..
^"Chapter 6 - Troubleshooting Startup and Disk Problems". Windows NT Server Resource Kit. Microsoft. Archived from the original on May 15, 2007..
^"Tint". coreboot. Retrieved 20 November 2010..
^Brown, Eric (2008-10-02). "MontaVista Linux drives Dell's quick-boot feature". linuxdevices.com. Retrieved 20 November 2010..
^Larabel, Michael (June 14, 2008). "SplashTop Linux On HP, Dell Notebooks?". Phoronix. Retrieved 20 November 2010..
^"Voodoo Envy's Instant-On IOS (powered by Splashtop)". YouTube. Retrieved 20 November 2010..
^"iAPX 286 Programmer's Reference Manual" (PDF). Intel. 1983. Section 5.3 SYSTEM INITIALIZATION, p. 5-7. Retrieved November 5, 2016. Since the CS register contains F000 (thus specifying a code segment starting at physical address F0000) and the instruction pointer contains FFF0, the processor will execute its first instruction at physical address FFFF0H..
^"80386 Programmer's Reference Manual" (PDF). Intel. 1986. Section 10.2.3 First Instructions, p. 10-3. Retrieved November 3, 2013. After RESET, address lines A31-20 are automatically asserted for instruction fetches. This fact, together with the initial values of CS:IP, causes instruction execution to begin at physical address FFFFFFF0H..
^"Intel® 64 and IA-32 Architectures Software Developer's Manual" (PDF). Intel Corporation. May 2012. Section 9.1.4 First Instruction Executed, p. 2611. Retrieved August 23, 2012. The first instruction that is fetched and executed following a hardware reset is located at physical address FFFFFFF0h. This address is 16 bytes below the processor’s uppermost physical address. The EPROM containing the software-initialization code must be located at this address..
^"Intel Platform Innovation Framework for EFI". Intel. Retrieved 2008-01-07..
^"OpenBIOS - coreboot". coreboot.org. Retrieved 2013-03-20..
^"Overview – The four bootloader stages". ti.com. Texas Instruments. December 5, 2013. Retrieved January 25, 2015..
暂无