ファームウェアとミドルウェアとデバイス ドライバーの違いは何ですか?

ファームウェアとミドルウェアとデバイス ドライバーの違いは何ですか?

ファームウェアとミドルウェアの関係と違いは何ですか?

ウィキペディアによれば

ファームウェアは、永続的なメモリと、そこに保存されるプログラムコードおよびデータの組み合わせです。[1] ファームウェアを含むデバイスの代表的な例としては、組み込みシステム(信号機、家電製品、デジタル時計など)、コンピュータ、コンピュータ周辺機器、携帯電話、デジタルカメラなどがあります。これらのデバイスに含まれるファームウェアは、デバイスの制御プログラムを提供します。

ミドルウェアは、オペレーティングシステムから利用できるサービスを超えてソフトウェアアプリケーションにサービスを提供するコンピュータソフトウェアです。これは「ソフトウェア接着剤」と表現できます。[1] ミドルウェアにより、ソフトウェア開発者は通信と入出力を簡単に実行できるため、アプリケーションの特定の目的に集中できます。

  1. ハードウェア、高レベルソフトウェア、オペレーティング システムなどに対するそれらの役割の違いがまだわかりません。

    例えば、

    BIOSファームウェアはミドルウェアではないのですか?

    OS のブートローダーはファームウェア、ミドルウェア、それともサムウェアですか?

    CPU の命令セットはミドルウェアではなくファームウェアですか?

    ファームウェアではなくミドルウェアはありますか?

  2. デバイス ドライバーとファームウェアおよびミドルウェアの関係と違いは何ですか?

ありがとう!

答え1

ファームウェアとミドルウェアは、特定の「コード」のセットを表す単純な業界用語です。

ファームウェア(ウィキによると)は「通常」アセンブリまたはCで記述され「通常」実行されるソフトウェアを表します。オン/ザハードウェア。

「on/the」は、このソフトウェアが、ソフトウェアが制御するハードウェアに直接接続された永続的なストレージ メディア (ある種の小さなフラッシュなど) に存在することを示します。これはハードウェアを実行するために特別に設計されたソフトウェアであるため、「ファームウェア」と呼ばれます。

また、私がこの言葉をよく引用するのは、テクノロジー業界には、用語を作り出し、それを歪曲して、その言葉の本当の意味を誰も理解できないようにするというひどい習慣があるからです。「組み込みプログラミング」は、現在の良い例です。この用語は通常、本質的にファームウェアを開発するプログラマー (つまり、低レベルの ASM/C ハードウェア開発者) を指していましたが、その後、Android 開発者 (つまり、Java と C の両方のレベルで操作できる Linux/カーネル開発者) も含むように変化しました。私は、開発者や開発手法を非難しているわけではありません (私自身、そのようなタイプの開発をたくさん行っています)。テクノロジー業界は言葉を誤用するのが好きだということを指摘しているだけです。

ミドルウェアもそのような言葉の 1 つの例です。私はまだ「ファームウェア」がハードウェア レベルのコード以外で使用されているのを聞いたことも見たこともありませんが、ファームウェアから .NET/Java まで、あらゆるものにミドルウェアが使用されているのを見てきました。ミドルウェアは一般的な用語であり、(開発者として) 通常は文脈からその意図を解読できます。私はミドルウェアが誤用されているのを何度も見てきました。そこで、直接お答えします。

ハードウェア、高レベルソフトウェア、オペレーティング システムなどに対するそれらの役割の違いがまだわかりません。 ファームウェアは、特定のハードウェア上に存在し、そのハードウェアを実行するソフトウェア (バイナリ形式に変換されたコード) です。ミドルウェアは、ハードウェア (または別のソフトウェア) と対話する API/ライブラリを意味するために使用できます。

BIOSファームウェアはミドルウェアではないのですか? これに対する見方によっては、両方である可能性があります。技術的には、BIOS はファームウェア (マザーボードなどのハードウェアを実行するために特別に使用されるソフトウェア) ですが、何らかの方法でハードウェアと直接対話することが目的である場合 (OS のように)、BIOS はミドルウェアである可能性があります。独自の BIOS およびハードウェア ルーチンを「作成」する必要がないため、ここで「ミドルウェア」の誤用が発生する可能性がありますが、古典的な観点からすると、BIOS はミドルウェアではありません。

OS のブートローダーはファームウェア、ミドルウェア、それともサムウェアですか? OS のブートローダは、BIOS (またはその他の基本的なハードウェア サブシステム) と上位システム (通常は OS) の間にあるコードで、下位システム (つまり BIOS) にブート メディア上の OS の格納場所を通知します。一般的に、ブートローダはストレージ メディアの特定の場所 (最初の数百バイト以上など) に配置され、BIOS は (業界標準のおかげで) ブートローダを「探す」場所を認識しており、その時点でブートローダが引き継いで、記述された目的 (通常は OS の起動) を実行します。

ブートローダはファームウェアではありませんが、技術的にはファームウェア内に存在する可能性があり、「ミドルウェア」である限り、それは「あなた」の「ミドルウェア」が何であるか/どうあるべきかという見解に応じてイエスかノーかになる可能性がありますが、ミドルウェアの古典的な考え方では、ブートローダ ミドルウェアはより簡単なコンテキストを提供しないため(OS を書いている場合を除く)、考慮しません。

CPU の命令セットはミドルウェアではなくファームウェアですか? CPU の命令セットは、アプリケーション プログラミング インターフェイス (API) (ミドルウェアの一種と見なすこともできます) と見なすことができます。CPU (中央処理装置自体) には「実行する」ものがないため、ファームウェアではありません。CPU 命令セットは、ソフトウェアが「コンパイル」されて (アセンブリ)、CPU が実行方法を「理解」するものです。

ファームウェアではなくミドルウェアはありますか? はい。考えられるほぼすべてのソフトウェア フレームワーク (.NET や Java ライブラリなど) は、プログラマーがコンピューターのさまざまな側面と対話するための「より簡単な」方法を提供するため、ミドルウェアの一種と見なすことができます。たとえば、Java を使用すると、ファイルを開いて書き込み、そのコードを Java がサポートされているシステムで「動作」させることができます。特定の Java API を使用すると、異なるシステム間でファイルと対話する数行のコードを作成できるため、開発者がハード ドライブと OS のファイル システムと対話するために、異なるシステム (Linux/Windows/Apple など) ごとにコードを作成する必要がないため、ミドルウェアの一種と見なすことができます。

デバイス ドライバーとファームウェアおよびミドルウェアの関係と違いは何ですか? デバイス ドライバーは、OS レベル (通常は「インストールされた」ライブラリ) にあるソフトウェアで、OS にデバイスとの「やり取り方法」を伝えます。たとえば、最新のビデオ ドライバーをインストールすると、OS が実際のビデオ カード自体と通信するために「使用する」ソフトウェアがインストールされます。ビデオ カード自体にはファームウェアが搭載されており、OS から (ドライバーによって) 提供された情報を解釈する方法を知っており、その情報を使って必要な処理を行います (たとえば、ウィンドウやゲーム スプライトを描画するなど)。

デバイス ドライバーは、OS/ハードウェアと、OS を介してハードウェアを使用するユーザーの間に位置するため、ミドルウェアと見なすことができます (これも、見方によって異なります)。

逸話: 私の業界での経験では、「ミドルウェア」は「Web サービス」またはそれに類するもの (少なくとも、この用語を使用する人が意味しているもの) を意味していることがわかりました。ただし、多くの求人広告や面接では、この用語が API やライブラリ (Boost や Spring など) から C++ STL、さらには C# 自体 (.NET ではなく言語自体) まで、さまざまなものを意味するために (誤って) 使用されているのを見たり聞いたりしたこともあります。

それが役に立つことを願っています。

答え2

BIOSファームウェアはミドルウェアではないのですか?

正解です。ミドルウェアは OS の上にあり、OS サービスを使用して高レベルのサービスを提供します。BIOS は OS の下にあります。

OS のブートローダーはファームウェア、ミドルウェア、それともサムウェアですか?

ブートローダは低レベルのアプリケーションです。ファームウェア (ハードウェア固有ではなくプラットフォーム固有であるため) やミドルウェア (OS サービスを使用しないため) ではありません。

CPU の命令セットはミドルウェアではなくファームウェアですか?

CPU の命令セットはソフトウェアではありません。したがって、これらのいずれでもありません。ハードウェア、マイクロコード、またはそれらの組み合わせで実装される場合があります。

ファームウェアではなくミドルウェアはありますか?

ミドルウェアは OS 固有ですが、ファームウェアはそうではありません。ファームウェアは特定のハードウェア用に構築されています。ミドルウェアは特定の OS 用に構築されています。

デバイス ドライバーとファームウェアおよびミドルウェアの関係と違いは何ですか?

ファームウェアは一般にハードウェアに組み込まれ、そのハードウェア自体で実行されます。デバイス ドライバーは OS の一部であり、制御するハードウェアではなく CPU 上で実行されます。ミドルウェアは OS に固有であり、OS サービスを使用して、ハードウェア制御だけでなく、より高レベルのサービスも提供します。

答え3

ソフトウェア

非常に一般的に定義すると、ソフトウェアとは、プロセッサ上で実行され、プロセッサにアクションの実行を指示する一連の命令です。この定義では、ファームウェア、ミドルウェア、およびドライバーもソフトウェアであり、これらの異なる用語は、大きく異なる役割を持つ 3 つの異なるクラスのソフトウェアを表します。

ファームウェア

ファームウェアは、通常、不揮発性ストレージ (EEPROM チップなど) に存在するソフトウェアであり、他のシステム ハードウェアをブートストラップ (使用可能にする) したり、オペレーティング システムなどの「高レベル」ソフトウェア用にそのハードウェアへのソフトウェア インターフェイスを提供したりします。

たとえば、PC の BIOS (または Mac の EFI 環境) は、不揮発性ストレージ (通常はマザーボード上のチップだったと思います) に常駐し、ハードウェア初期化の一部を担当するほか、第 2 段階のブートローダまたはオペレーティング システム カーネルがロードされるディスクなどのハードウェアと通信するために BIOS が提供する機能を使用するその他のソフトウェア (ブートローダなど) のロードも担当するため、ファームウェアと見なすことができます。

運転者

ドライバーとは、特定のオペレーティング システムのシステム ハードウェアへのインターフェイスを提供するソフトウェアです。たとえば、Windows 汎用キーボード ドライバーは、キーボードがすべての標準キーに送信する信号を理解し、これらの信号を受信すると、Windows が理解できる方法でオペレーティング システムに提示します。さらに、非標準キーを備えた高級キーボードを使用している場合は、これらのキーを有効にするドライバーが含まれます。これは、汎用キーボード ドライバーがこれらの非標準キーを理解できないためです。

ミドルウェア

ミドルウェアは、他の 2 つのソフトウェアの間に位置し、それらの間の仲介役として機能し、通常は 2 つのソフトウェア間の通信を容易にするタイプのソフトウェアです。

たとえば、ゲーム エンジンは、クライアント アプリケーション (ゲーム) と、ゲームが使用する可能性のあるオペレーティング システムによって公開されるさまざまなサービスの間に配置されるため、ミドルウェアと見なすことができます。

  • グラフィック サービス (Windows の場合は DirectX、Windows、Mac、Linux などの場合は OpenGL)
  • サウンド サービス (Windows の場合は DirectSound/Windows Audio、Mac の場合は Core Audio)
  • ネットワーク サービス (DirectPlay または Windows 用 Windows ソケット)

ゲームがゲーム エンジンを使用する場合、関連するオペレーティング システム サービスに直接要求するのではなく、エンジンに実行したいタスクの実行を要求します。

ミドルウェア層を介してサービスを使用することの主な利点は、サービスを使用するアプリケーションがサービスの動作の詳細を気にする必要がないことです。そのため、ゲーム開発者はエンジンにタスク (たとえば三角形の描画) を実行させることができ、描画を行う実際のサービスがプログラミングの観点からは実際には大きく異なる可能性があるにもかかわらず、Windows と Mac で三角形が同じように描画されることをかなり確信で​​きます。

関連情報