Linux啟動過程

Linux系統

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟體、應用程序和網路協議。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。

Linux操作系統誕生於1991 年10 月5 日(這是第一次正式向外公布時間)。Linux存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、視頻遊戲控制台、台式計算機、大型機和超級計算機。

嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU 工程各種工具和資料庫的操作系統。

如何啟動

我們平時在工作或學習中經常使用Linux操作系統,但是他是如何從關機狀態啟動的呢?

BIOS

BIOS(Basic Input/Output System)基本輸入輸出系統。計算機在開機啟動時,首先會讀取這個系統,然後BIOS上會有一個加電自檢(POST)的過程。加電自檢過程其實就是檢查計算機硬體的過程,包括檢查CPU和內存,檢查計算機最基本的組成單位(控制器,運算器,存儲器),還會檢查其他硬體。如果沒有異常,就載入BIOS程序到內存中。BIOS載入到內存中,他的一個主要功能是存儲了磁碟的啟動順序,BIOS會根據啟動順序去查找磁碟頭的MBR信息,並載入和執行MBR中的BootLoader程序。一旦BootLoader程序被檢測並載入到內存中,BIOS就將控制權交給BootLoader程序。

MBR

MBR(Master Boot Record)主引導記錄。磁碟上第0磁軌第一個扇區被稱為MBR。他的大小是512位元組,裡面存放了預啟動信息、分區表信息。MBR大體可分為兩個部分:第一部分為引導區,佔了446個位元組。第二部分為分區表,佔了64個位元組,記錄硬碟的分區信息。最後兩位元組用於MBR的有效性檢驗。 預引導區的作用之一是找到標記為活動(ACTIVE)的分區,並將活動分區的引導區讀入內存。

GRUB

GRUB(Grand Unified Bootloader)多系統啟動程序,其執行過程可分為三個步驟:Stage1:它的主要工作就是查找並載入第二段Bootloader程序(stage2),但系統在沒啟動時,MBR根本找不到文件系統,也就找不到stage2所存放的位置,因此,就有了stage1_5

Stage1_5:該步驟就是為了識別文件系統

Stage2:GRUB程序會根據/boot/grub/grub.conf文件查找Kernel的信息,然後開始載入Kernel程序,當Kernel程序被檢測並在載入到內存中,GRUB就將控制權交接給了Kernel程序。

Kernel

Kernel,內核。kernel是Linux系統最主要的程序,kernel的文件很小,只保留了最基本的模塊,並以壓縮文件的形式存儲在硬碟中,當GRUB將kernel讀進內存,內存開始解壓縮內核文件。解壓後,系統會調用start_kernel()函數來啟動一系列的初始化函數並初始化各種設備,完成Linux核心環境的建立。至此,Linux內核已經建立起來了,基於Linux的程序應該可以正常運行了。

在 start_kenrel()的結尾,內核通過kenrel_thread()創建出第一個進程(用戶空間的進程),執行/sbin/init,之後就將控制權交接給了init程序。

Init

Init,初始化。進行OS初始化操作, 實際上是根據/etc/inittab(定義了系統默認運行級別)設定的動作進行腳本的執行,第一個被執行的腳本為/etc/rc.d/rc.sysinit,這個是真正的OS初始化腳本,它做的工作非常多,包括設定PATH、 設定網路配置(/etc/sysconfig/network)、啟動swap分區、設定/proc等等。

執行完後,根據配置的啟動級別,執行對應目錄底下的腳本,最後執行/etc/rc.d/rc.local這個腳本,至此,系統啟動完成。

Runlevel

runlevel,運行級別,不同的級別會啟動的服務不一樣,init會根據定義的級別去執行相應目錄下的腳本,Linux的啟動級別分為以下幾種

  0:關機模式

  1:單一用戶模式(直接以管理員身份進入)

  2:多用戶模式(無網路)

  3:多用戶模式(命令行)

  4:保留

  5:多用戶模式(圖形界面)

  6:重啟

  在不同的運行級別下,/etc/rc.d/rc這個腳本會分別執行不同目錄下的腳本

  • Run level 0 – /etc/rc.d/rc0.d/
  • Run level 1 – /etc/rc.d/rc1.d/
  • Run level 2 – /etc/rc.d/rc2.d/
  • Run level 3 – /etc/rc.d/rc3.d/
  • Run level 4 – /etc/rc.d/rc4.d/
  • Run level 5 – /etc/rc.d/rc5.d/
  • Run level 6 – /etc/rc.d/rc6.d/

推薦閱讀:

TAG:Linux | 開機啟動 |