XINU
system
send.c
Go to the documentation of this file.
1
5
#include <
xinu.h
>
6
21
syscall
send
(
pid32
pid,
umsg32
msg)
22
{
23
intmask
mask;
/* Saved interrupt mask */
24
struct
procent
*prptr;
/* Ptr to process's table entry */
25
26
mask =
disable
();
27
if
(
isbadpid
(pid))
28
{
29
restore
(mask);
30
return
SYSERR
;
31
}
32
33
prptr = &
proctab
[pid];
34
if
(prptr->
prhasmsg
)
35
{
36
restore
(mask);
37
return
SYSERR
;
38
}
39
prptr->
prmsg
= msg;
/* Deliver message */
40
prptr->
prhasmsg
=
TRUE
;
/* Indicate message is waiting */
41
42
/* If recipient waiting or in timed-wait make it ready */
43
44
if
(prptr->
prstate
==
PR_RECV
)
45
{
46
ready
(pid);
47
}
48
else
if
(prptr->
prstate
==
PR_RECTIM
)
49
{
50
unsleep
(pid);
51
ready
(pid);
52
}
53
restore
(mask);
/* Restore interrupts */
54
return
OK
;
55
}
PR_RECTIM
#define PR_RECTIM
プロセスが「タイムアウト」か「メッセージの到着」のいずれか早い方で待機中の状態。
Definition:
process.h:49
restore
void restore(intmask)
xinu.h
全てのシステムヘッダファイルをインクルードする。
isbadpid
#define isbadpid(x)
プロセスIDを検証する。割り込みが無効になっている事を想定している。
Definition:
process.h:71
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
send
syscall send(pid32 pid, umsg32 msg)
プロセスにメッセージを送信し、受信側が待機状態の場合はREADY状態にする。
Definition:
send.c:21
OK
#define OK
処理が成功した場合
Definition:
kernel.h:77
ready
status ready(pid32)
プロセスをCPUサービスの対象にする。
Definition:
ready.c:21
PR_RECV
#define PR_RECV
プロセスがメッセージで待機中の状態。
Definition:
process.h:41
umsg32
uint32 umsg32
プロセス間で渡されるメッセージ
Definition:
kernel.h:32
unsleep
syscall unsleep(pid32)
Definition:
unsleep.c:11
TRUE
#define TRUE
Boolean True(1)
Definition:
kernel.h:65
intmask
uint32 intmask
保存された割り込みマスク
Definition:
kernel.h:38
procent::prstate
uint16 prstate
プロセス状態(PR_CURR, ..., etc)。
Definition:
process.h:88
proctab
struct procent proctab[]
プロセステーブル。
Definition:
initialize.c:23
syscall
int32 syscall
システムコール関数 返り値の型
Definition:
kernel.h:47
pid32
int32 pid32
プロセスID
Definition:
kernel.h:26
procent
プロセステーブル(32bitsの倍数)。
Definition:
process.h:85
procent::prhasmsg
bool8 prhasmsg
有効(Valid)メッセージの場合、非0となる。
Definition:
process.h:106
disable
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
procent::prmsg
umsg32 prmsg
このプロセスに送信されたメッセージ。
Definition:
process.h:104
Generated by
1.8.13