為什麼我們需要引導程式?

為什麼我們需要引導程式?

據我所知,BIOS 或類似的韌體啟動後,控制權就會傳遞給引導程式。

為什麼BIOS不能直接載入作業系統核心?

另外,GRUB 手冊說:簡而言之,引導程式是電腦啟動時運行的第一個軟體程式。 BIOS不是第一個運行的程式嗎?

答案1

BIOS 需要知道如何載入內核,這會使 BIOS 過於複雜:想像 BIOS 需要知道如何載入許多不同的可用作業系統,如何將核心參數傳遞給它們等等...

因此,它僅初始化硬體並跳到儲存引導程式的已知位置;然後,控制權就會傳遞給它。

Unix 與網路基礎 HOWTO:

您可能想知道為什麼 BIOS 不直接載入核心——為什麼要使用引導程式進行兩步驟過程?嗯,BIOS 並不是很聰明。事實上這是非常愚蠢的,Linux 在啟動後根本不使用它。它最初是為磁碟很小的原始 8 位元 PC 編寫的,實際上無法存取足夠的磁碟來直接載入核心。引導程式步驟還允許您從磁碟上的不同位置啟動多個作業系統之一,以防萬一 Unix 不夠好。

至於BIOS是第一個運行的程式:(來自維基百科

BIOS 軟體內建於 PC 中,是 PC 加電時運行的第一個代碼(「啟動韌體」)。

但是一個韌體軟體.所以我認為 GRUB 手冊至少在這一部分上令人困惑;引導程式可以看作是第一個使用者自訂在電腦上執行的軟體。

答案2

原因是靈活性。您可能在一個硬碟上有多個不同的作業系統(Windows、Linux 等),或者同一作業系統可能有多個不同版本。因此,最好有一段獨立於作業系統的程式碼,它知道硬碟上安裝的每個作業系統駐留在哪裡,如何載入每個作業系統,載入哪個作業系統,是否顯示選單等。 。

BIOS 載入並執行位於硬碟上預先定義位置(第一個磁區)的程式碼。我們將此程式碼稱為引導程序,但從技術上講,如果您將Windows 安裝在空白硬碟上,則程式碼也會由Windows 安裝,因此您可以將其稱為Windows 的一部分,特別是因為Windows引導程式無法載入除Windows 之外的任何其他作業系統。

關於電腦啟動時運行的第一個軟體程式:韌體/軟體的差異非常薄弱,而且現代電腦的啟動過程非常複雜。 BIOS 本身也不是整體程序,而是幾個連結在一起的不同階段。然而,引導程式是第一個使用者可更改運行的程式碼。這是用戶可以損壞、擦除、感染病毒等的第一段程式碼。如果電腦無法啟動使用者需要檢查是否正常。

答案3

為什麼BIOS不能直接載入作業系統核心?

三個原因:

  • 原始 PC 平台上的 BIOS 在 1981 年推出時,其作用與 CP/M 作業系統中的 BIOS 相同,即,用於多個裝置的薄抽象層和簡單的磁碟開機載入程式。 CP/M 還有另一層稱為“BDOS”,用於處理檔案系統。 DOS 在許多方面與 CP/M 相似,因為它是當時流行的作業系統,結構也相似。 BIOS 旨在處理平台的硬體特定方面,現在作業系統中的驅動程式扮演著這個角色。

  • 檔案系統與作業系統分離的概念尚未真正流行。

  • 當時,RAM和ROM是一種昂貴且稀缺的資源。最初的 IBM 5150 PC 僅需 16K RAM(參考)。該系統的 ROM 大小為 48K,其中包括一個 BASIC 解釋器。當時也沒有標準檔案系統這樣的東西。

由於 DOS 逐漸成為該平台上最受歡迎的作業系統,隨後 Windows 也支援這種設置,因此沒有人想到以這種方式擴展 BIOS 以包含真正的引導載入功能。

我不確定 UEFI 的功能 - 它可能具有真正的開機載入功能,但 Windows 由於某種原因而未使用該功能(Windows 在安裝時堅持使用它自己的開機管理員)。其他非 BIOS 韌體(例如 U-Boot 以及許多手機和路由器中的韌體)確實會直接載入和運行核心。自從 BIOS 開始在 ROM 中留出空間來執行更多操作以來,就沒有出現任何技術原因了。

相關內容