XINU
system
semreset.c
Go to the documentation of this file.
1
5
#include <
xinu.h
>
6
25
syscall
semreset
(
sid32
sem,
int32
count)
26
{
27
intmask
mask;
/* Saved interrupt mask */
28
struct
sentry
*semptr;
/* Ptr to semaphore table entry */
29
qid16
semqueue;
/* Semaphore's process queue ID */
30
pid32
pid;
/* ID of a waiting process */
31
32
mask =
disable
();
33
34
if
(count < 0 ||
isbadsem
(sem) ||
semtab
[sem].
sstate
==
S_FREE
)
35
{
36
restore
(mask);
37
return
SYSERR
;
38
}
39
40
semptr = &
semtab
[sem];
41
semqueue = semptr->
squeue
;
/* Free any waiting processes */
42
resched_cntl
(
DEFER_START
);
43
while
((pid =
getfirst
(semqueue)) !=
EMPTY
)
44
ready
(pid);
45
semptr->
scount
= count;
/* Reset count as specified */
46
resched_cntl
(
DEFER_STOP
);
47
restore
(mask);
48
return
OK
;
49
}
semreset
syscall semreset(sid32 sem, int32 count)
セマフォカウントをリセットし、待機中のプロセスを全て解放する。
Definition:
semreset.c:25
restore
void restore(intmask)
sentry::sstate
byte sstate
エントリ状態が利用可能(S_FREE)か、利用中(S_USED)かを表す。
Definition:
semaphore.h:22
xinu.h
全てのシステムヘッダファイルをインクルードする。
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
sentry
セマフォテーブルエントリであり、本構造体の配列(長さNSEM)が静的に確保される。
Definition:
semaphore.h:19
isbadsem
#define isbadsem(s)
セマフォIDが不適切かどうかを確認する。
Definition:
semaphore.h:40
OK
#define OK
処理が成功した場合
Definition:
kernel.h:77
ready
status ready(pid32)
プロセスをCPUサービスの対象にする。
Definition:
ready.c:21
EMPTY
#define EMPTY
次のキューインデックスもしくは前のキューインデックスがNULL値
Definition:
queue.h:23
resched_cntl
status resched_cntl(int32)
再スケジューリングを延期させるか、もしくは許可させるかを制御する。
Definition:
resched.c:81
DEFER_STOP
#define DEFER_STOP
遅延リスケジューリングの停止
Definition:
resched.h:10
intmask
uint32 intmask
保存された割り込みマスク
Definition:
kernel.h:38
DEFER_START
#define DEFER_START
遅延リスケジューリングの開始
Definition:
resched.h:8
int32
int int32
符号あり32ビット整数(int)
Definition:
kernel.h:11
qid16
int16 qid16
キューID
Definition:
kernel.h:24
sentry::squeue
qid16 squeue
セマフォ待機中プロセスのキュー
Definition:
semaphore.h:26
getfirst
pid32 getfirst(qid16)
キューの先頭からプロセスを取り出す。
Definition:
getitem.c:13
syscall
int32 syscall
システムコール関数 返り値の型
Definition:
kernel.h:47
pid32
int32 pid32
プロセスID
Definition:
kernel.h:26
sentry::scount
int32 scount
セマフォカウント(負の値(-N)の場合は、キューにN個の待機プロセスがある。それ以外はキューが空である) ...
Definition:
semaphore.h:24
S_FREE
#define S_FREE
セマフォテーブルエントリが利用可能
Definition:
semaphore.h:11
sid32
int32 sid32
セマフォID
Definition:
kernel.h:22
semtab
struct sentry semtab[]
セマフォテーブルエントリのextern宣言
Definition:
initialize.c:25
disable
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
Generated by
1.8.13