2010年7月4日日曜日

「12ステップで作る 組込みOS自作入門」- KOZOSのスレッド生成を変えてみる part2



KOZOSのレディキューですが、次のようにプライオリティごとにあります。

static struct {
    kz_thread *head;
    kz_thread *tail;
} readyque[PRIORITY_NUM];

一方、レディキューは1つにするという考え方もあると思います。そのほうが
シンプルですし。例えば、こんな感じで

typedef struct _kz_list {
    kz_thread *thrd; /* スレッド */
    int aux;         /* 補助情報 */
    struct _kz_list *next; /* 次の要素 */
} kz_list;
static kz_list readyque;

auxという補助情報ですが、基本的にはプライオリティ値を入れます。ただ、
先頭要素であるreadyqueにはリストにつながっている要素数を入れておきます。

次にリスト操作のAPIを考えて見ますが、

/* スレッドをリストに挿入する */
void kz_insert(kz_list* list, kz_thread* thrd);

例えば、新しくスレッドを作成した場合は、kz_insertを呼び出してreadyque
にスレッドを挿入します。スレッドの挿入は、プライオリティ値の小さい順に
しておきます。

0 件のコメント: