コールゲート
このような上位の特権レベルのコードを実行するための仕組みは、ユーザアプリケーションからのカーネルのファンクションやシステムコールの呼び出しをOSが制御することができるので、メモリ保護を行う現在のOSに必須のメカニズムである。
コールゲートを使った呼び出しでは、GDT (Global Descriptor Table) や LDT (Local Descriptor Table) にある特権障壁を越える呼び出しに必要な情報が記載されている特別なエントリを指すセレクタを使用する。 ソフトウェア割り込みと似たようなメカニズムである。
ユーザプログラムからコールゲートを使ってカーネルの機能を利用する場合、CALL FAR (LCALL) 命令に呼び出したい関数のコールゲートをセグメントセレクタに指定して実行するだけでよい (オフセット指定は無視される)。 コールゲートエントリのチェックと呼び出す権限の有無を確かめられた後、CS/EIP がセグメントデスクリプタから読み出され、呼び出し側の継続が新しいスタックに積まれる。(呼び出し側のSS, ESP, CS, EIPが順に積まれる) 必要な引数も呼び出し側の(低い権限の)スタックから呼ばれた側の(高い権限の)スタックにコピーされる。