Linuxシステムでユーザーモードからカーネルモードに切り替えるプロセスをよりよく理解しようとしています。
プロセスが低レベルのハードウェア/制限されたメモリスペースへのアクセスを必要とする場合、プロセスはカーネルにシステムコールを発行し、カーネルはその代わりにコードを実行して情報をプロセスに返しますか?または、カーネルがプロセスを特権モードにし、プロセス自体がカーネルモードで実行され、要求されたリソースにアクセスできるようになりましたか?
ありがとう!
カーネルにシステムコールを発行し、カーネルが代わりにコードを実行して、情報をプロセスに返しますか?または、カーネルがプロセスを特権モードにし、プロセス自体がカーネルモードで実行され、要求されたリソースにアクセスできるようになりましたか?
はい。システムコールに応じて、上記のいずれか。
プロセスがカーネルモードに移行して処理を実行する場合があります。カーネルスレッドが作業を処理することがあります。特にI/Oとファイルシステム関連です。 gettimeofday()
の場合、vDSOは、カーネル空間に移動せずに値を読み取るだけであることを意味します。
LWNのシステムコールの構造 などのシステムコールインターフェイスを紹介する記事を読んでください。アーキテクチャ固有であるため、Linux on x86の詳細は、他のオペレーティングシステムやCPUタイプに移植できません。しかし、おそらく同様の概念があります。
プロファイリングツール を使用して、ワークロードのスタックがどのように見えるかを確認します。 %「システムCPU」がワークロードに典型的であることを理解してください。