系統啟動流程
將系統自檢(BIOS)需要用到的指令,映射進CPU可以查找的線性地址空間(ROM),用來檢查硬件是否正常。
內核空間 用戶空間
POST---->BIOS(啟動順序)------>MBR(BootLoader,446B)找到啟動分區------>Kernel(探測硬件,裝載驅動)------>init進程(進程)/sbin/init
備註:
Kernel作用:文件管理、進程管理、內存管理、網絡管理、安全功能、驅動程序
內核設計風格:
單內核:一個內核安裝所有(linux)
模塊化設計:
.ko(kernel object)內核專用模塊,核心:很小
.so():外部so模塊(內核模塊)
內核模塊:/lib/modules/“內核版本號命令的目錄”/ 如:/lib/modules/2.6.32/ (作用:減少內核的體積)
備註:能夠做成內核模塊的不僅僅是驅動程序,還有其他的,如:文件系統、加密功能、進程管理的擴展功能
[[email protected] ~]# ls /lib/modules/2.6.32-358.el6.x86_64/kernel/
arch crypto drivers fs kernel lib mm net sound
核心:可以動態加載各種外圍內核模塊: 當內核識別到一個外圍硬件,如:顯卡,那麽內核的核心會取固定的位置,裝載進核心即可,這樣內核就可以操作硬件了。
/boot/vmlinuz-2.6.32-358.el6.x86_64
初始化時,加載的內核,只是核心本身。
微內核:需要哪個子系統,取裝載就可以。一個子系統,壞了。不影響全局。(實現復雜)(windows,solaris 支持線程)
備註:
1)按啟動順序讀取硬盤設備的MBR,如果第一個硬盤MBR無BootLoader,則讀第2個硬盤。但如果第一個硬盤
有MBR,但BootLoader損壞,則不會讀取第2個硬盤設備。
2)Kernel裝載前提:BootLoader識別Kernel所在分區
3)有些目錄無法掛載成一個分區,這些目錄是與根目錄(/)自身完成初始化相關的目錄。由於其他目錄都是通過根目錄才能訪問,因此根所在的
分區,通常就是kernel 能夠完成進入用戶空間的最核心的位置。根所在的分區,叫rootfs(根文件系統),由此把某個分區與/進行了關聯關系(掛載)
那麽根所在的分區,就是啟動OS的入口。系統啟動需要的文件在/sbin /bin下,所以這些目錄不能獨立分區。
取哪找根:由kernel完成,kernel必須裝載根目錄。然後才能進入用戶空間。kernel怎麽知道根存在哪個分區?需要指定
4)根文件系統存在與要給硬盤上,假設OS安裝包,沒有為內核提供此硬盤的驅動程序?那麽內核不能訪問這個硬盤設備,就無法裝載根,這樣就無法訪問
根下的文件,同樣訪問不了/lib/modules目錄,這樣意味著裝載不了驅動。這樣就有個問題:要想訪問根,就需要裝載驅動。要想裝載驅動,就必須訪問根。這樣
就矛盾了。(內核要驅動此硬盤,而驅動程序就在硬盤上)
系統啟動流程