カーネルはデーモンですか? (INT 命令による) トラップを発生させることが、カーネルと通信する唯一の方法ですか? カーネル サブルーチンを呼び出すすべてのシステム コールで INT トラップが発生しますか? ユーザー アプリはカーネル デーモンとは異なるプロセスで実行されますか? ユーザー プロセスはカーネル デーモンによって生成されますか?
3 に答える
カーネルはデーモンですか?
いいえ。
(INT 命令による) トラップを発生させることが、カーネルと通信する唯一の方法ですか?
はい、カーネルとユーザー空間アプリケーションはリングと呼ばれる異なる特権レベルにあるためです。カーネルはリング 0 と呼ばれるスーパーバイザー モードで実行され、ユーザー アプリケーションはユーザー モードと呼ばれるリング 3 で実行されます。
カーネル サブルーチンを呼び出すすべてのシステム コールで INT トラップが発生しますか?
はい、彼らがやります。
ユーザー アプリはカーネル デーモンとは異なるプロセスで実行されますか? ユーザー プロセスはカーネル デーモンによって生成されますか?
これはよくわかりません、詳しく教えてください。
(INT 命令による) トラップを発生させることが、カーネルと通信する唯一の方法ですか?
いいえ。まず、INT
トラップの古いメカニズムです。現在、ほとんどの OS はSYSENTER
x86 および x86_64 プラットフォームで使用されています。他のアーキテクチャには、さまざまな種類のソフトウェア割り込み/トラップ命令があります。
また、カーネルと通信する方法はトラップだけではありません。カーネルは、ユーザー モード プロセスに割り当てられたメモリを含め、任意のメモリにアクセスできるため、共有メモリは非常に有効です。
カーネル サブルーチンを呼び出すすべてのシステム コールで INT トラップが発生しますか?
カーネルルーチンを「呼び出す」方法は、トラップ ( SYSENTER
) を使用することです。カーネルが処理する共有メモリキューデータなどの他のメカニズムですが、それがサブルーチン呼び出しであるとは言えません。
プロセス、デーモンなどの概念全体は、カーネルによって作成された抽象化です。CPU レベルでは、分割のレベルは 2 つだけです。コードを並行して実行するプロセッサ コアと、使用できる命令を決定する特権リングがあります。
カーネルはリング 0 で実行されます (一部のドライバーはリング 1 と 2 に存在する場合もあります)。ユーザー空間コードは ring3 で実行されます。ring3 コード (ユーザー空間プロセス) から ring0 コード (カーネル) に制御を移すには、割り込みや sysenter 命令などの特別なプロセッサ メカニズムが必要です。