web-dev-qa-db-ja.com

割り込みと特権レベルはどのように機能しますか?

割り込みがどのように機能するか(ハードウェアとソフトウェアの両方)、および割り込みに伴う特権について、よりよく理解しようとしています。

例としてNICを使用する場合。OSがIDTを作成するとき、NIC記述子のエントリはそれを処理する組み込みドライバーを指しますか? 。ユーザーがNIC用のサードパーティドライバーをインストールする場合、IDTは新しいドライバーを指すように変更されますか?

USBコントローラーからの割り込みはUSBドライバーを指しますか?

このIDTエントリの特権レベルはどのくらいで、どのような目的に役立ちますか?ハードウェア割り込みが特権レベルを無視し、関係なく実行できることをどこかで読んだことがありますが、これが本当かどうかはわかりません。

ソフトウェア割り込みの場合、これらはどのような種類の割り込みを実行しますか。カーネルの機能にアクセスしたい場合、これらはすべて、レベル3の特権を持つ同じ割り込みを介してアクセスされますか?

どのような種類のソフトウェア割り込みがあり、ユーザーモードプログラムはそれらをどのように処理しますか、またはユーザーモードプログラムはソフトウェア割り込みを使用してカーネルにアクセスします。

私はオンラインソースからすべてをつなぎ合わせようとしていますが、プロセス全体がどのように機能するかを誰かが明らかにできるかどうか疑問に思っています。

どんな助けでも大歓迎です。

ありがとう。

3
RJSmith92

要求しているプロセッサアーキテクチャを指定していません。あなたはPCのx86プロセッサについて話していると思います。知っておくべき非常に基本的な情報は、現在の主要なオペレーティングシステムは、カーネル(レベル0)とユーザー(レベル3)の2つの特権レベル(x86プロセッサアーキテクチャによって提供される4つのうち)のみを使用することです。このことから、すべてのドライバーで、すべての割り込みサービスルーチンがカーネル特権(レベル0)で実行される必要があるということになります。

ソフトウェア割り込みは、特権の低いコードから特権レベルの高い関数を呼び出す方法です。これは、ユーザー(レベル3)コードがカーネル(レベル0)関数を呼び出したい場合にのみ、現在のオペレーティングシステムで発生します。

その後、ユーザーがNIC用のサードパーティドライバーをインストールする場合、IDTは新しいドライバーを指すように変更されますか?

IDTは通常、一般的なカーネル関数を指します。この関数は、メモリ構造内の実際の割り込みサービスルーチンのアドレスを検索します。通常、この構造は、ドライバーがカーネルにロードされるときに設定されます。インストールには通常、ファイルシステム内のファイルのコピーが含まれますが、これらの構造はメモリ内に存在します。

Linuxのソースを調べると、これらが現在どのように実装されているかについての良い洞察が得られます。

2
Laszlo Valko