我一直想知道BIOS(除了進行POST、啟動引導程式以及按下電源按鈕後將控制權傳遞給作業系統之外)在作業系統運行時是否有任何目的或功能?
作業系統在運作時是否與 BIOS 通訊?
答案1
借助現代作業系統,幾乎沒有。據報導,Linus Torvalds 表示,它的任務是「載入作業系統並離開那裡」。
MS-DOS 等較舊的作業系統依靠 BIOS 透過呼叫中斷來完成許多任務(例如磁碟存取)。
對於現代作業系統,引導程式可以快速切換到 32 位元或 64 位元模式並執行作業系統核心。核心可以註冊自己的中斷處理程序,可以由使用者空間應用程式呼叫。核心的例程可以更可移植(因為它們不依賴特定的硬體)、更靈活(作業系統供應商可以根據需要更改它們,而不必使用硬體附帶的任何內容)、更複雜(它們可以執行任意複雜的操作)程式碼而不是編程到 BIOS 中的內容),並且更安全(因為作業系統可以控制對共享資源的存取並防止程式相互破壞,實現自己的任意權限方案)。
為了與特定硬體交互,作業系統可以載入並使用自己的裝置驅動程式。因此作業系統或應用程式根本不需要呼叫大多數 BIOS 例程。事實上,出於安全原因,BIOS 中斷甚至被停用。由於 BIOS 採用 16 位元實模式,因此很難呼叫現代作業系統。
雖然作業系統運作時 BIOS 的使用非常有限,但其功能仍在外圍設備上使用。例如,當電腦休眠時,作業系統沒有運行,最終由韌體將硬體設為正確的狀態來暫停和恢復作業系統。這些用途通常僅限於ACPI呼叫而不是呼叫完整的 BIOS 介面。 ACPI 是 BIOS 擴展“將電源管理置於作業系統 (OSPM) 的控制之下,這與先前的 BIOS 中央系統相反,後者依賴於特定於平台的韌體來確定電源管理和配置策略”。
請注意,官方“BIOS”指的是特定的韌體接口,但該術語通常用於指稱一般電腦韌體。最近的一些電腦(尤其是 Apple 電腦)已將 BIOS (sensu strictu) 替換為UEFI,這當然就是所謂的實現這些功能。
有關 BIOS 的作用如何隨著時間的推移而減弱的更多信息,請參閱維基百科。
答案2
BIOS 為作業系統提供了許多服務,其中大部分與電源管理相關:
- 修改CPU和匯流排時鐘
- 啟用/停用主機板設備
- 擴充埠電源控制
- 掛起到磁碟和掛起到 RAM
- 恢復事件設定
掛起到磁碟大多數時候是在作業系統中實現的,因為作業系統可以更快地恢復其狀態(僅重新載入核心狀態,並在需要時交換程式狀態,這比重新載入整個RAM 快得多) ,但是該功能保留在規範中。
Suspend-to-RAM 無法由作業系統實現,因為它依賴 BIOS 跳過 RAM 初始化和測試,因此作業系統需要一個 API 來告訴 BIOS 它打算使用當前 RAM 內容恢復。為了提供此服務,BIOS 要求作業系統完整保留某個 RAM 區域。
所有 BIOS 服務的作業系統介面是一段虛擬機器代碼,需要在模擬器上運行,並產生硬體所需的 I/O 操作。對於掛起,通常這樣實現,以便執行硬體寫入之一然後觸發中斷,從而將控制權轉移到 BIOS。
答案3
現代系統中作業系統在三個主要領域使用 BIOS,例如使用 UEFI 標準的系統。第一個是一系列稱為 UEFI 執行時期服務的服務。這些服務允許作業系統取得只有 BIOS 知道的信息,例如 BIOS 使用的時間、啟動順序、當前使用者安全設定檔、有關主機板、DIMM 的資訊等。
第二種是系統管理模式,它是由高優先權中斷 (SMM) 存取的記憶體 (SMRAM) 的隱藏部分。許多 BIOS 使用它來實現高安全性 OEM 功能或實現硬體解決方案。
第三個是ACPI。 ACPI 提供作業系統使用的配置、電源管理以及硬體資料和程式碼,以增強作業系統驅動程式可以使用行業標準或裝置驅動程式找到的內容。例如,是否有特殊訊號來控制硬碟電源,或是否有特殊方式與標準未涵蓋的電池通訊。
提姆