CentOS系列的作業系統的架構類型是X86架構,其核心實作方式是單核心,單核心的意義的在于他對外表現為一個應用程式即一個程序啟動整個系統,所有的功能都集中在這一個程序裡;而windows系列的核心實作方式是微核心,每種功能使用單獨一個子系統來實作;CentOS系列是由核心核心結合核心子產品來一起實作核心功能的,将核心所必須的功能放入核心檔案當中,而将核心不一定必須的功能放入核心子產品當中,當需要這類功能時,再将核心子產品插入核心中,在不使用時,再将核心子產品從核心中移除即可;
CentOS5系列作業系統的啟動流程:
CentOS5在啟動時,首先要進行POST加電自檢,由BIOS将ROM隻讀存儲器加載隻RAM記憶體當中,由RAM檢查ROM是否有損壞,若無,則正常啟動,若有,則啟動應急方案,當加電自檢沒有問題後,再有BIOS按一定順序去檢索BIOS中的裝置,找到第一個Bootloader,引導加載程式,則該裝置便為本次啟動所需要的裝置;Bootloader引導加載程式接手後,BIOS就退出,由Bootloader去找裝置中的核心檔案,若找到,則将核心檔案載入記憶體,至此Bootloader退出,由核心進行接下來的操作;
Bootloader,引導加載程式;其作用在于決定到何種硬體裝置下加載作業系統;Bootloader目前應用廣泛的兩種類型是LuLo和grub,但LuLo的缺陷在于不能支援大硬碟,常用于手機的引導加載程式,而grub就是廣泛應用于Linux的作業系統引導程式,CentOS5和6的引導程式用的就是grub legacy版本,而CentOS7用的則是grub2,兩種的功能相差較大;grub的主要作用是提供一個互動的菜單界面,上面列舉了目前系統所有核心版本;為系統找到啟動的核心,并将核心載入到RAM記憶體當中,将權限移交給核心;grub還可以提供一個指令行互動界面,可以讀取指定磁盤内的核心資訊以及init資訊,進而建立一個小的Linux;grub legacy主要分為三個組成,stage1,是MBR的前446位元組,而stage1.5則可以幫助stage1識别stage2的檔案系統,而核心核心檔案又一定與stage2放在一起,是以stage1.5就可以幫助找到系統中的核心檔案,并加載到記憶體;
核心,當Bootloader退出,由核心接手後,核心進行系統初始化,它可以找到系統中的硬體裝置,對硬體裝置進行驅動,當遇到其不能驅動的硬體裝置時,就啟用ramdisk程式加載驅動,然後挂載根檔案系統,最後啟動可以間接啟動所有應用程式的那個唯一的程序/sbin/init程序;之前有說,核心包含核心核心檔案以及核心子產品檔案,當核心需要時則将子產品導入,否則删除,在這裡說一些有關核心的一些基本指令;
lsmod:顯示核心核心中已經裝載的核心子產品;
insmod:插入核心子產品到核心核心,但這個指令并不會解決依賴關系,當依賴關系有缺失時,該指令不會生效;
rmmod:解除安裝核心子產品;
modinfo:可以擷取核心子產品資訊
-n:擷取核心子產品的絕對路徑;
-a:顯示子產品的作者資訊;
-d:顯示子產品的描述;
-F:僅顯示所提取的資訊,隻能提一個;
modprobe:可以動态裝載核心子產品以及解除安裝核心子產品;它可以解決核心子產品的依賴關系,即便缺失,也可以裝載到核心中;
modprobe 核心子產品名:裝載核心子產品;
modprobe -r 核心子產品名:解除安裝核心子產品;
核心在挂載完rootfs之後,所執行的init的程序;這個程序可以說是所有應用程式或所有程序是以來的程序,啟動它,就可以啟動下屬所有子程序;
init程序在CentOS系列中典型的三個類别:
CentOS5:Sysv init,其配置檔案為/etc/inittab
CentOS6:Upstart init,其配置檔案為/etc/inittab
CentOS7:Systemd,其配置檔案為/etc/systemd/system
/usr/lib/systemd/system
CentOS7的Systemd就相當于正常意義下的init;
首先說明一下CentOS5的Sysv init
CentOS5的init的特點在于,他要去逐個去執行配置檔案中的每個腳本來完成系統初始化;
init的配置檔案/etc/inittab:
1.确定系統初始化所要完成的任務
需要開啟或關閉哪些服務;
當電源失效時,需要進行什麼操作;
當驗證使用者身份無誤時,如何提供登入提示符;
如何完成系統初始化;
定義了按下"Ctrl + Alt + Delete"組合鍵時,系統将采取什麼行為;
2.規定任務執行:
執行任務的格式
id:runlevel:action:process
id:操作的唯一辨別符;
runlevel:運作級别;
運作級别:
0:關機;
1:單使用者模式,無需驗證,直接登入;
2:多使用者模式,會啟動網絡功能,但不會啟動NFS;
3:多使用者模式,完全的功能模式,僅使用指令行界面,不使用圖形化界面;
4:預留級别;
5:多使用者模式,可使用指令行界面,也可使用圖形界面,預設使用圖形界面;
6:開機;
action:執行任務所需要的操作;
wait:等待切換至此任務所在的運作級别時,運作一次;
respawn:一旦此任務結束,就自動重新啟動此任務;
initdefault:用于設定預設的運作級别,通常後面的process省略
sysinit:設定系統初始化的方式,一般情況下此處運作/etc/rc.d/rc.sysinit腳本;
/etc/rc.d/rc.sysinit作用:
1.設定主機名稱;
2.設定系統歡迎語;
3.激活swap裝置;
4.挂載/etc/fstab中的所有檔案系統;
5.激活lvm和raid裝置;
6.以讀寫的方式挂載rootfs檔案系統;
7.激活udev和SELinux;
8.根據/etc/sysctl.conf檔案設定核心參數;
9.加載額外的驅動程式;
10.完成系統清理工作;
CentOS5中/etc/rc.d/rc.sysinit中的部分内容
當執行該腳本時,執行腳本中的任務,上述任務格式,第一行表示,id為l0,執行級别為0,wait表示等待達到運作級别0時,執行/etc/rc.d/rc0腳本;
/etc/rc.d/rc#系列腳本中,“#”表示與運作級别相對應的腳本,rc#中的腳本命名都是一些K和S開頭的腳本,K表示關閉,K後面的兩位數字表示優先級,數字越小優先級越高,依賴于其他服務的服務先關閉;SS表示開啟,S後面的兩位數字表示優先級,數字越小優先級越高,被其他服務所依賴的服務先開啟;
腳本架構:
for i in /etc/rc.d/rc#.d/K* ; do
$i stop
done
for i in /etc/rc.d/rc#.d/S* ; do
$i start
所有由rc腳本關閉或啟動的連結檔案的源檔案都存在于/etc/rc.d/init.d,系統為了友善使用,為此目錄建立了連結/etc/init.d
所有/etc/init.d(/etc/rc.d/init.d)目錄中的腳本執行方式:
# /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
# service SRV_SCRIPT {start|stop|restart|status}
CentOS5啟動流程:
第一:加電自檢,BIOS将ROM導入到RAM記憶體中,檢查是否有錯;
第二:BootSequence,按一定順序查找BIOS裝置中的第一個引導程式,找到引導程式後,BIOS交權,退出;
第三:Bootloader,引導程式通過三層stage結構,找到與stage2一塊的核心檔案,将核心載入記憶體,并交權;
第四:核心,以隻讀方式挂載根檔案系統,驅動實體裝置,當無法驅動某個實體裝置時,調用ramdisk裝在驅動;執行/sbin/init指令設定預設運作級别,實作系統初始化,一個一個去開啟和關閉某些服務;Ctrl+Alt+Del熱鍵功能,UPS電源的失效與恢複之後的操作,直到生成終端[啟動圖形界面]
CentOS6啟動流程與CentOS5很相似,唯一不同在于CentOS6的init是upstart,而5的init是Sysv,6的init可以并行執行/etc/inittab中的腳本,速度比5的要快得多;
CentOS5啟動流程:
第一:加電自檢,BIOS将ROM導入到RAM記憶體中,檢查是否有錯;
第二:BootSequence,按一定順序查找BIOS裝置中的第一個引導程式,找到引導程式後,BIOS交權,退出;
第三:Bootloader,引導程式通過三層stage結構,找到與stage2一塊的核心檔案,将核心載入記憶體,并交權;
第四:核心,以隻讀方式挂載根檔案系統,驅動實體裝置,當無法驅動某個實體裝置時,調用ramdisk裝在驅動;執行/sbin/init指令,設定預設運作級别,系統初始化,并行地去開啟和關閉某些服務;
本文轉自 wujunqi1996 51CTO部落格,原文連結:http://blog.51cto.com/12480612/1953416