乾杯...
それがハードウェア アブストラクション レイヤーの略であることは理解していますが、正確には何をするのでしょうか? VB のような高級言語がハードウェアと通信できるように設計されていますか? IN/OUT 命令についてはどうですか?これらの命令は HAL ルーチンを呼び出しますか、または I/O マネージャーを介してハードウェアのデバイス ドライバーと直接通信しますか?
前もって感謝します
それがハードウェア アブストラクション レイヤーの略であることは理解していますが、正確には何をするのでしょうか?
これは基本的に、NT カーネルの「移植性のない」部分であり、NT を複数のプロセッサ アーキテクチャに移植できるように別のモジュールとして提供されます。例: 割り込みルーティング。
VB のような高級言語がハードウェアと通信できるように設計されていますか?
いいえ。これは、NT カーネルのサポート ルーチンとして意図されています。ユーザー モードでコーディングしている場合 (VB などの高級言語の場合と同様)、それが存在することを知る必要はありません。
IN/OUT 命令についてはどうですか?これらの命令は HAL ルーチンを呼び出しますか、または I/O マネージャーを介してハードウェアのデバイス ドライバーと直接通信しますか?
in
および命令を使用するとout
、これは CPU と直接通信します。これは、あなたが議論している NT カーネルのトピックとはまったく関係ありません。そこにはHALはありません。NT I/O マネージャーはありません。これらの命令は、I/O アドレスを介してデバイスと通信するために x86 命令セットが提供するものです。
HALは、オペレーティングシステムからハードウェアの詳細を「抽象化」するように設計されています(これはカーネルコンポーネントです)。
マシン固有の命令(afaikにはコンテキストスイッチによるAVX状態の保存などの処理が含まれます)や、割り込み(Google'Interrupts IDT'(引用符なし))などの他の詳細を処理するためのルーチンをカーネルに提供します。
カーネルはまだ一部の場所でハードウェアと直接通信するため、HALはカーネルの下に完全には配置されないことに注意してください。ただし、HALは、その機能の多くをカーネルに依存しています(そのため、多くの場合、一致する「セット」で提供されます)。
HAL は分離レイヤーのようなものです。これは、レイヤーの両側にあるものが変化する可能性があり、(理論的には) 反対側には影響を与えないことを意味します。
これは、さまざまな種類のハードウェアが HAL の下にある可能性があり、HAL を介して呼び出すソフトウェアは気にしないことを意味します。