vDSO(仮想動的共有オブジェクト)は、カーネル空間ルーチンの厳選されたセットをユーザー空間アプリケーションにエクスポートするためのカーネルメカニズムです。これにより、アプリケーションは、システムコールインターフェースを介してこれらのカーネル空間ルーチンを呼び出す際に発生する、ユーザーモードからカーネルモードへのモード切り替えによるパフォーマンス低下を招くことなく、プロセス内でこれらのカーネル空間ルーチンを呼び出すことができます。[ 1 ] [ 2 ]
vDSO は、リンクとロードに標準メカニズム、つまり標準実行可能リンク可能フォーマット(ELF) フォーマットを使用します。[ 3 ] [ 4 ] vDSO は、カーネル機能の一部を公開するユーザー空間に割り当てられたメモリ領域です。vDSO は動的に割り当てられ、アドレス空間レイアウトのランダム化により安全性が向上し、4 つ以上のシステム コールをサポートします。glibcなどの一部のC 標準ライブラリは、vDSO リンクを提供する場合があります。これにより、カーネルが vDSO をサポートしていない場合は、従来のシステムコールが実行されます。[ 5 ] vDSO は、単純なカーネル ルーチンの呼び出しオーバーヘッドを削減するのに役立ち、 IA-32などの一部のコンピュータ アーキテクチャで最適なシステム コール メソッドを選択する方法としても機能します。[ 6 ]他の方法に対する利点は、このようなエクスポートされたルーチンが適切なDWARF (Debug With Attributed Record Format) デバッグ情報を提供できることです。実装では、通常、動的リンカに vDSO を見つけるためのフックが必要になります。
vDSOは、 vsyscallの機能を提供しつつ、その制限を克服するために開発されました。その制限とは、静的に割り当てられるメモリ量が少なく、システムコールを4つしか実行できないこと、および各プロセスで同じアドレスのアプリケーションバイナリインターフェイス(ABI)を使用するためセキュリティが損なわれることです。このセキュリティ上の問題は、仮想システムコールをエミュレートすることで軽減されていますが、エミュレーションによってレイテンシが増加します。[ 5 ]