一、BIOS,启动自我测试与MBR(Master Boot Record) / GPT(GPID partiton table)
1.获取信息——当按下电源键后,系统首先就会去加载BIOS(Basic Input Output System),并通过BIOS程序去加载CMOS的信息,并且借由CMOS内的设置取得主机的各项硬件配置。
(例如CPU与接口设备的沟通频率、启动设备的查找顺序、硬盘的大小与类型、系统时间、各周边总线是否启动Plug and Play(PnP,即即插即用设备)、各设备I/O口地址、以及与CPU沟通的IRQ中断等信息)
BIOS是一个程序,这个程序是写死到主板上面的一个存储芯片中,这个存储芯片在没有通电时也能够记录数据,这就是只读存储器
2. 自我检测与数据读取——BIOS自我检测完成后,就开始执行硬件检测的初始化,并设置PnP设备,之后再定义出可启动的设备顺序,接下来就开始读取启动设备的数据
由于系统软件大多放置在硬盘中,因此BIOS会指定启动的设备以方便系统读取磁盘中的操作系统内核文件。但由于不同的操作系统它的文件格式不相同,因此必须要以一个启动引导程序来处理内核文件加载的问题,所以这个启动引导程序就被称为boot loader。而这个boot loader 就在启动设备的第一个扇区中,也就是MBR(Master Boot Record,主引导记录)
二、开始执行系统的第一个程序:systemd
systemd最主要的功能就是准备软件的执行环境,包括系统的主机名、网络设置、语言设置、文件系统格式及其他服务的启动等。而所有的操作都会通过systemd的默认启动服务集合,亦即是/lib/systemd/system/default.target来规划。
- 如前所述,当取得了/lib/systemd/system/default.target这一默认操作界面的设置后,接下系统会链接到/lib/systemd/system这个目录下去取得multi-user.target或graphical.target这其中的一个(我虚拟机里面的ubuntu 16.04默认的是graphical.target)。接下来systemd会去找两个地方的设置,即如下目录:
/etc/systemd/system/graphical.target.wants/:用户设置加载的unit
/lib/systemd/system/graphical.target.wants/:系统默认加载的unit 内容如下图所示
- 由上图可知graphical.target必须要完成multi-user.target、rescue.service、rescue.target、display-manager.service之后才能够进行,而进行完graphical.target之后还得要启动display-manager.service才行。再看multi-user.target要执行完毕需要加载的项目有哪些:(下图一主要为multi-usr.target依赖的操作环境)
- 通过上面的结果可知,multi-user.target需要在basic.target、rescue.service、rescue.target运行完毕后才能够加载上述许多unit,然后再去basic.target里面去找数据等,最终这些数据就可以通过【systemctl list-dependencies graphical.target】这个命令来列出所以相关性的服务,这就是systemd的调用所需要的服务流程。