XINU
|
キュー構造体に関する宣言/定数/インライン関数を定義する。 More...
Go to the source code of this file.
Data Structures | |
struct | qentry |
プロセスエントリであり、本構造体の配列(長さNQENT)がプロセスキューテーブルとなる。 More... | |
Macros | |
#define | EMPTY (-1) |
次のキューインデックスもしくは前のキューインデックスがNULL値 More... | |
#define | firstid(q) (queuetab[queuehead(q)].qnext) |
リストの最初のプロセスのIDを返す。 More... | |
#define | firstkey(q) (queuetab[firstid(q)].qkey) |
リスト中の最初のプロセスのキーを返す。 More... | |
#define | isbadqid(x) (((int32)(x) < NPROC) || (int32)(x) >= NQENT - 1) |
キューIDが不正値かどうかをチェックする。 More... | |
#define | isempty(q) (firstid(q) >= NPROC) |
リストが空かどうかを返す。 More... | |
#define | lastid(q) (queuetab[queuetail(q)].qprev) |
リストの最後のプロセスのIDを返す。 More... | |
#define | lastkey(q) (queuetab[lastid(q)].qkey) |
#define | MAXKEY 0x7FFFFFFF |
キューの中に格納できるキーの最大値 More... | |
#define | MINKEY 0x80000000 |
キューの中に格納できるキーの最小値 More... | |
#define | nonempty(q) (firstid(q) < NPROC) |
リストに中身(プロセス)があるかどうかを返す。 More... | |
#define | NQENT (NPROC + 4 + NSEM + NSEM) |
#define | queuehead(q) (q) |
キューの先頭を返す。 More... | |
#define | queuetail(q) ((q) + 1) |
キューの末尾を返す。 More... | |
Variables | |
struct qentry | queuetab [] |
#define EMPTY (-1) |
次のキューインデックスもしくは前のキューインデックスがNULL値
Definition at line 23 of file queue.h.
Referenced by dequeue(), getfirst(), getlast(), newqueue(), and semreset().
リストの最初のプロセスのIDを返す。
[in] | q | キューID |
Definition at line 70 of file queue.h.
Referenced by clkhandler(), and insert().
キューIDが不正値かどうかをチェックする。
[in] | x | キューID |
割り込みが禁止された状態である事を想定している。
キューIDの不正とは、
① キューIDがユーザプロセス総数(NPROC)より小さい ② キューIDがデフォルトキューエントリ総数以上 のいずれかである。
Definition at line 132 of file queue.h.
Referenced by dequeue(), enqueue(), insert(), and insertd().
リストが空かどうかを返す。
[in] | q | キューID |
Definition at line 89 of file queue.h.
Referenced by clkhandler(), dequeue(), getfirst(), and getlast().
#define MAXKEY 0x7FFFFFFF |
#define MINKEY 0x80000000 |
キューテーブルのエントリ数(=NQENT)は、条件付きコンパイルによって、動的に
そのサイズを変更できる(queue.hの修正が不要となる)。 キューテーブル配列に対するデフォルトキューエントリ数。 NPROC個のプロセスに加えて、READYリスト/休眠リスト/セマフォリストの先頭と
末尾のポインタを保持するためのエントリ数を定義している。
キューエントリは、プロセスごとに1個、レディリストに2個、休眠リストに2個、
セマフォに2個を割り当てている。
Definition at line 19 of file queue.h.
Referenced by newqueue().
#define queuehead | ( | q | ) | (q) |
キューの先頭を返す。
[in] | q | キューID |
Definition at line 53 of file queue.h.
Referenced by getfirst(), insertd(), and newqueue().
#define queuetail | ( | q | ) | ((q) + 1) |
struct qentry queuetab[] |
プロセスキューテーブル(全てのプロセスがアクセス可能な変数)。
プロセスキューテーブル(全てのプロセスがアクセス可能な変数)。
NPROC-1より小さいインデックスは、プロセスIDに対応する。
queuetab[NPROC]〜queuetab[NQENT]の範囲は、キューIDと呼ばれ、
・リスト先頭
・リスト末尾
のポインタを保持するために使用される。
あるリストの先頭/末尾ノードは、queuetab配列のインデックスNPROC以降に配置し、
必ず連続した配置となる(例:先頭ノード→末尾ノード→先頭ノード→末尾ノード…)
XINU内では、リストは先頭ノードのインデックスで識別および操作する仕様である。
Definition at line 45 of file queue.c.
Referenced by clkhandler(), dequeue(), enqueue(), getfirst(), getitem(), getlast(), insert(), insertd(), newqueue(), and unsleep().