2009年9月25日金曜日

build_all_zonelists

今回見てみるのはbuild_all_zonelistsです。
実体はmm/page_alloc.cにあります。

========
/* コメントやprintkは省略してます */
void build_all_zonelists(void)
{
set_zonelist_order();

if (system_state == SYSTEM_BOOTING) {
/* すべてのノードのzonelistsを構築する */
__build_all_zonelists(NULL);
/* デバッグ用なので無視 */
mminit_verify_zonelist();
/* current->mems_allowedを初期化している。なんだ?? */
cpuset_init_current_mems_allowed();
} else {
/* ここに来たら異常。システムを停止させる */
stop_machine(__build_all_zonelists, NULL, NULL);
}
/* 全ノードの割り当て可能なページ数を取得 */
vm_total_pages = nr_free_pagecache_pages();

/* デバッグ用なので省略 */
}

========

要約するとゾーンリストを構築して、割り当て可能なページ数を「vm_total_pages」に格納する処理になります。
Linuxではページをゾーンという単位で管理しており、ゾーンリストというのはそれらゾーンをリストしたものです。

ゾーンリストについては下記を参考にしました。
Linux Kernel Hack Japan「build_all_zonelists()/linux2.6」


ここから呼び出している関数群についてはまた次回から見ていこうと思います。

0 件のコメント:

コメントを投稿