概要


ページテーブルを初期化する。

引数

  • bytesize: メジャーヒープとマイナーヒープの合計量(バイト単位)。

戻り値


成功したら0, 失敗したら-1.

32ビットの場合


int caml_page_table_initialize(mlsize_t bytesize)

{
  int i;
  for (i = 0; i < Pagetable1_size; i++)

    caml_page_table[i] = caml_page_table_empty;

  return 0;
}

64ビットの場合


int caml_page_table_initialize(mlsize_t bytesize)
{
  uintnat pagesize = Page(bytesize);

必要なページテーブルの配列の大きさ。

本来、Pageマクロは、メモリアドレスのページ番号を得るためのものだが、ここでは、メモリの大きさからページ数を求めるのに使用している。


  caml_page_table.size = 1;

caml_page_table.sizeは、下のwhile文の中で変更される。

  caml_page_table.shift = 8 * sizeof(uintnat);

64ビットの場合、この時点でのcaml_page_table.shiftは、64のはず。

  /* Aim for initial load factor between 1/4 and 1/2 */

最初は、1/4から1/2までの負荷率を狙う。

  while (caml_page_table.size < 2 * pagesize) {
    caml_page_table.size <<= 1;
    caml_page_table.shift -= 1;
  }

ページテーブルの配列の大きさが、総ページ数の2倍以上になるまで、大きさを増やす。

  caml_page_table.mask = caml_page_table.size - 1;
  caml_page_table.occupancy = 0;
  caml_page_table.entries = calloc(caml_page_table.size, sizeof(uintnat));
  if (caml_page_table.entries == NULL)
    return -1;
  else
    return 0;
}

呼び出し元

タグ

このページへのコメント

rRoiNl Thank you ever so for you post. Keep writing.

0
Posted by check it out 2014年01月20日(月) 09:43:01 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

管理人/副管理人のみ編集できます