XINU
system
insert.c
Go to the documentation of this file.
1
5
#include <
xinu.h
>
6
20
status
insert
(
pid32
pid,
qid16
q,
int32
key)
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
}
queuetab
struct qentry queuetab[]
Definition:
queue.c:45
xinu.h
全てのシステムヘッダファイルをインクルードする。
isbadpid
#define isbadpid(x)
プロセスIDを検証する。割り込みが無効になっている事を想定している。
Definition:
process.h:71
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
OK
#define OK
処理が成功した場合
Definition:
kernel.h:77
isbadqid
#define isbadqid(x)
キューIDが不正値かどうかをチェックする。
Definition:
queue.h:132
status
int32 status
ステータスを意味する返り値の型(OK/SYSERR)
Definition:
kernel.h:57
qentry::qnext
qid16 qnext
次のプロセスか末尾のプロセスのインデックス。
Definition:
queue.h:39
qentry::qkey
int32 qkey
キュー順序を決定するキー(優先度)。
Definition:
queue.h:37
qentry::qprev
qid16 qprev
前のプロセスか先頭のプロセスのインデックス。
Definition:
queue.h:41
insert
status insert(pid32 pid, qid16 q, int32 key)
優先度に基づいて、キューにプロセスを挿入する。
Definition:
insert.c:20
int32
int int32
符号あり32ビット整数(int)
Definition:
kernel.h:11
firstid
#define firstid(q)
リストの最初のプロセスのIDを返す。
Definition:
queue.h:70
qid16
int16 qid16
キューID
Definition:
kernel.h:24
pid32
int32 pid32
プロセスID
Definition:
kernel.h:26
Generated by
1.8.13