您好,登錄后才能下訂單哦!
POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init
/sbin/init [/etc/inittab或/etc/init/*.conf]--> /etc/rc.d/rc.sysinit --> /etc/rc.d/rc0-9.d --> /etc/rc.local
設置默認運行級別 --> 運行系統初始化腳本,完成系統初始化 --> 關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務 --> 設置登錄終端 --> 啟動圖形終端
一:post加電自檢,將BIOS映射進CPU可以查找的線性地址空間,使得cpu可以讀取主板上rom設備中的BIOS程序,通過rom加載內存(ram)并檢查當前設備硬件是否存在
二:BootSequence按次序查找各引導設備,根據BIOS中設置的啟動次序去加載對應設備的MBR
三:bootloader根據MBR的分區表,查找操作系統所在的分區,并通過grub加載操作系統的內核,此時將內核裝載入內存,在內存中解壓縮
四:kernel進行自身初始化,探測可識別的硬件設備,并借助ramdisk加載boot目錄下的initrd或initramfs文件中裝載驅動模塊(ramdisk中包含著initrd或initramfs)
五:以只讀方式掛載根文件系統
六:運行/etc/inittab中的程序設定默認運行級別
七:運行/etc/rc.d/rc.sysinit系統初始化腳本
八:運行/etc/rc.d/rc0-9.d 關閉或啟動對應級別下的服務
九:運行/etc/rc.local系統初始化完成以后,程序自動加載的最后一個腳本
一:POST加電自檢將BIOS映射進CPU可以查找的線性地址空間,使得cpu可以讀取主板上rom設備中的程序BIOS,通過rom加載內存(ram)并檢查當前設備硬件是否存在
二:BootSequence按次序查找各引導設備,根據BIOS中設置的啟動次序去加載對應設備的MBR
MBR:Master Boot Record (512bytes)
446bytes:存放bootloader
64bytes:存放分區表
2byte:判斷MBR是否有效的標識55AA為有效
三: bootloader:引導加載器,程序
提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本; 把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后把系統控制權移交給內核;
(1)Windows上引導加載器:ntloader
(2)Linux上引導加載器:
LILO:古老的linux加載器,1024柱面之后無法加載,繼而被grub所取代,現在多用于安卓手機啟動
grub:提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本, 把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后把系統控制權移交給內核;
stage1:grub第一階段存在MBR中,用于引導stage2
stage1_5:在MBR之后的扇區中,識別常見的不同的文件系統的
stage2:位于/boot/grub目錄下,配置文件是/etc/grub.conf,功用:向上看
四:內核初始化:
當stage2被載入系統執行時,它首先會去解析grub的配置文件/boot/grub/grub.conf,然后加載內核鏡像到內存中,并將控制權轉交給內核,內核會立即初始化系統中各設備并做相關的配置工作,其中包括CPU、I/O、存儲設備等,并且以讀寫的方式掛載根文件系統,此時涉及到一個"先有雞還是先有蛋的問題"
要想訪問根文件系統(rootfs),首先就得加載根文件系統中的驅動程序,而加載驅動程序需要先掛載根文件系統。為了解決這個問題:Linux設備驅動程序的加載,有一部分驅動程序直接被編譯進內核鏡像中,另一部分則是以模塊的形式存放在initrd(ramdisk)中。內核啟動被分成了兩個階段,第一階段先執行initrd文件系統中的init,完成加載驅動模塊等任務,第二階段才會執行真正的根文件系統中的/sbin/init進程
五:/etc/inittab:設定默認運行級別
init程序在不同CentOS版本上的類型:
CentOS-5 SysV init 配置文件:/etc/inittab
CentOS-6 Upstart 配置文件:/etc/inittab /etc/init/*.conf
CentOS-7 Systemd 配置文件:/usr/lib/systemd/system, /etc/systemd/system/
六:運行系統初始化腳本,完成系統初始化
運行/etc/rc.d/rc.sysinit
(1) 設置主機名;
(2) 設置歡迎信息;
(3) 激活udev和selinux;
(4) 掛載/etc/fstab文件中定義的所有文件系統;
(5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統;
(6) 設置系統時鐘;
(7) 根據/etc/sysctl.conf文件來設置內核參數;
(8) 激活lvm及軟raid設備;
(9) 激活swap設備;
(10) 加載額外設備的驅動程序;
(11) 清理操作;
七:關閉或啟動對應級別下的服務/etc/rc.d/rc#.d
0-6:共7個級別;
0:關機, shutdown
1:單用戶模式(single user),root用戶,無須認證;維護模式;
2:多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS;維護模式;
3:多用戶模式(mutli user),完全功能模式;文本界面;
4:預留級別:目前無特別使用目的,但習慣以同3級別功能使用;
5:多用戶模式(multi user), 完全功能模式,圖形界面;
6:重啟,reboot
1) 默認級別:3, 5
2) 級別切換:init #
3) 級別查看命令:who -r ; runlevel
八:運行/etc/rc.local系統初始化完成以后,程序自動加載的腳本
系統啟動最后執行的一個腳本
九:啟動終端
tty1:2345:respawn:/usr/sbin/mingetty tty1
... ...
tty6:2345:respawn:/usr/sbin/mingetty tty6
(1)mingetty會調用login程序;
(2)打開虛擬終端的程序除了mingetty之外,還有諸如getty等;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。