はじめて読む486 6章
保護機能
プロテクトモードでは下記のチェックをCPU内部で行っている
- セグメントの属性
- セグメントリミット
- 特権レベル
- タスク
セグメントリミット
- アクセスしようとするメモリのオフセットアドレスがリミット値を超えていないかをチェックする
セグメントの属性
- TYPE: セグメントの種類
- S: セグメントの場合は1
- DPL: セグメントの特権レベル
- P: セグメントが存在するか(1→物理メモリに存在、0→物理メモリに存在しない)
- A: セグメントがアクセスされた(アクセスされると1をセットし、アクセスされているかを定期的にチェックする)
特権レベル
- 0: 特権命令を実行可能 OSが使用
- 1,2: デバイスドライバなどが使用
- 3: レベル3のセグメントのみアクセス可能 アプリケーションソフトウェアが使用
DPL
- Descriptor Privilege Level
- セグメントの特権レベル
-
- Current Privilege Level
- プログラム実行中の動作レベル
- CPLはプログラムの置かれているセグメントの特権レベルで決まる
- 動作レベルを変更するためには異なるセグメントにジャンプしなければならない
特権命令
特権レベルとセグメントのリード/ライト
IOPL
ゲート
実行するコードセグメントを変更するには、セグメント間JMP命令やCALL命令を実行する
- この際、異なる特権レベルを持つコードセグメントを直接呼び出せない
- 唯一許されているのは、特権レベルの低いコードセグメントから高いものをコールゲートを介して呼び出すこと
コールゲート
- 486に組み込まれた動作レベル移行のためのしくみ
- 典型的な用途はOSの呼び出し口
- アプリケーションがコールゲートを呼び出すことでOSが呼び出される