XINU
Functions
insert.c File Reference

優先度に基づいてキューにプロセスを挿入するAPIを提供する。 More...

#include <xinu.h>
Include dependency graph for insert.c:

Go to the source code of this file.

Functions

status insert (pid32 pid, qid16 q, int32 key)
 優先度に基づいて、キューにプロセスを挿入する。 More...
 

Detailed Description

優先度に基づいてキューにプロセスを挿入するAPIを提供する。

Definition in file insert.c.

Function Documentation

◆ insert()

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

優先度に基づいて、キューにプロセスを挿入する。

優先度の降順に並べたキューに対して、以下を行う。 Step1. キューを先頭から走査(whileループ部)
Step2. 挿入しようとしているプロセスIDの優先度より低い優先度を持つプロセスを探す。
Step3.「より低優先度なプロセスノード(Step2で見つけたノード)」と「その前にあるノード」との間に、 挿入したいプロセスを配置する。 なお、キューの末尾は有効な最小キーを下回るため、ループは必ず停止する。

Parameters
[in]pid挿入するプロセスID
[in]q使用するキューID
[in]key挿入するプロセスの優先度(キー)
Returns
成功時はOK、キューIDもしくはプロセスIDが不正の場合はSYSERRを返す。

Definition at line 20 of file insert.c.

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

Referenced by ready(), and resched().

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
qid16 qnext
次のプロセスか末尾のプロセスのインデックス。
Definition: queue.h:39
int32 qkey
キュー順序を決定するキー(優先度)。
Definition: queue.h:37
qid16 qprev
前のプロセスか先頭のプロセスのインデックス。
Definition: queue.h:41
#define firstid(q)
リストの最初のプロセスのIDを返す。
Definition: queue.h:70
int16 qid16
キューID
Definition: kernel.h:24
Here is the caller graph for this function: