Liunx 開機啓動流程

1.加載BIOS

          BIOS(Basic Input/Output System),基本輸入輸出系統,該系統存儲於主板的ROM芯片上,計算機在開機時,會最先讀取該系統,然後會有一個加電自檢過程,這個過程其實就是檢查CPU和內存,計算機最基本的組成單元(控制器、運算器和存儲器),還會檢查其他硬件,若沒有異常就開始加載BIOS程序到內存當中。BIOS主要的一個功能就是存儲了磁盤的啓動順序(BIOS中包含硬件CPU、內存、硬盤等相關信息,包含設備啓動順序信息、硬盤信息、內存信息、時鐘信息、即插即用(Plug-and-Play,PNP)特性等),BIOS會按照啓動順序去查找第一個磁盤頭的MBR信息,並加載和執行MBR中的Bootloader程序,若第一個磁盤不存在MBR,則會繼續查找第二個磁盤(PS:啓動順序可以在BIOS的界面中進行設置),一旦BootLoader程序被檢測並加載內存中,BIOS就將控制權交接給了BootLoader程序。

2.讀取MBR

        主引導記錄,MBR存儲於磁盤的頭部,大小爲512bytes,其中,446bytes用於存儲BootLoader程序,64bytes用於存儲分區表信息,最後2bytes用於MBR的有效性檢查。讀取完BIOS信息,計算機將會查找BIOS所指定的硬盤MBR引導扇區,將其內容複製到0x7c00地址所在的物理內存中。被複制到物理內存的內容是Boot Loader,然後進行引導。

3.GRUB引導

        GRUB啓動引導器是計算機啓動過程中運行的第一個軟件程序,當計算機讀取內存中的GRUB配置信息後,會根據其配置信息來啓動硬盤中不同的操作系統。

4.加載Kernel

        計算機讀取內存映像,並進行解壓縮操作,屏幕一般會輸出“Uncompressing Linux”的提示,當解壓縮內核完成後,屏幕輸出“OK, booting the kernel”。系統將解壓後的內核放置在內存之中,並調用start_kernel()函數來啓動一系列的初始化函數並初始化各種設備,完成Linux核心環境的建立。

5.設定Inittab運行等級

        內核加載完畢,會啓動Linux操作系統第一個守護進程init,然後通過該進程讀取/etc/inittab文件,/etc/inittab文件的作用是設定Linux的運行等級,Linux常見運行級別如下:

0:關機模式
1:單用戶模式
2:無網絡支持的多用戶模式
3:字符界面多用戶模式
4:保留,未使用模式
5:圖像界面多用戶模式
6:重新引導系統,重啓模式

6.加載rc.sysinit

        讀取完運行級別,Linux系統執行的第一個用戶層文件/etc/rc.d/rc.sysinit,該文件功能包括:設定PATH運行變量、設定網絡配置、啓動swap分區、設定/proc、系統函數、配置Selinux等。

7.加載內核模塊

        讀取/etc/modules.conf文件及/etc/modules.d目錄下的文件來加載系統內核模塊。該模塊文件,可以後期添加或者修改及刪除。

8.啓動運行級別程序

        根據之前讀取的運行級別,操作系統會運行rc0.d到rc6.d中的相應的腳本程序,來完成相應的初始化工作和啓動相應的服務。

上面目錄名中的"rc",表示run command(運行程序),最後的d表示directory(目錄)。下面讓我們看看 /etc/rc2.d 目錄中到底指定了哪些程序。

$ ls  /etc/rc2.d
  
  README
  S01motd
  S13rpcbind
  S14nfs-common
  S16binfmt-support
  S16rsyslog
  S16sudo
  S17apache2
  S18acpid

可以看到,除了第一個文件README以外,其他文件名都是"字母S+兩位數字+程序名"的形式。字母S表示Start,也就是啓動的意思(啓動腳本的運行參數爲start),如果這個位置是字母K,就代表Kill(關閉),即如果從其他運行級別切換過來,需要關閉的程序(啓動腳本的運行參數爲stop)。後面的兩位數字表示處理順序,數字越小越早處理,所以第一個啓動的程序是motd,然後是rpcbing、nfs......數字相同時,則按照程序名的字母順序啓動,所以rsyslog會先於sudo啓動。

9.讀取rc.local文件

操作系統啓動完相應服務之後,會讀取執行/etc/rc.d/rc.local文件,可以將需要開機啓動的任務加入到該文件末尾,系統會逐行去執行並啓動相應命令。

 

10.執行/bin/login程序

執行/bin/login程序,啓動到系統登錄界面,操作系統等待用戶輸入用戶名和密碼,即可登錄到Shell終端,輸入用戶名、密碼即可登錄Linux操作系統,至此Linux操作系統完整流程啓動完畢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章