以下は下記原文 2004/06/12(JST)時点 の検証無し翻訳です。 原文は University of California より GFDL で配付されており、
この翻訳も GFDL に従います。
原文: Core client: main loop logic
 
 
最終更新時刻 2006/03/01 01時10分 JST

コア・クライアント: メインループの論理

boinc.gif
Last modified 7:09 PM UTC, June 09 2004

コア・クライアントのメインループは、下記の関数を繰り返し呼びます。

bool CLIENT_STATE::do_something() {
    bool action=false;
    
    if (check_suspend_activities()) return false;
    action |= net_xfers->poll();
    action |= http_ops->poll();
    action |= file_xfers->poll();
    action |= active_tasks->poll();
    action |= scheduler_rpcs->poll();
    action |= start_apps();
    action |= pers_xfers->poll();
    action |= handle_running_apps();
    action |= handle_pers_file_xfers();
    action |= garbage_collect();
    write_state_file_if_needed();
    return action;
}

この関数は必要に応じて新しい活動を開始させるとともに、 現在の活動が完了するのを監視します。 この関数は、スリープを伴うループ(コマンドラインプログラム)から、 あるいは、イベントループ(GUIプログラム)のタイマーハンドラのいずれかから、 繰り返し呼ばれるはずのものです。 何らかの変化があると、この関数はtrueを返します。 その場合には、 スリープすることなくもう一度この関数を呼ばなければいけません。

呼びだされる様々な関数は以下のとおりです。

check_suspend_activities は、 ユーザの好みの設定(user preference)が[BOINCに]仕事をさせてはいけない と指定しているような条件がおきていないかどうか、たとえば、 最新のマウスやキーボード入力があったかどうか、または、バッテリーで 動作していないか、といった条件をチェックします。

net_xfers->poll(), http_ops->poll(), file_xfers->poll() および pers_xfers->poll() という関数は、種々のFSM層が起こす内部遷移を管理します。

start_apps() 関数は、あるアプリケーションを開始 することができるかどうかを検査します。 つまり、 CPU slot に空きがあり、入力ファイルが全部揃っている リザルトもあるという条件を調べます。 もし条件が満たされていれば、そのアプリケーションを開始します。

handle_running_apps() 関数は、走っていたアプリケーションが 終了したかどうかを調べ、もしそうなら、後始末をします。

handle_pers_file_xfers() 関数は、新しいファイル転送を 必要に応じて開始します。

garbage_collect() 関数は、 廃棄できるオブジェクトがないか検査します。 たとえば、あるファイルが non-sticky訳注1 で、 かつ、どんなワークユニットやリザルトからも参照されていないなら、 FILE_INFO とその実体である ファイルを削除することができます。 あるリザルト[の計算] が完了して、[サーバから]確認を得たなら、 その RESULT オブジェクトは削除することができます。

write_state_file_if_needed(): 上述の関数のどれかが、client_state.xml に書き出すべき状態変化 (たとえば、今回のコア・クライアントの実行[の途中経過] が消え去らないよう残す 必要があるような、[意味ある] 状態変化)を起こしたときは、その関数は、 client_state_dirty というフラグをセットします。 関数 write_state_file_if_needed() は、このフラグが立つと、 client_state.xml [へ状態を] 書き出します。


(訳注1):non-sticky
file-infoの sticky要素が存在しないようなファイルという意味でしょう。 つまり、計算が終わったらnon-stickyなファイルは、消されます。 ファイルとファイル参照をご参考に。

BOINCの訳のメインページに戻る | (原文のメインページに戻る)
 
Copyright © 2005 University of California
Translated by JE2BWM.