多重開機作業系統如何運作

多重開機作業系統如何運作

我讀到電腦透過搜尋每個連接裝置的前 512 KB 來載入作業系統。如果該記憶體空間充當引導磁區,它將開始載入其後的記憶體空間。

根據這篇文章:https://www.gnu.org/software/grub/manual/multiboot/multiboot.html

同一硬碟上存在的多個作業系統執行「連結」。現在,如果它們都在同一個硬碟上,那麼機器如何知道在跳轉了多少次後它將找到另一個引導磁區。
什麼是連結

答案1

我讀到電腦透過搜尋每個連接裝置的前 512 KB 來載入作業系統。

PC BIOS 執行此操作 - 並且它不一定會命中每個連接的設備,而只是它知道如何讀取並且配置為從設定中讀取的設備。

採用較新 UEFI 標準的 PC 可以直接從硬碟上的 EFI 分割區載入檔案。傳統上,BIOS 無法識別 NTFS 或 FAT 等檔案系統,但 UEFI 更智能,實際上可以從裝置讀取檔案。


就 BIOS 而言,載入的從來都不是完整的作業系統,而是一個小程式。第一階段引導程式。第一階段引導程式可以載入完整的作業系統,但實際上僅在 DOS 或另一個非常簡單的作業系統的情況下。

通常發生的情況是,第一階段引導程式繼續並載入第二階段引導程序,該引導程式可以是舊的 NT/XP NTLDR、Windows Vista+ 引導程式winload.exe或 GRUB。

引導程式(第二階段及以上)可以執行比 BIOS 更多的操作,因此它們讀取設定檔或數據,並可以向您提供要引導的作業系統的選單。載入作業系統後,引導程式將被覆蓋。

連結是引導程式呼叫另一個引導程式的地方。由於 Windows 僅使用自己的開機載入程式啟動,因此如果安裝了 GRUB,GRUB 載入 Windows 的作用就是繼續載入 BIOS 本來會載入的第一階段引導程式。我相信,它存儲在其分區的第一個扇區中。 DOS 下方也是如此。

如果 GRUB 可以直接開機作業系統(任何 Linux 都可以),則不需要這樣做。與其他作業系統不同,Linux 不太關心其自身及其 initramdisk 如何進入記憶體。


UEFI 可以直接載入作業系統,但 Windows 不支援此功能,因此通常 UEFI 系統會直接載入winload.exe並執行它。

其他非 PC 引導程序,如 U-Boot(您的家庭路由器可能運行的東西)可以識別 FAT 和 Linux 檔案系統,並直接從中載入 Linux,然後直接啟動作業系統。

答案2

我讀到電腦透過搜尋每個連接裝置的前 512 KB 來載入作業系統。

幾乎是正確的。 PC 風格的硬體讀取第一個磁區,即 512 位元組。 (不是千字節)。

如果該空間充當引導磁區,它將開始載入其後面的空間。

也幾乎正確。經典主機板韌體包含稱為 BIOS 的東西。當 PC 通電時,該指令就會被執行。它的任務之一是將控制權移交給另一個設備(例如軟碟機)。

更高級的版本不僅支援單一設備,而是會檢查多個設備,並在無法提供啟動解決方案的情況下轉向下一個設備。例如,它可以嘗試從磁碟啟動,如果失敗,則繼續嘗試從 CD 啟動,如果失敗,請嘗試從第一個硬碟啟動。 (在哪裡第一的如果您有多個磁碟也很有趣)。

大多數時候它會讀取硬碟的第一個磁區。硬碟通常有一個分割方案(IBM 相容 PC 的 MBR)和一些引導程式碼。然後它會跟隨一系列裝載機。

例如,韌體將載入單一引導磁區並啟動其中的程式碼。

從該扇區讀取的程式碼將更多地了解磁碟並加載更大的程式。 (如果需要,可重複更多階段)。

同一硬碟上存在的多個作業系統執行「連結」。

作業系統不執行連結。但是,如果您的後期階段之一是高級引導程式(例如 grub),那麼它可以要求使用者輸入,並根據輸入以不同的方式繼續。例如,它可以載入 Linux 內核,並且可以載入並啟動 NTloader。

相關內容