ページングについてわからなかった所とその現時点での理解

ページングテーブルについて理解が曖昧だった所の理解が進んだのでその記録*1

 

 

曖昧だった点

  • なぜ、ページングテーブルを多段に分けるのか?
  • 多段に分けても、同じアドレス幅で扱えるページ量は変わらないのでは?

現時点での理解

  • 多段に分けるのは、ページングテーブル自体に仮想記憶を適用するため
    • ページングテーブルを多段に分けることで
  • 扱えるページ量を増やすためではない

 

そもそもページングとは

メモリを区分けして何らかの属性を付与することで、プロセスごとでメモリ空間を扱いやすくしたり、仮想記憶を実現している。

しかし、扱えるメモリの最小単位である1バイト単位で属性を設定し、管理することは難しいので、一定の大きさに分けて管理している。

その区分け方法として、任意の大きさに分けるセグメント方式、一定の大きさに分けて必要な分だけ切り貼りするのがページング方式。

ページング方式ではプロセスのアクセスの局所性を考慮することで、必要な分だけメモリにロードする仮想記憶の仕組みを導入することができ、メモリを効率よく利用できる。この方法はデマンドページングと呼ばれる。

 

ページと実際の物理メモリの対応関係を記したものをページテーブルと呼ばれる。

ページテーブルにアクセする際は、CPU内のCR3(コントロールレジスタ3)の内容を取りだす。そこにはページテーブルが格納されている場所を表す、ページディレクトリテーブルが格納されている。

ここでアクセスされるページテーブルが通常のメモリと同様にページとして扱われ、仮想記憶を用いて効率よく利用される。

 

PTE : Page Table Entryページングに用いられる、データ構造。ページの場所を表す値や、書き込み、読み込みの履歴を管理するための値も格納されている

 

TLB : Translation Lookaside Buffer メモリアクセスの度にPTEを読み込んでいると遅くなるので、CPUに搭載されているPTE専用のキャッシュがありそれをTLBという。PTEが読み込まれた際に同時にTLBにコピーを置いておく。

 

 

*1:参考にした書籍 32ビットコンピュータをやさしく語る はじめて読む486アスキー書籍