1. 程式人生 > >系統啟動流程

系統啟動流程

地址空間 object 2.6 全局 關系 roo 管理 mod 關聯關系

將系統自檢(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目錄,這樣意味著裝載不了驅動。這樣就有個問題:要想訪問根,就需要裝載驅動。要想裝載驅動,就必須訪問根。這樣

就矛盾了。(內核要驅動此硬盤,而驅動程序就在硬盤上)

系統啟動流程