PCとOSがどのように相互作用するかについての全体像を完成させようとしています。そして、私は、デバイスドライバーに関しては、ほとんど推測できないところにいます。
複雑すぎるようなことを書かないでください。そうしないと、高度なプログラミング言語やwinapi関数を使用するときに知る必要がありません。知りたいのですが、勉強用です。
つまり、OSとPC(PCはもちろんHWを意味します)の非常に基本的な構造は、CPUがそれ自体で実行できる直接CPUコマンド(算術演算、レジスタアクセス、メモリアクセス)以外のすべてがどのように見えるかということです。 )OSを通過する必要があります。主にリングレベル3から、他のHWをエースするために使用されるイントラクションを使用することはできません。MMIOがあることは知っていますが、最初にポート通信で設定する必要があります。
いつもこんな感じではありませんでした。私はMSDOSを覚えているのは少し若いですが、HWに直接アクセスできることは知っています。なぜなら、制限や呼び出しモードがないからです。したがって、DOS関数を使用して文字列を表示するか、ビデオカードのメモリに直接アクセスして自分で書き込むことができます。
しかし、OSが開発されるにつれて、この可能性はなくなりました。しかし、OSがすべてのHW通信を処理するようになったので、それは問題ありません。率直に言って、マルチタスク環境では、より便利ではるかに安全です(私が唯一のオプションと言えます)。そのため、今日では、BIOSマップ関数またはDOS関数を使用するためにint命令を使用する代わりに、知る必要のないすべてを処理するよりも内部的にdllを呼び出します。
これは分かります。また、デバイスドライバーは、リングレベル0で実行されるコードの一部であるため、すべてのハードウェア操作を実行できることも理解しています。しかし、私が理解していないのは、OSとデバイスドライバー間の接続です。例を見てみましょう-サウンドカードに音を出させたいのです。だから私はサウンドカードにアクセスするためにWindowsAPIを呼び出しますが、それ以上に何が起こりますか?Windowsはデバイスドライバーを呼び出してそうしますか?
しかし、デバイスドライバーを呼び出す場合、winAPI関数で呼び出すことができるすべてのデバイスドライバーには、特定の方法で名前が付けられたルーチンが必要であることを意味しますか?つまり、新しいサウンドカードを使用する場合、そのドライバーには古いサウンドカードと同じ名前の機能が必要ですか?では、Windowsは実際にその観点から同じ関数を呼び出すことができますか?ただし、Windowsにデバイスドライバーによって要求される事前定義された機能のセットがある場合、OSの最後のバージョンがリリースされる前に存在していなかった新しいドライバーを使用することはできません。
この混乱を理解するのを手伝ってください。私は本当に怒っています。ありがとう。