剑指offer <二> 开机流程,模块管理与 Loader

一. 开机流程一览

  1. 載入 BIOS 的硬體資訊與進行自我測試,並依據設定取得第一個可開機的裝置,此時就可以讀入開機管理程式了
  2. 讀取並執行第一個開機裝置內== MBR 的 boot Loader==(亦即是 grub2, spfdisk 等程式);
  3. 依據 boot loader 的設定載入 Kernel ,Kernel 會開始偵測硬體與載入驅動程式
  4. 在硬體驅動成功後,Kernel 會主動呼叫 systemd 程式,並以 default.target 流程開機;
    systemd 執行 sysinit.target 初始化系統及 basic.target 準備作業系統;
    systemd 啟動 multi-user.target 下的本機與伺服器服務;
    systemd 執行 multi-user.target 下的 /etc/rc.d/rc.local 檔案;
    systemd 執行 multi-user.target 下的 getty.target 及登入服務;
    systemd 執行 graphical 需要的服務

备注:開機管理程式可以指定使用哪個核心系统(Linux/Windos等)來開機

二. Boot Loader 的功能

2.1 boot loader 主要的功能如下:

  • 提供選單:使用者可以選擇不同的開機項目,這也是多重開機的重要功能!
  • 載入核心檔案:直接指向可開機的程式區段來開始作業系統;
  • 轉交其他 loader:將開機管理功能轉交給其他 loader 負責。

boot loader 安裝在 MBR, boot sector 與作業系統的关系:
boot loader 安裝在 MBR, boot sector 與作業系統的关系

開機管理程式的選單功能與控制權轉交功能示意圖 :
開機管理程式的選單功能與控制權轉交功能示意圖

  • 選單一:MBR(grub2) --> kernel file --> booting

  • 選單二:MBR(grub2) --> boot sector(Windows loader) --> Windows kernel --> booting

  • 選單三:MBR(grub2) --> boot sector(grub2) --> kernel file --> booting

  • Loader 的最主要功能是要認識作業系統的文件格式並據以載入核心到主記憶體中去執行

2.2 ???问题总结

  1. 必須要使用自己的 loader 才能夠載入屬於自己的作業系統核心

不同作業系統的文件格式不一致,因此每種作業系統都有自己的 boot loader 。

  1. 系統的 MBR 只有一個,那你怎麼會有辦法同時在一部主機上面安裝 Windows 與 Linux 呢?

由於具有選單功能,因此我們可以選擇不同的核心來開機。而由於具有控制權轉交的功能,因此我們可以載入其他 boot sector 內的 loader 。

  1. 为什么會特別強調先裝 Windows 再裝 Linux ?

Windows 的 loader 預設不具有控制權轉交的功能,因此你不能使用 Windows 的 loader 來載入 Linux 的 loader 。

三 . 載入核心偵測硬體與 initramfs 的功能

BIOS 與 boot loader 及核心載入流程示意圖:
在这里插入图片描述如上圖所示,boot loader 可以載入 kernel 與 initramfs ,然後在記憶體中讓 initramfs 解壓縮成為根目錄, kernel 就能夠藉此載入適當的驅動程式,最終釋放虛擬檔案系統,並掛載實際的根目錄檔案系統,就能夠開始後續的正常開機流程。

四. 常見的操作環境 target 與相容於 runlevel 的等級

4.1 作為預設的操作環境 (default.target) 的主要項目有:

  • multi-user.target
  • multi-user.target
[root@study ~]# ll -d /usr/lib/systemd/system/runlevel*.target | cut -c 28-
May  4 17:52 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
May  4 17:52 /usr/lib/systemd/system/runlevel1.target -> rescue.target
May  4 17:52 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
May  4 17:52 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
May  4 17:52 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
May  4 17:52 /usr/lib/systemd/system/runlevel5.target -> graphical.target
May  4 17:52 /usr/lib/systemd/system/runlevel6.target -> reboot.target
SystemVsystemd
init 0systemctl poweroff
init 1systemctl rescue
init [234]systemctl isolate multi-user.target
init 5systemctl isolate graphical.target
init 6systemctl reboot

4.2 init命令

  • init是Linux系统操作中不可缺少的程序之一
  • init进程,它是一个由内核启动的用户级进程。
  • 内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。
  • 内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

4.3 init一共分为7个级别,这7个级别的所代表的含义如下:

  • 0:停机或者关机(千万不能将initdefault设置为0) # 对应的系统会运行,/etc/rc.d/rc0.d里指定的程序两个进程是killall和halt,这两个都表示为终止进程。
  • 1:单用户模式,只root用户进行维护 # 对应的系统会运行,/etc/rc.d/rc1.d里指定的程序——udev、lvm相关的和single(单用户模式的服务)。
  • 2:多用户模式,不能使用NFS(Net File System) # 对应的系统会运行,/etc/rc.d/rc2.d里指定的程序 —— NetworkManager/iptables/acpid/alsa都已经开启,但是nfs,smb,openvpn相关服务没有开启,这个级别不支持nfs。
  • 3:完全多用户模式(标准的运行级别) # 对应的系统运行/etc/rc.d/rc3.d里指定的程序 ——这个级别nfs服务是开启的,被成为完全多用户模式。
  • 4:安全模式
  • 5:图形化(即图形界面)
  • 6:重启(千万不要把initdefault设置为6) # 对应的系统运行/etc/rc.d/rc6.d/里指定的程序 ——这个级别里,只有两个服务,一个为killall,一个是reboot,即,关闭现在的系统,重启。

5. systemd 的處理流程

當我們取得了 /etc/systemd/system/default.target 這一個預設操作界面的設定之後,接下來系統幫我們做了什麼呢?

  1. 首先,它會連結到 /usr/lib/systemd/system/ 這個目錄下去取得 multi-user.target 或 graphical.target 這兩個其中的一 (當然, 鳥哥說的是正常的進入 Linux 操作環境的情況下!),假設我們是使用 graphical.target 好了。
  2. 接著下來 systemd 會去找兩個地方的設定, 就是如下的目錄:

/etc/systemd/system/graphical.target.wants/:使用者設定載入的 unit
/usr/lib/systemd/system/graphical.target.wants/:系統預設載入的 unit

  1. 再由 /usr/lib/systemd/system/graphical.target 這個設定檔內發現如下的資料:
[root@study ~]# cat /usr/lib/systemd/system/graphical.target
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
Wants=display-manager.service
AllowIsolate=yes

[Install]
Alias=default.target
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值