X86平臺系統啟動流程 (Blog 9)

POST –> BootSeqence(BIOS) –> Bootloader(MBR) –> Kernel(initrd) –> init(/etc/inittab)

適用環境:MBR類的X86PC兼容架構;不適用于其它架構或UEFI的PC架構;

系統組成:
Mage1

內核功能
文件系統、進程管理、網絡協議棧、內存管理、驅動、安全加密
內核功能實現通過內核模塊;裝載模塊就有此功能,不裝載就沒有此功能;

內核特點
支持模塊化
支持動態裝載或卸載
使用緩沖和緩存來加速對磁盤上的文件訪問

操作系統的組成

運行中的內核
Kernel + 根文件系統
內核空間 + 用戶空間

從磁盤的視角
內核只是一個靜態文件;

如何將一個靜態的內核啟動起來?
啟動:將內核加載至內存中,運行起來;
沒有那么契機,沒有唐僧揭去壓猴石條,猴子是蹦不出來的;

內核通過根文件系統的驅動關聯根文件系統;文件系統驅動在根上;
內核需要自帶驅動:
如果是自己使用:僅編譯進一個硬盤的驅動;

如果是所有人都使用這個內核:就要將所有的硬盤的驅動全部編譯進內核;缺點:內核體積大。
為了解決這個問題:通過ramdisk一個臨時的根文件系統,僅有當前系統獨有的驅動,在操作系統安裝后動態生成;

注意:ramdisk并非是必須的,完全可以將驅動編譯進內核供自己使用;

內核的組成:
內核文件: /boot/vmlinuz-VERION-release
根文件系統: 遵循FHS層級結構標準,內核啟動后關聯的分區;有bin, sbin, lib, lib64, etc, proc, sys, var, usr等目錄
內核模塊:/lib/modules/VERSION-release/ 目錄下有各種驅動,為實現內核功能,例如:文件系統模塊;網絡協議棧;安全加密;內核管理;等;
磁盤映像:/boot/initrd-VERSION-release.img 或 /boot/initramfs-VERSION-release.img

ramdisk:基于內存中的磁盤映像
CentOS5: initrd
CentOS6,7: initramfs

區別:
initrd: 基于內存中的磁盤映像
initramfs: 基于內存中的文件系統

內核特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問
所有initrd本身在內存中,仍需要緩沖一次;
initramfs:本身是文件系統不需要再緩沖;

完整的系統啟動流程
內核空間 –> 用戶空間

CentOS 系統啟動流程

LILO啟動次序:POST –> bootloader –> kernel(ramdisk) –> init(/etc/inittab)
GRUB啟動次序:POST –> bootloader(1st) –> grub(2nd) –> kernel(ramdisk) –> init(/etc/inittab)

POST(Power On SafeTesting)
ROM芯片中COMS提供的BIOS指令完成加電自檢;
內核運行在硬件之上,硬件是提供計算能力的最基礎的保證;

Boot Seqence
BIOS從啟動次序中查找第一個可引導設備(MBR),即為本次要啟動的設備

Bootloader
MBR前446Bytes是Bootloader;
Bootloader功能:提供一個菜單,允許用戶選擇要啟動的系統或不同內核版本;把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后把系統控制權移交給內核;
安裝在U盤、光盤、硬盤中第0磁盤的第0扇區

MBR組成:
446Bytes: bootloader
64Bytes: fat
4Bytes: 磁盤有效標識

Bootloader分類:
Windows:ntloader
Linux:
LILO: 用446Bytes(ASCII碼;一個1Bytes對應一個字符)寫bootloader程序是極困難的;
GRUB: 通過驅動完成加載磁盤,實現更多的功能;
GRUB 0.x: grub legacy
GRUB 1.x:grub2

Kernel
被加載至內存的內存,自解壓展開;內核初始化,即內核空間;
內核初始化:
(1) 探測可識別的所有硬件設備;
(2) 加載硬件驅動程序;有可能借助于ramdisk加載驅動;
(3) 以只讀方式掛載根文件系統;
(4) 運行用戶空間的第一個程序/sbin/init
注意:加載init后,內核只會參與發生中斷后運行內核空間代碼的過程

init(/etc/inittab文件)
init被創建,即用戶空間;人間的一切事務均由其代理完成;
設定默認運行級別
初始化
(1) 主機名
(2) 歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab中定義的所有文件系統
(5) 檢測根文件系統,重新掛載根
(6) 設備系統時間
(7) 根據/etc/sysctl.conf設置內核參數
(8) 激活lvm及軟RAID
(9) 激活swap設備
(10) 加載額外驅動
(11) 清理臨時文件,初始化過程中生成的臨時文件;
關閉和啟動服務
打印登陸提示符

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89053

(0)
逆神陽逆神陽
上一篇 2017-11-27
下一篇 2017-11-27

相關推薦

  • nginx配置文件中文文檔

    Nginx配置參數中文說明。 #定義Nginx運行的用戶和用戶組user www www; #nginx進程數,建議設置為等于CPU總核心數。worker_processes 8; #全局錯誤日志定義類型,[ debug | info | notice | warn | error | crit ]error_log /var/log/nginx/error…

    Linux干貨 2017-08-08
  • 系統基礎之shell腳本編程詳解2

    shell腳本編程2:   在上節我們介紹了shell腳本編程,但只是介紹了基礎的內容,下面將為大家介紹shell的腳本的高級用法,判斷與循環.判斷分為兩種:if語句和case語句;循環分為三種:for語句,while語句,until語句,select語句 判斷語句:  在腳本的編寫中,我們要使用大量的數據和命令,但對于使用的數據,我們要…

    Linux干貨 2016-08-19
  • 馬哥教育-第一周作業

    第一部分:計算機組成及功能 電子真空管的出現促使了計算機的誕生; 根據馮●諾依曼的哲學思想,計算機的組成分為五大部分。分別為: 1.     運算器 2.     控制器 3.     存儲器 4.   &nb…

    Linux干貨 2016-12-04
  • netstat

    netstat命令 netstat 命令用于顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等 1 常用選項: -a :(all)顯示所有選項,默認不顯示LISTEN相關 -t :(tcp)僅顯示tcp相關選項 -u :(…

    Linux干貨 2017-05-07
  • Python內置數據結構

    Python內置數據結構 數值型 Int,float,complex,bool 序列對象 字符串:str ?列表:list ??數組:tuple 鍵值對 集合:set ???字典:dict 數值型 Int,float,complex,bool都是class,1,5.0,2+3j都是對象即示例 Int:python3的int就是長整形,且沒有大小限制,受限于內…

    Linux干貨 2018-03-26
  • 進入linux世界的初步認識

    1、 描述計算機的組成及其功能.
    2、 按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別.
    3、 描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述.
    4、 說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相應的示例來闡述.
    5、 如何在Linux系統上獲取命令的幫助信息,請詳細列出,并描述man文檔的章節是如何劃分的.
    6、 請羅列Linux發行版的基礎目錄名稱命名法則及功用規定.

    Linux干貨 2018-02-25
欧美性久久久久