ファームウェアとミドルウェアの関係と違いは何ですか?
ウィキペディアは言う
ファームウェアは、永続メモリとプログラムコード、およびそれに格納されているデータの組み合わせです。[1]ファームウェアを含むデバイスの典型的な例は、組み込みシステム(信号機、家電製品、デジタル時計など)、コンピューター、コンピューター周辺機器、携帯電話、デジタルカメラです。これらのデバイスに含まれるファームウェアは、デバイスの制御プログラムを提供します。
ミドルウェアは、オペレーティングシステムから利用できるものを超えてソフトウェアアプリケーションにサービスを提供するコンピュータソフトウェアです。それは「ソフトウェア接着剤」として説明することができます。[1]ミドルウェアを使用すると、ソフトウェア開発者は通信と入出力を簡単に実行できるため、アプリケーションの特定の目的に集中できます。
ハードウェア、高レベルのソフトウェア、オペレーティングシステムなどと比較して、それらの役割の違いをまだ理解していません。
例えば、
BIOSファームウェアはミドルウェアではありませんか?
OSのブートローダーはファームウェア、ミドルウェア、または何らかのウェアですか?
ミドルウェアではなくCPUファームウェアの命令セットですか?
ファームウェアではないミドルウェアはありますか?
デバイスドライバとファームウェアおよびミドルウェアの関係と違いは何ですか?
ありがとう!
ファームウェアとミドルウェアは、特定の「コード」のセットを説明するための単純な業界用語です。
ファームウェア(ウィキが述べているように)「通常」は「通常」アセンブリまたはCで記述された「通常」実行されるソフトウェアを表します オン/ザ ハードウェア。
「on/the」は、このソフトウェアが、ソフトウェアが制御するハードウェアに直接接続されている永続的なストレージメディア(ある種の小さなフラッシュなど)に存在することを示します。ハードウェアを実行するために特別に設計されたソフトウェアであるため、「ファームウェア」と呼ばれます。
また、私は通常、テクノロジー業界が用語を作り、それを歪め、Wordの真の意図が誰にもわからないようにするという恐ろしい習慣があるため、Wordを引用します。 「組み込みプログラミング」は現在の良い例です。この用語は通常、本質的にファームウェアであるものを開発したプログラマー(つまり、低レベルのASM/Cハードウェア開発者)を指しますが、その後、この用語はAndroid開発者(つまり、Linux /カーネル開発者)を含むように変形しました。 JavaとCレベルの両方で動作できます)。私は開発者や開発の慣行を非難しているわけではありません(私は自分で開発するタイプの多くを行っています)。ハイテク業界は言葉を誤用するのが好きです。
ミドルウェアはそのような単語の別の例です。ハードウェアレベルのコード以外に使用される「ファームウェア」はまだ聞いたり見たりしていませんが、ファームウェアから.NET/Javaまですべてでミドルウェアが使用されているのを見てきました。ミドルウェアは、(開発者として)通常、何度も誤用されているのを見て、意図されていることをコンテキストから解読できる一般的な用語です。直接あなたに答えるために:
ハードウェア、高レベルのソフトウェア、オペレーティングシステムなどと比較して、それらの役割の違いをまだ理解していません。 ファームウェアは、特定のハードウェアに常駐し、そのハードウェアを実行するソフトウェア(コードをバイナリ形式に変換)です。ミドルウェアは、ハードウェア(またはそのことについては別のソフトウェア)と相互作用するAPI /ライブラリを意味するために使用できます。
BIOSファームウェアはミドルウェアではありませんか? これに対するあなたの見方によっては、両方である可能性があります。技術的には、BIOSはファームウェア(それが搭載されているハードウェア、つまりミドルウェアを実行するために特別に使用されるソフトウェア)ですが、何らかの方法でハードウェアの一部と直接対話することを目的としている場合(OSのように)、BIOS '独自のBIOSおよびハードウェアルーチンを「作成」する必要がないため、「ミドルウェア」である可能性があります。これは「ミドルウェア」の誤用が発生する可能性がある場所ですが、古典的なので、BIOSはミドルウェアではありません。
OSのブートローダーはファームウェア、ミドルウェア、または何らかのウェアですか? OSのブートローダーは、BIOS(または他の基本的なハードウェアサブシステム)と上位レベルのシステム(通常はOS)の間に存在するコードであり、OSがブートメディア上のどこにあるかを下位システム(つまりBIOS)に通知します。通常、ブートローダーはストレージメディアの特定の場所(最初の数百バイト以上など)に配置され、BIOSは(業界標準のおかげで)ブートローダーを「探す」場所を認識し、その時点でブートローダーが引き継ぎます。書かれていることを実行する(通常はOSを起動する)。
ブートローダーはファームウェアではありませんが、技術的にはファームウェアに存在する可能性があり、「ミドルウェア」である限り、「ミドルウェア」が何であるか/あるべきかについての「あなたの」見方に応じて、はいまたはいいえになる可能性があります。 、ブートローダーミドルウェアは簡単なコンテキストを提供しないため(OSを作成している場合を除く)、考慮しません。
ミドルウェアではなくCPUファームウェアの命令セットですか? CPUの命令セットは、アプリケーションプログラミングインターフェイス(API)(ミドルウェアの形式と見なすことができます)のようなものと見なされます。CPU(中央処理装置自体)には何も含まれていないため、ファームウェアではありません。 '走る'; CPU命令セットは、ソフトウェアが(アセンブリ)に「コンパイル」して、CPUが実行方法を「理解」するものです。
ファームウェアではないミドルウェアはありますか? はい;考えられるほぼすべてのソフトウェアフレームワーク(.NETまたはJavaライブラリなど))は、プログラマーにさまざまな側面と対話するための「より簡単な」方法を提供するため、ミドルウェアの形式と見なすことができます。たとえば、Javaを使用すると、ファイルを開いてそのファイルに書き込み、そのコードを任意のJavaサポートされているシステムで動作させることができます。特定のJava APIを使用すると、異なるシステム間でファイルと対話する数行のコードを使用できます。開発者は異なるシステム(Linux/Windows /)ごとにコードを記述する必要がないため、「ミドルウェア」の形式と見なすことができます。 Appleなど)ハードドライブのファイルシステムおよびOS自身と対話します。
デバイスドライバとファームウェアおよびミドルウェアの関係と違いは何ですか? デバイスドライバは、OSレベル(通常は「インストール済み」ライブラリとして)にあるソフトウェアであり、OSに「どのように」デバイスと対話するかを指示します。たとえば、最新のビデオドライバをインストールすると、OSが実際のビデオカード自体と通信するために「使用する」ソフトウェアがインストールされます。ビデオカード自体には、OSから提供された情報を解釈する方法(ドライバーのため)を認識し、それを使用して実行するファームウェアがあります(たとえば、ウィンドウやゲームのスプライトを描画します)。
デバイスドライバは、OS /ハードウェアとOSを介してハードウェアを使用したい人の間に位置するため、ミドルウェアと見なすことができます(これもそのような見方によって異なります)。
事例:私の業界の経験では、「ミドルウェア」から「Webサービス」など(少なくともこの用語を使用している人がとにかく意味していること)を見つけましたが、それを見たり聞いたりしました(誤)APIやライブラリ(BoostやSpringなど)からC++ STL、さらにはC#自体(.NETではなく言語自体)まで、さまざまな意味で多くの求人情報やインタビューで使用されています。
それがお役に立てば幸いです。
BIOSファームウェアはミドルウェアではありませんか?
正しい。ミドルウェアはOSの上にあり、OSサービスを使用してより高いレベルのサービスを提供します。 BIOSはOSの下にあります。
OSのブートローダーはファームウェア、ミドルウェア、または何らかのウェアですか?
ブートローダーは低レベルのアプリケーションです。ファームウェア(プラットフォーム固有であり、ハードウェア固有ではないため)またはミドルウェア(OSサービスを使用しないため)ではありません。
ミドルウェアではなくCPUファームウェアの命令セットですか?
CPUの命令セットはソフトウェアではありません。だから、それはそれらのどれでもありません。ハードウェア、マイクロコード、またはいくつかの組み合わせで実装できます。
ファームウェアではないミドルウェアはありますか?
ミドルウェアはOS固有ですが、ファームウェアはそうではありません。ファームウェアは特定のハードウェア用に構築されています。ミドルウェアは特定のOS用に構築されています。
デバイスドライバとファームウェアおよびミドルウェアの関係と違いは何ですか?
ファームウェアは通常、ハードウェアに組み込まれており、そのハードウェア自体で実行されます。デバイスドライバーはOSの一部であり、それらが制御するハードウェアではなく、CPU上で実行されます。ミドルウェアはOSに固有であり、OSサービスを使用して、ハードウェア制御だけでなく、より高いレベルのサービスを提供します。
非常に一般的に定義されるソフトウェアは、プロセッサ上で実行され、アクションを実行するように指示する一連の命令です。この定義によれば、ファームウェア、ミドルウェア、およびドライバーもソフトウェアであり、異なる用語は、大きく異なる役割を持つ3つの異なるクラスのソフトウェアを表します。
ファームウェアは、一般に不揮発性ストレージ(EEPROMチップなど)に常駐し、他のシステムハードウェアをブートストラップ(使用可能にする)したり、オペレーティングなどの「高レベル」ソフトウェア用にそのハードウェアへのソフトウェアインターフェイスを提供したりするソフトウェアです。システム。
たとえば、PC BIOS(またはMacのEFI環境)はファームウェアと見なすことができます。これらは両方とも非揮発性ストレージ(通常はマザーボードIIRCのチップ)に存在し、ハードウェアの初期化のいくつかの側面とディスクなどのハードウェアと通信するためにBIOSによって提供される機能を使用する可能性のある他のソフトウェア(ブートローダーなど)のロード。そこから、第2ステージのブートローダーまたはオペレーティングシステムカーネルがロードされます。
たとえば、ゲームエンジンは、クライアントアプリケーション(ゲーム)と、ゲームが使用する可能性のあるオペレーティングシステムによって公開されるさまざまなサービスの間にあるため、ミドルウェアと見なすことができます。
ゲームがゲームエンジンを使用する場合、関連するオペレーティングシステムサービスに直接要求するのではなく、実行したいタスクを実行するようにエンジンに要求します。
ミドルウェア層を介してサービスを使用する主な利点は、サービスを使用するアプリケーションがサービスの動作の詳細に関係する必要がないことです。したがって、ゲーム開発者はエンジンにタスクを実行させることができ、たとえば三角形を描くことができます。描画を行う実際のサービスが実際にはプログラミングの観点から大きく異なる可能性があるという事実にもかかわらず、三角形がWindowsとMacで同じように描画されることを合理的に確信してください。