XINU
system
signaln.c
Go to the documentation of this file.
1
5
#include <
xinu.h
>
6
16
syscall
signaln
(
sid32
sem,
int32
count)
17
{
18
intmask
mask;
/* Saved interrupt mask */
19
struct
sentry
*semptr;
/* Ptr to sempahore table entry */
20
21
mask =
disable
();
22
if
(
isbadsem
(sem) || (count < 0))
23
{
24
restore
(mask);
25
return
SYSERR
;
26
}
27
semptr = &
semtab
[sem];
28
if
(semptr->
sstate
==
S_FREE
)
29
{
30
restore
(mask);
31
return
SYSERR
;
32
}
33
34
resched_cntl
(
DEFER_START
);
35
for
(; count > 0; count--)
36
{
37
if
((semptr->
scount
++) < 0)
38
{
39
ready
(
dequeue
(semptr->
squeue
));
40
}
41
}
42
resched_cntl
(
DEFER_STOP
);
43
restore
(mask);
44
return
OK
;
45
}
signaln
syscall signaln(sid32 sem, int32 count)
セマフォにシグナルをN回送り、N個の待機プロセスがある場合はそれらをREADY状態にする。 ...
Definition:
signaln.c:16
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
resched_cntl
status resched_cntl(int32)
再スケジューリングを延期させるか、もしくは許可させるかを制御する。
Definition:
resched.c:81
dequeue
pid32 dequeue(qid16)
プロセスキューテーブルからキューを削除し、リスト先頭のプロセスIDを返す。
Definition:
queue.c:78
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
sentry::squeue
qid16 squeue
セマフォ待機中プロセスのキュー
Definition:
semaphore.h:26
syscall
int32 syscall
システムコール関数 返り値の型
Definition:
kernel.h:47
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