XINU
insert.c
Go to the documentation of this file.
1 
5 #include <xinu.h>
6 
21 {
22  qid16 curr; /* Runs through items in a queue*/
23  qid16 prev; /* Holds previous node index */
24 
25  if (isbadqid(q) || isbadpid(pid))
26  {
27  return SYSERR;
28  }
29 
30  curr = firstid(q);
31  while (queuetab[curr].qkey >= key)
32  {
33  curr = queuetab[curr].qnext;
34  }
35 
36  /* Insert process between curr node and previous node */
37 
38  prev = queuetab[curr].qprev; /* Get index of previous node */
39  queuetab[pid].qnext = curr;
40  queuetab[pid].qprev = prev;
41  queuetab[pid].qkey = key;
42  queuetab[prev].qnext = pid;
43  queuetab[curr].qprev = pid;
44  return OK;
45 }
struct qentry queuetab[]
Definition: queue.c:45
全てのシステムヘッダファイルをインクルードする。
#define isbadpid(x)
プロセスIDを検証する。割り込みが無効になっている事を想定している。
Definition: process.h:71
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define OK
処理が成功した場合
Definition: kernel.h:77
#define isbadqid(x)
キューIDが不正値かどうかをチェックする。
Definition: queue.h:132
int32 status
ステータスを意味する返り値の型(OK/SYSERR)
Definition: kernel.h:57
qid16 qnext
次のプロセスか末尾のプロセスのインデックス。
Definition: queue.h:39
int32 qkey
キュー順序を決定するキー(優先度)。
Definition: queue.h:37
qid16 qprev
前のプロセスか先頭のプロセスのインデックス。
Definition: queue.h:41
status insert(pid32 pid, qid16 q, int32 key)
優先度に基づいて、キューにプロセスを挿入する。
Definition: insert.c:20
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
#define firstid(q)
リストの最初のプロセスのIDを返す。
Definition: queue.h:70
int16 qid16
キューID
Definition: kernel.h:24
int32 pid32
プロセスID
Definition: kernel.h:26