特権レベル
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を書き換えることができる特権レベルです。
これは割り込みやコールゲートで、元のコードの特権レベルを引き上げる(権力としては下げるという意味。)役割を持っています。