XINU
Functions
insertd.c File Reference
#include <xinu.h>
Include dependency graph for insertd.c:

Go to the source code of this file.

Functions

status insertd (pid32 pid, qid16 q, int32 key)
 

Function Documentation

◆ insertd()

status insertd ( pid32  pid,
qid16  q,
int32  key 
)

Definition at line 9 of file insertd.c.

References isbadpid, isbadqid, OK, qentry::qkey, qentry::qnext, qentry::qprev, queuehead, queuetab, queuetail, and SYSERR.

Referenced by recvtime(), and sleepms().

14 {
15  int32 next; /* Runs through the delta list */
16  int32 prev; /* Follows next through the list*/
17 
18  if (isbadqid(q) || isbadpid(pid)) {
19  return SYSERR;
20  }
21 
22  prev = queuehead(q);
23  next = queuetab[queuehead(q)].qnext;
24  while ((next != queuetail(q)) && (queuetab[next].qkey <= key)) {
25  key -= queuetab[next].qkey;
26  prev = next;
27  next = queuetab[next].qnext;
28  }
29 
30  /* Insert new node between prev and next nodes */
31 
32  queuetab[pid].qnext = next;
33  queuetab[pid].qprev = prev;
34  queuetab[pid].qkey = key;
35  queuetab[prev].qnext = pid;
36  queuetab[next].qprev = pid;
37  if (next != queuetail(q)) {
38  queuetab[next].qkey -= key;
39  }
40 
41  return OK;
42 }
struct qentry queuetab[]
Definition: queue.c:45
#define isbadpid(x)
プロセスIDを検証する。割り込みが無効になっている事を想定している。
Definition: process.h:71
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define queuehead(q)
キューの先頭を返す。
Definition: queue.h:53
#define OK
処理が成功した場合
Definition: kernel.h:77
#define isbadqid(x)
キューIDが不正値かどうかをチェックする。
Definition: queue.h:132
qid16 qnext
次のプロセスか末尾のプロセスのインデックス。
Definition: queue.h:39
int32 qkey
キュー順序を決定するキー(優先度)。
Definition: queue.h:37
qid16 qprev
前のプロセスか先頭のプロセスのインデックス。
Definition: queue.h:41
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
#define queuetail(q)
キューの末尾を返す。
Definition: queue.h:61
Here is the caller graph for this function: