ユーザースペースがカーネルより遅いのはなぜですか?

ユーザースペースがカーネルより遅いのはなぜですか?

FUSEベースのファイルシステムはユーザー空間プログラムで実装されているため、非常に遅いと聞きました。ユーザースペースがカーネルより遅いのはなぜですか?

ベストアンサー1

コードはカーネルモードでもユーザーモードでも同じ速度で実行されますが、カーネルコードが直接実行できるいくつかの点がありますが、ユーザーモードコードはいくつかの手順をスキップする必要があります。特に、カーネルコードはアプリケーションメモリを直接マッピングできるため、アプリケーションメモリとハードウェアからコピーされた内部バッファ間でファイルの内容を直接コピーできます。ユーザーコードは、パイプまたはソケットを介して追加のコピーを作成するか、より複雑なメモリ共有操作を実行する必要があります。

さらに、すべてのファイル操作はカーネルを通過する必要があります。プロセスがすべてと対話できる唯一の方法は、システムコールを介することです。ファイル操作が完全にカーネル内で行われる場合、ユーザー/カーネル変換とカーネル/ユーザー変換が1つずつのみ行われるため、非常に高速です。ファイル操作が別のプロセスによって実行される場合は、プロセス間でコンテキスト切り替えを実行する必要があります。メモリ管理ユニット

ほとんどのハードウェアアクセス時間では、速度パフォーマンスは依然としてわずかですが、ハードウェアにボトルネックが発生しない場合、特にメインプロセッサが他のタスクを実行するときに観察できます。データコピープロセス間でCPUが使用されています。

おすすめ記事