web-dev-qa-db-ja.com

Linuxカーネルモードとユーザーモード

Linuxシステムでユーザーモードからカーネルモードに切り替えるプロセスをよりよく理解しようとしています。

プロセスが低レベルのハードウェア/制限されたメモリスペースへのアクセスを必要とする場合、プロセスはカーネルにシステムコールを発行し、カーネルはその代わりにコードを実行して情報をプロセスに返しますか?または、カーネルがプロセスを特権モードにし、プロセス自体がカーネルモードで実行され、要求されたリソースにアクセスできるようになりましたか?

ありがとう!

1
John Doe

カーネルにシステムコールを発行し、カーネルが代わりにコードを実行して、情報をプロセスに返しますか?または、カーネルがプロセスを特権モードにし、プロセス自体がカーネルモードで実行され、要求されたリソースにアクセスできるようになりましたか?

はい。システムコールに応じて、上記のいずれか。

プロセスがカーネルモードに移行して処理を実行する場合があります。カーネルスレッドが作業を処理することがあります。特にI/Oとファイルシステム関連です。 gettimeofday()の場合、vDSOは、カーネル空間に移動せずに値を読み取るだけであることを意味します。

LWNのシステムコールの構造 などのシステムコールインターフェイスを紹介する記事を読んでください。アーキテクチャ固有であるため、Linux on x86の詳細は、他のオペレーティングシステムやCPUタイプに移植できません。しかし、おそらく同様の概念があります。

プロファイリングツール を使用して、ワークロードのスタックがどのように見えるかを確認します。 %「システムCPU」がワークロードに典型的であることを理解してください。

1
John Mahowald