XINU
system
queue.c
Go to the documentation of this file.
1
8
#include <
xinu.h
>
9
45
struct
qentry
queuetab
[
NQENT
];
46
53
pid32
enqueue
(
pid32
pid,
qid16
q)
54
{
55
qid16
tail, prev;
/* Tail & previous node indexes */
56
57
if
(
isbadqid
(q) ||
isbadpid
(pid))
58
{
59
return
SYSERR
;
60
}
61
62
tail =
queuetail
(q);
63
prev =
queuetab
[tail].
qprev
;
64
65
queuetab
[pid].
qnext
= tail;
/* Insert just before tail node */
66
queuetab
[pid].
qprev
= prev;
67
queuetab
[prev].
qnext
= pid;
68
queuetab
[tail].
qprev
= pid;
69
return
pid;
70
}
71
78
pid32
dequeue
(
79
qid16
q
/* ID of queue to use */
80
)
81
{
82
pid32
pid;
/* ID of process removed */
83
84
if
(
isbadqid
(q))
85
{
86
return
SYSERR
;
87
}
88
else
if
(
isempty
(q))
89
{
90
return
EMPTY
;
91
}
92
93
pid =
getfirst
(q);
94
queuetab
[pid].
qprev
=
EMPTY
;
95
queuetab
[pid].
qnext
=
EMPTY
;
96
return
pid;
97
}
xinu.h
全てのシステムヘッダファイルをインクルードする。
isbadpid
#define isbadpid(x)
プロセスIDを検証する。割り込みが無効になっている事を想定している。
Definition:
process.h:71
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
queuetab
struct qentry queuetab[NQENT]
Definition:
queue.c:45
enqueue
pid32 enqueue(pid32 pid, qid16 q)
プロセスをプロセスキューテーブルの末尾に挿入する。
Definition:
queue.c:53
isbadqid
#define isbadqid(x)
キューIDが不正値かどうかをチェックする。
Definition:
queue.h:132
qentry
プロセスエントリであり、本構造体の配列(長さNQENT)がプロセスキューテーブルとなる。 ...
Definition:
queue.h:34
EMPTY
#define EMPTY
次のキューインデックスもしくは前のキューインデックスがNULL値
Definition:
queue.h:23
qentry::qnext
qid16 qnext
次のプロセスか末尾のプロセスのインデックス。
Definition:
queue.h:39
isempty
#define isempty(q)
リストが空かどうかを返す。
Definition:
queue.h:89
qentry::qprev
qid16 qprev
前のプロセスか先頭のプロセスのインデックス。
Definition:
queue.h:41
NQENT
#define NQENT
Definition:
queue.h:19
qid16
int16 qid16
キューID
Definition:
kernel.h:24
getfirst
pid32 getfirst(qid16)
キューの先頭からプロセスを取り出す。
Definition:
getitem.c:13
dequeue
pid32 dequeue(qid16 q)
プロセスキューテーブルからキューを削除し、リスト先頭のプロセスIDを返す。
Definition:
queue.c:78
pid32
int32 pid32
プロセスID
Definition:
kernel.h:26
queuetail
#define queuetail(q)
キューの末尾を返す。
Definition:
queue.h:61
Generated by
1.8.13