このページの本文へ

前へ 1 2 3 4 次へ

基礎から覚える 最新OSのアーキテクチャー 第7回

Windowsのメモリー管理をx86の仕組みから読み解く

2011年11月17日 17時24分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

 連載6回目では、OSのメモリー管理の概要について話したが、今回はより詳しくWindowsのメモリー管理について解説しよう。だが本題に入る前に、まずはWindowsが動作するx86 CPUが持つ「仮想記憶機構」について解説しておく必要があるだろう。

 次期Windowsである「Windows 8」にはARM版も登場する予定だし、過去の「Windows NT」では、RISCプロセッサー向けが提供されていたこともあった。そもそもNTは当初、インテルの「i860」プロセッサー用として開発されたという経緯もある。しかし、現在はほぼすべてのWindowsがx86(64bit版のx64)上で動作しているので、Windowsの仮想記憶=x86の仮想記憶として解説する。

2段階の変換テーブルを使って
物理メモリーの位置を示すx86

 x86はプログラムやデータを、「セグメント」という単位で扱う。セグメントはメモリー内の連続した範囲のことで、32bitモードではセグメントレジスターに格納された値がメモリー上の「セグメントセレクタ」を指定し、さらにセグメントセレクタがセグメントの開始位置やサイズを指定している。セグメントレジスターは「コードセグメント」(CS)や、「スタックセグメント」(SS)、およびデータ用のDS、ES、FS、GSの6種類がある。セグメントの単位は64KBか4GBの2種類があり、それぞれ16bitオフセット、32bitオフセットを利用する。

 32bit Windowsでは「基本フラット・モデル」と呼ばれるメモリーモデルを採用する(図1)。このモデルでは、セグメントの位置やサイズを設定する「セグメントディスクリプタ」により、仮想メモリー全体の4GBをひとつのセグメントとして管理している。そのため仮想メモリー空間内のすべてのアドレスは、32bitの単純なアドレス(リニアアドレス)で表現できる。

図1 Windowsではコード用とデータ用にセグメントの設定(セグメントディスクリプタ)を仮想メモリー空間全体に適用し、リニアアドレスをプログラム内で扱う「基本フラットメモリーモデル」を採用する

 このような構造を採用したのは、「他のアーキテクチャーとの兼ね合い」という理由もあった。x86のセグメントは扱いが面倒な部分もあり、これに依存してしまうプログラムを作ると、他機種への移植が困難になる。そのため仮想メモリー空間全体を、ひとつのセグメントとして扱うようにしたわけだ。

 x86は物理メモリーを、4KBの「ページ」の集まりとして管理する。仮想記憶でのメモリーの割り当て単位はこの4KBであり、メモリーをスワップアウトするような場合には、ページ単位で扱う。

 前述したリニアアドレスは仮想メモリー空間内のアドレスなので、実際のメモリーにアクセスするには、これを物理メモリーアドレスに変換する。仮想メモリー空間はプロセスごとに独立しているため、プロセスごとに仮想アドレスと物理アドレスの対応は異なる。

 仮想メモリーアドレスを物理メモリーアドレスに変換するには、「アドレス変換」と呼ばれるCPU内の機構を使う。その際にリニアアドレスは、上位から10bit、10bit、12bitに区切って使われる。まずはCPU内のCR3レジスター(PDBR、ページディレクトリベースレジスターとも呼ぶ)が「ページディレクトリテーブル」と呼ばれるメモリー内の表の開始位置を指し示す。リニアアドレスの上位10bitは、このページディレクトリテーブル内のエントリの位置を示す(図2)。

図2 アドレス変換の仕組み。仮想メモリー空間内の1byteを表すリニアアドレスを10/10/12bitに区切り、2種類のテーブルを使ってページを指定する

 ページディレクトリテーブルの各エントリには、ページテーブルの開始位置が記録されている。リニアアドレス中位10bitは、このページテーブル内のエントリを位置を示す。そしてページテーブルの各エントリは、ようやくページの物理アドレスを示す。リニアアドレスの下位12bit(12bitでは4096=4KB内の1byteを指定できる)は、ページ内のオフセットとなる。

 こうして2段階のテーブルを参照することで、物理メモリー内にあるページを指し示すことができる。ページテーブルは20bitでページを指定するため、下位12bitのオフセットと合わせて、32bit(4GB)の物理メモリーを指定できる。つまり4KBのページを100万個指定できるわけだ。

前へ 1 2 3 4 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン