class.h

クラス管理モジュール [詳細]

#include "queue.h"
#include "lock.h"
#include "task.h"
#include "time_event.h"

class.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

データ構造

struct  cb_table_control_block
 CB Table Control Block(CBTCB) [詳細]
struct  ex_class_control_block
 Exported Class Control Block(EXCCB) [詳細]
struct  class_control_block
 Class Control Block(CCB) [詳細]

マクロ定義

#define NUM_CLASS   (NO_PROC)
 クラスの数の定義
#define CLS_MY_LOCAL   (PRCID)
 クラスID の定義
#define CHK_OBJID(cbtcb, id)   (0 < (id) && (id) <= (cbtcb)->max_id)
 オブジェクトID の範囲(最大値以内か)をチェックする.
#define get_exccb(clsid)   (&exported_ccb_table[(clsid) - 1])
 クラスIDからEXCCBを取り出す
#define runccb   my_local_ccb
 実行中タスクのCCB (task.c)
#define get_clsid(id)   ((ID)((H)((id) >> 16)))
 ID をクラスID とその他の部分に分解するためのマクロ
#define remove_clsid(id)   ((ID)((H)(id)))
#define get_ccb(clsid)   (&ccb_table[(clsid) - 1])
 クラスID から CCB を取り出す.
#define t_get_ccb_self(clsid)   ((clsid) == TCLS_SELF ? runccb : get_ccb(clsid))
 クラスID から CCB を取り出す(自ID対応)
#define i_get_ccb_self(clsid)   ((clsid) == TCLS_SELF ? my_local_ccb : get_ccb(clsid))
#define VALID_CLSID(clsid)   (0 < (clsid) && (clsid) <= NUM_CLASS)
 クラスID のチェック(自ID対応)
#define CHECK_CLSID_SELF(clsid)
#define T_CHECK_CLSID_CCB(id)
 ID からクラスID を取り出し,その範囲をチェックして,CCB を返す.
#define I_CHECK_CLSID_CCB(id)

型定義

typedef class_control_block CCB
typedef cb_table_control_block CBTCB
 CB Table Control Block(CBTCB)
typedef ex_class_control_block EXCCB
 Exported Class Control Block(EXCCB)

関数

void init_my_local_ccb ()
void exccb_initialize ()
void ccb_convert ()

変数

EXCCB exported_ccb_table [NUM_CLASS]
 EXCCBのエリア EXCCBのエリアはシステム全体で1つ EXCCBの領域はターゲット依存部で確保する
CCB ccb_table [NUM_CLASS]
 CCB のエリア
CCBmy_local_ccb
 CCB を効率良くアクセスするためのポインタ変数
EXCCBmy_local_exccb
 EXCCB を効率良くアクセスするためのポインタ変数


説明

クラス管理モジュール

class.h で定義されています。


マクロ定義

#define CHECK_CLSID_SELF clsid   ) 
 

値:

{ \
    if (!(VALID_CLSID(clsid) || (clsid) == TCLS_SELF)) {    \
        ercd = E_ID;                    \
        goto exit;                  \
    }                           \
}

class.h229 行で定義されています。

#define CHK_OBJID cbtcb,
id   )     (0 < (id) && (id) <= (cbtcb)->max_id)
 

オブジェクトID の範囲(最大値以内か)をチェックする.

class.h90 行で定義されています。

#define CLS_MY_LOCAL   (PRCID)
 

クラスID の定義

本カーネルはローカルクラスのみサポートしているため, ローカルクラスのID = プロセッサID(PROCID) とする.

class.h73 行で定義されています。

#define get_ccb clsid   )     (&ccb_table[(clsid) - 1])
 

クラスID から CCB を取り出す.

class.h210 行で定義されています。

#define get_clsid id   )     ((ID)((H)((id) >> 16)))
 

ID をクラスID とその他の部分に分解するためのマクロ

32bit 整数値を,H (16bit符号付き整数) にキャストした後,ID (32bit符 号付き整数) にキャストすることで,下位 16bit を 32bit に符号拡張する.

TODO:
ユーザーに開放する必要はないか?

class.h204 行で定義されています。

#define get_exccb clsid   )     (&exported_ccb_table[(clsid) - 1])
 

クラスIDからEXCCBを取り出す

class.h136 行で定義されています。

#define I_CHECK_CLSID_CCB id   ) 
 

値:

({ \
    ID  clsid = get_clsid(id); \
    CHECK_CLSID_SELF(clsid);   \
    i_get_ccb_self(clsid);       \
})

class.h246 行で定義されています。

#define i_get_ccb_self clsid   )     ((clsid) == TCLS_SELF ? my_local_ccb : get_ccb(clsid))
 

class.h220 行で定義されています。

#define NUM_CLASS   (NO_PROC)
 

クラスの数の定義

本カーネルは,それぞれのプロセッサのローカルクラスのみサポートして いるため, NUM_CLASS = プロセッサ数 とする.

class.h64 行で定義されています。

#define remove_clsid id   )     ((ID)((H)(id)))
 

class.h205 行で定義されています。

#define runccb   my_local_ccb
 

実行中タスクのCCB (task.c)

現時点ではローカルタスクしかないため,my_local_ccb に define する

class.h193 行で定義されています。

参照元 make_wait().

#define T_CHECK_CLSID_CCB id   ) 
 

値:

({ \
    ID  clsid = get_clsid(id); \
    CHECK_CLSID_SELF(clsid);   \
    t_get_ccb_self(clsid);       \
})
ID からクラスID を取り出し,その範囲をチェックして,CCB を返す.

class.h239 行で定義されています。

#define t_get_ccb_self clsid   )     ((clsid) == TCLS_SELF ? runccb : get_ccb(clsid))
 

クラスID から CCB を取り出す(自ID対応)

非タスクコンテキストにいた場合は my_local_ccb に飛ぶ扱いとする

class.h217 行で定義されています。

#define VALID_CLSID clsid   )     (0 < (clsid) && (clsid) <= NUM_CLASS)
 

クラスID のチェック(自ID対応)

class.h226 行で定義されています。


型定義

typedef struct cb_table_control_block CBTCB
 

CB Table Control Block(CBTCB)

CCBへタスクやオブジェクト(セマフォやイベントフラグなど)のID情報を登 録する構造体.cb_tableにはタスクや各オブジェクトの管理ブロックを登録 する.

typedef struct class_control_block CCB
 

class.h49 行で定義されています。

typedef struct ex_class_control_block EXCCB
 

Exported Class Control Block(EXCCB)

各プロセッサにおいて,他のプロセッサに公開する資源に関する情報を 登録するための構造体. 共有メモリ上の ex_ccb_table としてPE毎に領域を確保する. 実行時は,EXCCBから各プロセッサ上での実行時に使い易い形に整理した CCBにコピーする


関数

void ccb_convert  ) 
 

void exccb_initialize  ) 
 

void init_my_local_ccb  ) 
 


変数

CCB ccb_table[NUM_CLASS]
 

CCB のエリア

CCB のエリアは,PE毎に,通常はそのPEのローカルメモリ上に用意する.

EXCCB exported_ccb_table
 

EXCCBのエリア EXCCBのエリアはシステム全体で1つ EXCCBの領域はターゲット依存部で確保する

CCB* my_local_ccb
 

CCB を効率良くアクセスするためのポインタ変数

EXCCB* my_local_exccb
 

EXCCB を効率良くアクセスするためのポインタ変数


Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:13 2006 に Doxygen によって生成されました。