韌體和中間件有什麼聯繫和區別?
維基百科說
韌體是持久性記憶體以及儲存在其中的程式碼和資料的組合。包含韌體的設備的典型範例是嵌入式系統(例如交通號誌、消費性電器和數位手錶)、電腦、電腦週邊設備、行動電話和數位相機。這些設備中包含的韌體提供設備的控製程式。
中間件是一種電腦軟體,它為軟體應用程式提供超出作業系統可用服務的服務。可謂「軟體黏合劑」。中間件使軟體開發人員可以更輕鬆地執行通訊和輸入/輸出,因此他們可以專注於應用程式的特定目的。
我仍然不明白它們在硬體、高級軟體、作業系統等方面的角色差異。
例如,
BIOS韌體不是中間件嗎?
作業系統的引導程式是韌體、中間件還是某種軟體?
CPU的指令集是韌體而不是中間件嗎?
有沒有一些中間件而不是韌體?
裝置驅動程式與韌體和中間件之間有何關聯和區別?
謝謝!
答案1
韌體和中間件是簡單的行業術語,用於描述一組特定的「某些代碼」。
韌體(如 wiki 所說)「通常」表示「通常」用組譯語言或 C 語言編寫且「通常」運行的軟體在/在硬體.
「on/the」表示軟體駐留在永久儲存媒體(如某種小型快閃記憶體)上,該媒體直接連接到該軟體要控制的硬體。它被稱為“固件”,因為它是專門為運行硬體而設計的軟體。
我通常也會引用這個詞,因為科技業有一個可怕的習慣,就是創造術語然後扭曲它們,這樣就沒有人知道這個詞的真正含義是什麼。 「嵌入式程式設計」就是一個很好的當前例子;雖然該術語通常指的是開發本質上韌體的程式設計師(即低階ASM/C 硬體開發人員),但此後該術語已演變為包括Android 開發人員(即可以在Java 和C 層級操作的Linux/核心開發人員) )。我並不是抨擊任何類型的開發人員或開發實踐(我自己也進行過很多此類開發),只是指出科技業喜歡濫用詞語。
中間件是這個詞的另一個例子;雖然我還沒有聽到或看到「韌體」用於除硬體級程式碼之外的任何內容,但我已經看到中間件用於從韌體到 .NET/Java 的所有內容。中間件是一個通用術語,(作為開發人員)您通常可以從上下文中破譯其意圖,因為我已經看到它被誤用了太多次;所以直接回答你:
我仍然不明白它們在硬體、高級軟體、作業系統等方面的角色差異。 韌體是駐留在某個硬體上並運行該硬體的軟體(代碼轉換為二進位格式)。中間件可用於指與硬體(或與此相關的另一軟體)互動的 API/函式庫。
BIOS韌體不是中間件嗎? 根據您對此的看法,可能兩者都是。從技術上講,BIOS 是韌體(它是專門用於運行其所在硬體(即主機板)的軟體),但如果您的目的是以某種方式直接與硬體互動(就像作業系統那樣),則BIOS '可能是中間件,因為您不必「編寫」自己的 BIOS 和硬體例程,這就是濫用「中間件」的地方,但從經典角度來看,BIOS 不是中間件。
作業系統的引導程式是韌體、中間件還是某種軟體? 作業系統的開機載入程式是駐留在BIOS(或其他基本硬體子系統)和較高層級系統(通常是作業系統)之間的一段程式碼,它告訴較低系統(即BIOS)作業系統駐留在引導介質上的位置。通常來說,引導程式通常位於儲存媒體的特定位置(例如前幾百位元組或更多),並且 BIOS 知道(由於行業標準)在哪裡“查找”引導程序,此時引導程式將接管執行其編寫的操作(通常引導作業系統)。
引導程式不是固件,但從技術上講可以駐留在固件中,並且就其為“中間件”而言,這可能是或否,具體取決於“您”對“中間件”是什麼/應該是什麼的看法,儘管在中間件的經典形式中,我不會考慮引導程式中間件,因為它沒有為我提供任何更簡單的上下文(除非我正在編寫作業系統)。
CPU的指令集是韌體而不是中間件嗎? CPU 的指令集更被視為應用程式介面 (API)(“可以”被視為中間件的一種形式),它不是固件,因為 CPU(中央處理單元本身)沒有任何東西'跑步' ; CPU指令集是軟體被「編譯」(彙編)的內容,然後CPU「理解」如何運作。
有沒有一些中間件而不是韌體? 是的;幾乎任何您能想到的軟體框架(例如.NET 或Java 庫)都可以被視為中間件的一種形式,因為它們為程式設計師提供了一種「更簡單」的方式與電腦的各個方面進行交互。例如,使用 Java,您可以開啟一個檔案並向其寫入內容,然後讓程式碼在任何支援 Java 的系統上「執行」。由於某些 Java API 允許您使用幾行程式碼與不同系統中的檔案進行交互,因此它可以被視為一種「中間件」形式,因為開發人員不必為每個不同的系統(Linux/Windows/ Apple等)與硬碟和作業系統的檔案系統進行互動。
裝置驅動程式與韌體和中間件之間有何關聯和區別? 裝置驅動程式是位於作業系統層級的軟體(通常作為「安裝」庫),告訴作業系統「如何」與所述裝置互動。例如,當您安裝最新的視訊驅動程式時,您正在安裝作業系統「使用」與實際視訊卡本身進行通訊的軟體。顯示卡本身有固件,它知道如何解釋作業系統提供給它的資訊(由於驅動程式),並用它來做它想做的事(例如繪製視窗或遊戲精靈)。
裝置驅動程式可以被視為中間件(同樣取決於您的看法),因為它位於作業系統/硬體和任何想要透過作業系統使用硬體的人之間。
軼事:根據我的行業經驗,我發現“中間件”“意味著”“網絡服務”或類似的東西(至少使用這個術語的人的意思是無論如何),儘管我也看到/聽到過它(錯誤) )在許多職位發布和麵試中用於表示各種事物,從 API 和庫(如 Boost 或 Spring)到 C++ STL 甚至 C# 本身(語言本身,而不是 .NET)。
我希望這能有所幫助。
答案2
BIOS韌體不是中間件嗎?
正確的。中間件位於作業系統之上,利用作業系統服務提供更高層的服務。 BIOS 位於作業系統之下。
作業系統的引導程式是韌體、中間件還是某種軟體?
引導程式是一個低階應用程式。它不是韌體(因為它是特定於平台的,而不是特定於硬體的)或中間件(因為它不使用作業系統服務)。
CPU的指令集是韌體而不是中間件嗎?
CPU 的指令集不是一個軟體。所以這些都不是。它可以用硬體、微代碼或某種組合來實現。
有沒有一些中間件而不是韌體?
中間件是特定於作業系統的,而韌體則不是。韌體是為特定硬體構建的。中間件是為特定作業系統建構的。
裝置驅動程式與韌體和中間件之間有何關聯和區別?
韌體通常嵌入在硬體中並在該硬體本身上運行。設備驅動程式是作業系統的一部分,在 CPU 上運行,而不是在它們控制的硬體上運行。中間件特定於作業系統,並使用作業系統服務來提供更高層級的服務——而不僅僅是硬體控制。
答案3
軟體
非常籠統地定義,軟體是在處理器上執行以指示其執行操作的一組指令。根據這個定義,韌體、中間件和驅動程式也是軟體,不同的術語描述了具有截然不同作用的三種不同類別的軟體。
韌體
韌體是通常駐留在非揮發性記憶體(例如EEPROM 晶片)中的軟體,負責引導(使其可用)其他系統硬體和/或為該硬體提供軟體介面以用於「更高級別」的軟體,例如作業系統。
例如,PC 的BIOS(或Mac 上的EFI 環境)可以被視為固件,因為它們都駐留在非揮發性儲存中(通常是主機板IIRC 上的晶片),並且負責硬體初始化的某些方面,以及載入其他軟體(例如引導程式),這些軟體可以使用 BIOS 提供的功能來與硬體(例如磁碟)進行通信,從磁碟加載第二階段引導程式或作業系統核心。
司機
驅動程式是為特定作業系統提供系統硬體介面的軟體。例如,Windows 通用鍵盤驅動程式了解鍵盤將為所有標準鍵發送的訊號,當它收到這些訊號時,它會以 Windows 理解的方式將它們呈現給作業系統。除此之外,如果您有一個帶有非標準鍵的精美鍵盤,它將包含一個驅動程式來啟用這些鍵,因為通用鍵盤驅動程式無法理解這些非標準鍵。中介軟體
中間件是一種位於其他兩個軟體之間並充當它們之間中介的軟體類型,通常用於促進兩者之間的溝通。例如,遊戲引擎可以被視為中間件,因為它位於客戶端應用程式(遊戲)和遊戲可能使用的作業系統所公開的各種服務之間:
- 圖形服務(適用於 Windows 的 DirectX 或適用於(Windows、Mac、Linux 等)的 OpenGL
- 音效服務(適用於 Windows 的 DirectSound/Windows Audio、適用於 Mac 的 Core Audio)
- 網路服務(DirectPlay 或適用於 Windows 的 Windows Sockets)
當遊戲使用遊戲引擎時,它會要求引擎執行它想要執行的任務,而不是直接詢問相關的作業系統服務。
透過中間件層使用服務的主要優點是使用服務的應用程式不需要關心服務如何工作的細節,因此遊戲開發人員可以讓引擎執行任務,例如繪製三角形,並且可以儘管事實上進行繪製的實際服務從編程角度來看可能有很大不同,但我們有理由相信在Windows 和Mac 上繪製的三角形是相同的。