一直好奇计算机启动的原理是怎么样的?最近刚好想搞一下操作系统,故此总结一下。
打开电源
对于现代计算机来说,打开电源是开机的第一步,这一点无用质疑,离开了电,现代社会估计就会垮台。
计算机启动
加电自检
官方说法为加电自检,简单来说就是计算机在启动的时候,会去检查一下自己的硬件环境有木有准备好,比如:CPU、内存、磁盘、显卡等是否正常工作,如果发现硬件故障就会报警或者显示错误。就跟你开车去很远的地方,首先需要看一下要不要加油,车胎有木有气,如果没油就会加油,没气就会打气是一样。
启动固件 (Bootstrap Loader)
官方说法为启动 Bootstrap Loader,通常是启动 BIOS ( 基本输入/输出系统,),BIOS存储在主板上的固件芯片中的一组程序,它负责初始化硬件设备,配置系统资源,并准备计算机进入操作系统的加载过程
BIOS初始化
BIOS 开始初始化硬件设备,包括设置时钟、检测和配置内存、初始化显示适配器和其他外设等。BIOS 还会读取 CMOS(可擦除只读存储器)中的设置,如系统时间、启动顺序等。
重装系统的时候,不知道有没有注意到有人会去调试 BIOS 的启动顺序。BIOS初始化完就是这样的。
计算机 BIOS(基本输入/输出系统)既包含硬件部分,也包含软件部分。
硬件方面,计算机的 BIOS 是存在于主板上的一片固件芯片,通常称为 BIOS 芯片或者系统固件。这个芯片包含了一些硬件电路,如时钟、存储器、接口电路等。这些硬件电路负责启动计算机、初始化硬件设备,并提供最基本的输入输出功能。
软件方面,计算机的 BIOS 包含了一套预先安装在 BIOS 芯片上的固件程序,这些程序用于控制计算机的启动过程、硬件初始化和基本的输入输出操作。这些固件程序通常以低级的机器语言或者汇编语言编写。
当计算机启动时,计算机的 BIOS 被加载到内存中,并运行其中的固件程序,负责进行启动自检(POST,Power-On Self-Test)、初始化硬件设备、检测和配置系统资源等操作。之后,BIOS 将控制权交给操作系统或其他引导程序,由它们继续处理计算机的运行。
因此,计算机的 BIOS 既包含硬件部分(BIOS 芯片和相关电路),也包含软件部分(预先安装在 BIOS 芯片上的固件程序)。它在计算机启动时扮演着重要的角色,确保计算机能够正常启动和运行。
启动设备选择
BIOS 根据 CMOS 中的设置确定启动设备的顺序。它将按照预设的启动顺序尝试读取启动设备,例如硬盘、光盘驱动器、USB 设备等。一旦找到可引导的设备,BIOS 将加载引导扇区中的引导程序。
特别是在重装系统的时候,启动设备顺序,往往会优先选择 USB 设备
引导程序(Bootloader)加载
引导程序是一个小型的程序,位于引导设备(如硬盘)的引导扇区。引导程序被加载到内存中,并负责加载操作系统的核心部分。
因为引导扇区,往往是磁盘的一个扇区,默认 512 字节,而操作系统往往好几十个G,所以需要引导程序来加载操作系统,而非引导扇区
操作系统引导加载程序执行
引导加载程序会读取操作系统引导加载程序(如GRUB或Windows引导管理器)的配置文件和设置。
启动管理器启动
操作系统引导加载程序会根据配置文件中的设置启动启动管理器。启动管理器会显示一个菜单,列出可用的操作系统选项供用户选择。
启动管理器(如GRUB或Windows引导管理器)通常是由操作系统安装程序或操作系统本身在安装过程中写入磁盘的。具体来说,当你安装操作系统时,安装程序会将启动管理器的文件和相关配置写入硬盘的特定位置。
用户选择操作系统
用户可以通过启动管理器的菜单界面选择要启动的操作系统。
这也是双系统的原理
操作系统加载
每个操作系统通常都有自己的引导程序,对应的引导程序会启动操作系统的加载过程。它会读取操作系统的核心文件(如 Windows 的 ntoskrnl.exe 或 Linux 的内核映像),将其加载到内存中,并将控制权转交给操作系统。操作系统开始初始化并准备接收用户的指令。
加载过程中,一般都会看到屏幕是黑的,但 window 会显示 圈圈一直在转。
操作系统初始化
操作系统继续启动过程,进行一系列初始化操作,如初始化设备驱动程序、建立系统数据结构、加载系统服务等。最终,操作系统会进入用户界面或登录屏幕,等待用户交互。