XINU
system
kill.c
Go to the documentation of this file.
1
5
#include <
xinu.h
>
6
31
syscall
kill
(
pid32
pid)
32
{
33
intmask
mask;
/* Saved interrupt mask */
34
struct
procent
*prptr;
/* Ptr to process's table entry */
35
int32
i;
/* Index into descriptors */
36
37
mask =
disable
();
38
if
(
isbadpid
(pid) || (pid ==
NULLPROC
) || ((prptr = &
proctab
[pid])->
prstate
) ==
PR_FREE
)
39
{
40
restore
(mask);
41
return
SYSERR
;
42
}
43
44
if
(--
prcount
<= 1)
45
{
/* Last user process completes */
46
xdone
();
47
}
48
49
send
(prptr->
prparent
, pid);
50
for
(i = 0; i < 3; i++)
51
{
52
close
(prptr->
prdesc
[i]);
53
}
54
freestk
(prptr->
prstkbase
, prptr->
prstklen
);
55
56
switch
(prptr->
prstate
)
57
{
58
case
PR_CURR
:
59
prptr->
prstate
=
PR_FREE
;
/* Suicide */
60
resched
();
61
62
case
PR_SLEEP
:
63
case
PR_RECTIM
:
64
unsleep
(pid);
65
prptr->
prstate
=
PR_FREE
;
66
break
;
67
68
case
PR_WAIT
:
69
semtab
[prptr->
prsem
].
scount
++;
70
/* Fall through */
71
72
case
PR_READY
:
73
getitem
(pid);
/* Remove from queue */
74
/* Fall through */
75
76
default
:
77
prptr->
prstate
=
PR_FREE
;
78
}
79
80
restore
(mask);
81
return
OK
;
82
}
procent::prparent
pid32 prparent
このプロセスを作成したプロセスID(親プロセスID)。
Definition:
process.h:102
PR_RECTIM
#define PR_RECTIM
プロセスが「タイムアウト」か「メッセージの到着」のいずれか早い方で待機中の状態。
Definition:
process.h:49
restore
void restore(intmask)
prcount
int32 prcount
現在アクティブのプロセス。
Definition:
initialize.c:30
PR_READY
#define PR_READY
プロセスが準備完了(READY)状態。
Definition:
process.h:39
xinu.h
全てのシステムヘッダファイルをインクルードする。
isbadpid
#define isbadpid(x)
プロセスIDを検証する。割り込みが無効になっている事を想定している。
Definition:
process.h:71
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
close
syscall close(did32)
Definition:
close.c:9
OK
#define OK
処理が成功した場合
Definition:
kernel.h:77
send
syscall send(pid32, umsg32)
プロセスにメッセージを送信し、受信側が待機状態の場合はREADY状態にする。
Definition:
send.c:21
kill
syscall kill(pid32 pid)
指定のプロセスを終了させ、システムから終了させたプロセス情報を取り除く。
Definition:
kill.c:31
unsleep
syscall unsleep(pid32)
Definition:
unsleep.c:11
NULLPROC
#define NULLPROC
NULLプロセスのID。NULLプロセスは、他に動かすプロセスがない時に動く空プロセス
Definition:
process.h:54
procent::prstklen
uint32 prstklen
Bytesで表されたスタックの長さ(最大値。Byte)。
Definition:
process.h:96
PR_CURR
#define PR_CURR
プロセスが現在動作中。
Definition:
process.h:37
PR_SLEEP
#define PR_SLEEP
プロセスが休眠中(タイマー待機中)の状態。
Definition:
process.h:43
procent::prsem
sid32 prsem
プロセスが待機しているセマフォ。
Definition:
process.h:100
procent::prstkbase
char * prstkbase
ランタイムスタックの基点(メモリ領域で最上位のアドレス)。
Definition:
process.h:94
intmask
uint32 intmask
保存された割り込みマスク
Definition:
kernel.h:38
procent::prdesc
int16 prdesc[NDESC]
プロセス用のデバイスディスクリプタ
Definition:
process.h:108
int32
int int32
符号あり32ビット整数(int)
Definition:
kernel.h:11
procent::prstate
uint16 prstate
プロセス状態(PR_CURR, ..., etc)。
Definition:
process.h:88
PR_FREE
#define PR_FREE
プロセステーブルエントリが使用されていない状態。
Definition:
process.h:35
resched
void resched(void)
最優先の適切なプロセスにCPU実行権を渡す。
Definition:
resched.c:22
getitem
pid32 getitem(pid32)
キューの任意の位置からプロセスを取り出す。
Definition:
getitem.c:51
xdone
void xdone(void)
最終プロセスの終了時、システム終了メッセージを表示する。
Definition:
xdone.c:10
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
sentry::scount
int32 scount
セマフォカウント(負の値(-N)の場合は、キューにN個の待機プロセスがある。それ以外はキューが空である) ...
Definition:
semaphore.h:24
freestk
#define freestk(p, len)
getstk()で割り当てたスタックメモリを解放する。
Definition:
memory.h:46
semtab
struct sentry semtab[]
セマフォテーブルエントリのextern宣言
Definition:
initialize.c:25
PR_WAIT
#define PR_WAIT
プロセスがセマフォ上で待機中の状態。
Definition:
process.h:47
disable
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
Generated by
1.8.13