page

# mcrash

## page

### 書式

usage: `page` [-a] [address] | -n #

### 説明

Linuxは仮想アドレス方式になっています。 物理メモリはシステムで固定のページサイズ毎に物理ページに分けられます。 メモリを管理するため、 すべての物理アドレスにはpage構造体が割り当てられています。 page構造体では、各ページの情報を管理しています。

ページサイズ
  システムによって決まっています。 (何故か)x86のLinuxでは必ず4096バイトです。 その他のCPUではそれ以外のサイズになっていることもありますし、 更にCPUによってはカーネルの`make config`で変更可能な場合もあります。 いずれにせよ、Linuxでは複数のページサイズの混在はありません。

総物理メモリ量はLinuxが立ち上がってから増えたり減ったりしません (メモリは電源を落としている間に増設するものです)。 という事は、page構造体の個数もLinuxが起動してから増えたり減ったりしません。 カーネル初期化時に、ポインタ`mem_map`で表されるアドレスから page構造体の配列が作られます。 -nオプションではmem_mapの配列の添字指定でpageを指定できます。

MAPPINGエントリは`address_space` で表示できます。 BUFFERSエントリは`buffer_head` で表示できます。 ZONEエントリは`zone`で表示できます。

pageのフリーリストはzoneにあります。

### オプション

-a
  ハッシュリストをたどって表示します。
-n
  アドレスの代りに、ページ番号で指定します。

### エイリアス

標準で、`mem_page`を`page`にエイリアスしています。

### 実行例

    > page
        ADDR  MAPPING   INDEX CNT  BUFFERS  VIRTUAL     ZONE FLAGS
    c1117040 ca5ee150     2a4   2 c45e3a20 c45c1000 c024f288 uptodate
    c1117000 ca5ee150     2a5   2 c45e3a80 c45c0000 c024f288 uptodate
    c1116fc0 ca5ee150     2a6   2 c45e3ae0 c45bf000 c024f288 uptodate
    c1116f80 ca5ee150     2a7   2 c45e3b40 c45be000 c024f288 uptodate
    c1145900 c53f3c70       0   2 c51756c0 c5164000 c024f288 ref uptodate active
    c128e600 ca3f3870       0   2 ca3a21a0 ca398000 c024f288 ref uptodate
    c11455c0 c53f3e50       0   2 c5175720 c5157000 c024f288 ref uptodate active
    c128e3c0 ca3f3a50       0   2 ca3a2380 ca38f000 c024f288 ref uptodate
    c1291a00 ca3f3c30       0   2 ca3a2620 ca468000 c024f288 ref uptodate checked
      (略)

    > page -n 0
        ADDR  MAPPING   INDEX CNT  BUFFERS  VIRTUAL     ZONE FLAGS
    c1000000        0       0   0        0 c0000000 c024f1e0 reserved

mcrash, Copyright (C) 2002 ASANO Masahiro