特権レベル(DPLとCPLとRPL)


特権レベル

CPUやOSの入門書には、特権レベルが説明されていますが、実は特権レベルって3種類あるんです。(IntelのCPUの場合)
ややこしい・・・

具体的には、
RPLや、CPLや、DPL
が特権レベルです。

これらがどう関係してくるかを簡単に説明します。

特権レベルの値について

とにかく、知っててほしいのが、
特権レベルって0~3の値のどれか1つもつということです。
これは、RPL、CPL、DPLすべて同じことが言えます。
0が一番権利が強くて、3が弱いということだけはとりあえず覚えてください。

DPLとは

DPLが最も基本となる特権レベルです。
各セグメントは、必ずDPLを持ちます。
これは、どういうものかというと、
他のセグメントにアクセスされた際に、使われるものです。
とりあえず、DPLというのは、他のコードセグメントにアクセスされた際に、利用する特権レベルなんだなという認識でいいと思います。

CPL

CPLとは、実行しているコードセグメントの特権レベルのことを言います。
CPLは、DPLと全く同じ値を持ちます。
そして、このCPLが、他のセグメントにアクセスしようとしたときに
そのセグメントのDPLと今実行しているコードセグメントのCPLを比較します。

例えば、
アクセスしようとしているコードセグメント CPL=0
アクセスされるセグメント DPL=3
のとき、
0のほうが特権レベルは強いので、この場合
アクセスできます。

実行中のコードセグメント CPL=3
アクセスされるセグメント DPL=0

この場合、CPUは、一部保護例外を起こします。

つまり、アクセスできないのです。

RPLとは

RPLはどういう特権レベルかというと

CPLを書き換えることができる特権レベルです。

これは割り込みやコールゲートで、元のコードの特権レベルを引き上げる(権力としては下げるという意味。)役割を持っています。