|
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().
1.8.13