歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 系統啟動過程詳解

Linux 系統啟動過程詳解

日期:2017/2/28 14:54:58   编辑:Linux教程

  關於Windows啟動過程介紹的文章可謂多如牛毛,而對於Linux的介紹卻是鳳毛麟角。凡是曾經使用過Linux的用戶可能都會注意到,當計算機啟動時,屏幕上會出現很多信息。一般情況下,這些信息我們可以通過以下的命令看到:

  cat /var/log/dmesg | more

  這些信息究竟有什麼含義?這個問題看起來似乎很容易回答,因為只要在Linux參考書裡查找一下,就會找出一個類似於這樣的答案:“這是一些內核啟動信息……”。但是“內核啟動信息”到底是什麼意思呢?

  要想對Linux內部工作有所了解,就必須要對Linux內核的體系結構有一個全面的了解。下面我們就去揭開它的秘密。在此,我不想解釋Linux內核的體系結構,只想解釋(或者說是試圖去解釋)計算機系統啟動進程中一些最基本的概念。這裡所說的啟動過程是指從按下開關到提示符出現的整個過程。

  啟動指的是什麼

  在操作系統的詞匯裡,啟動是指通過處理器執行一些指令,把操作系統的一部分放入到主存中。在啟動過程中,Linux內部的數據結構會被初始化,會被賦給一些初始值,並且某些進程會被創建。因為當計算機電源打開時,所有的硬件設備都處於一種不可預知的狀態,內存也處於一種不活動的隨機狀態,所以,計算機的啟動過程可以說是一個長且復雜的任務。因此,我們必須知道,之所以叫“啟動”主要是因為計算機體系結構的原因。

  在此提請讀者注意:  

  1.對計算機內部的工作和內核的操作有一個基本的了解,對自己非常有益。

  2.這篇文章中提到的所有文件,指的都是Linux內核2.4.2-2版本裡的文件。這些文件對於所有的Linux內核來說都是相同的,並且可以在任何一個Linux系統裡找到它們,此處我使用的是Red Hat 7.1。

  3.在本文裡,討論范圍限於IBM PC體系結構。

  BIOS及其功能

  當計算機打開電源時,內存裡包含的是一些隨機的數據,所有的東西都沒有被初始化,操作系統也沒有被加載。開始整個啟動過程的是一個特殊的硬件電路,它觸發CPU的Reset腳的邏輯值。然後,一些CPU的寄存器比如CS(一個分段寄存器:代碼段寄存器,它指向含有程序指令的段),eip(在執行指令過程中,當CPU檢測到一個意外事故發生時,它會做出三種類型的判斷:錯誤、陷阱、中止,這取決於eip寄存器的值,它存儲在內核模塊棧裡)就會被給定一個值。接著,物理地址為0xfffffff0的代碼將被執行。這個地址被存儲在一個只讀存儲器(ROM)裡。BIOS(基本輸入/輸出系統)實際上是一段存儲在ROM裡的程序。它包含了一系列可以被某些操作系統調用,用於處理計算機各種硬件設備的中斷驅動和低級程序。其中微軟的DOS就是這樣的一種操作系統。

  Linux是否使用附於計算機系統的BIOS來初始化硬件設備?或者說,是否有其它的東西來完成同樣的任務?不過這個問題沒有那麼簡單,必須要了解一些知識。我們從80386模式開始。Intel微處理器實現地址翻譯(從邏輯地址->線性地址->物理地址)有兩種不同的途徑,分別稱作實模式和保護模式。實模式存在主要是為了使得處理器可以和較老的處理相兼容。事實上,所有的BIOS程序都是在實模式下運行的。但是,Linux內核是在保護模式下運行,而不是在實模式下。因此,一旦初始化完成後,Linux就不再使用BIOS,而是完全由自己來為計算機上的所有硬件提供驅動程序(這點和DOS是不一樣的)。

  那麼什麼時候Linux使用保護模式?為什麼BIOS不能使用相同的模式?BIOS使用實模式是因為其在操作過程中使用的是實模式地址,並且在計算機剛打開電源時,只有實模式地址可用。一個實模式地址由段地址和偏移地址組成,因此,相應的物理地址就為段地址×(2×8)+偏移。

  那麼,這是不是意味著在整個啟動過程中,Linux就從來不使用BIOS了呢?答案是否定的。在啟動階段,Linux從硬盤或者其它外部設備加載內核時,需要使用BIOS。

Copyright © Linux教程網 All Rights Reserved