ページング
目次
ページングとは
メモリをページと呼ばれる小さな単位に分割して割り当てを行うアルゴリズム。
VESAのVBEを使うと、なぜかうまくいかないので、現在停止中。。
ページ・ディレクトリ・エントリ(PDE)とページ・テーブル・エントリ(PTE)
ページングに使用されるメモリ上のデータ構造。
リニアアドレスを物理アドレスに変換するためのデータを格納する部分。
ページ・ディレクトリ・テーブルに、最大1024個のページ・ディレクトリ・エントリ(PDE)が、
ページ・ディレクトリ・エントリ(PDE)には、ページ・テーブルのベースアドレスや各種フラグが、
ページ・テーブルには、最大1024個のページ・テーブル・エントリ(PTE)が、
ページ・テーブル・エントリ(PTE)には、ページのベースアドレスや各種フラグがそれぞれ格納されている。
- イメージ
ページ・ディレクトリ・テーブル
├ページ・ディレクトリ・エントリ → ページ・テーブル
│ ├ページ・テーブル・エントリ → ページ
│ ├ページ・テーブル・エントリ → ページ
│ ├ページ・テーブル・エントリ →
│
├ページ・ディレクトリ・エントリ → ページ・テーブル
│ ├ページ・テーブル・エントリ → ページ
│ ├ページ・テーブル・エントリ → ページ
│ ├ページ・テーブル・エントリ →
│
├ページ・ディレクトリ・エントリ →
│
4KB PDE、4KB PTE
| bit | Flag | 説明 |
|---|
| 0 | P | 存在 |
| 1 | R/W | リード/ライト |
| 2 | U/S | ユーザ/スーパーバイザ |
| 3 | PWT | ページ・レベル・ライトスルー |
| 4 | PCD | ページ・レベル・キャッシュ・ディスエーブル |
| 5 | A | アクセス |
| 6 | 0 | PDE:予約済み |
| D | PTE:ダーティ |
| 7 | PS | PDE:ページサイズ |
| PAT | PTE:ページテーブル属性インデックス |
| 8 | G | グローバル・ページ |
| 9 | AVL | システムが使用可能 |
| 10 |
| 11 |
| 12 | | 20bit PDE:ページテーブルのベースアドレス PTE:ページのベースアドレス |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 23 |
| 24 |
| 25 |
| 26 |
| 27 |
| 28 |
| 29 |
| 30 |
| 31 |
ページング方式の実装
ページ・ディレクトリ・テーブルの設定
ページ・テーブルの設定
CR3?にページディレクトリテーブルのアドレスを設定
割り込み記述子表(IDT)にページフォルトハンドラを登録
CR0のPGフラグをONにし、ページングを有効にする。
参考
PagingSample.tar.gz 516件
[詳細]