vDSO (virtual dynamic shared object) は、注意深く選択された kernel space ルーチン群を、user space 上のアプリケーションにエクスポートするための、カーネルメカニズムである。これにより、アプリケーションは、それらカーネル空間ルーチンを、システムコール インタフェースを使用して、それらの同じカーネル空間ルーチンを呼び出す時に固有の、user mode から カーネルモード への コンテキストスイッチ によるパフォーマンス低下なしに、プロセス内で呼び出せる。[1][2]
vDSO は、リンク と ロード に標準のメカニズムを使用する。すなわち、標準の Executable and Linkable Format (ELF) 形式である。[3][4] vDSO は、いくつかのカーネル機能を公開する、ユーザ空間に割り当てられたメモリ領域である。vDSO iは dynamically allocated、offers improved safety through アドレス空間配置のランダム化 を使って安全性が向上され、4つ以上のシステムコールをサポートする。glibc のようないくつかの 標準Cライブラリ は vDSO リンクを提供するため、カーネルが vDSO をサポートしていない場合は、従来からの システムコール が作成される。[5] vDSO は単純なカーネルルーチン呼び出しオーバヘッドを削減するのに役立ち、IA-32 のようなある種の コンピュータ・アーキテクチャ では、最適なシステムコールメソッドを選択する方法としても機能する。[6] 他の方補よりも優れている点は、エクスポートされたルーチンが、適切な DWARF (Debug With Attributed Record Format) デバッグ情報を提供出来ることである。実装は一般的に、vDSO を見つけるための、ダイナミックリンカ中のフックを示している。
vDSO は vsyscall 機能を、その制限を克服して提供するために開発された。すなわち、4つのシステムコールしか使えない statically allocated 少量のメモリ、各プロセスで同一アドレスの アプリケーションバイナリインタフェース (ABI) によるセキュリティの妥協である。このセキュリティ問題は en:emulating a virtual system callによって緩和されたが、エミュレーションにより遅延が増加する。[5]
参照