XINU
system
ptcreate.c
Go to the documentation of this file.
1
5
#include <
xinu.h
>
6
23
syscall
ptcreate
(
int32
count)
24
{
25
intmask
mask;
/* Saved interrupt mask */
26
int32
i;
/* Counts all possible ports */
27
int32
ptnum;
/* Candidate port number to try */
28
struct
ptentry
*ptptr;
/* Pointer to port table entry */
29
30
mask =
disable
();
31
if
(count < 0)
32
{
33
restore
(mask);
34
return
SYSERR
;
35
}
36
37
for
(i = 0; i <
NPORTS
; i++)
38
{
/* Count all table entries */
39
ptnum =
ptnextid
;
/* Get an entry to check */
40
if
(++
ptnextid
>= NPORTS)
41
{
42
ptnextid
= 0;
/* Reset for next iteration */
43
}
44
45
/* Check table entry that corresponds to ID ptnum */
46
47
ptptr = &
porttab
[ptnum];
48
if
(ptptr->
ptstate
==
PT_FREE
)
49
{
50
ptptr->
ptstate
=
PT_ALLOC
;
51
ptptr->
ptssem
=
semcreate
(count);
52
ptptr->
ptrsem
=
semcreate
(0);
53
ptptr->
pthead
= ptptr->
pttail
=
NULL
;
54
ptptr->
ptseq
++;
55
ptptr->
ptmaxcnt
= count;
56
restore
(mask);
57
return
ptnum;
58
}
59
}
60
restore
(mask);
61
return
SYSERR
;
62
}
NULL
#define NULL
連結リスト用のNULLポインタ
Definition:
kernel.h:68
semcreate
sid32 semcreate(int32)
未使用セマフォを割り当て、そのセマフォへのインデックス(セマフォID)を返す。
Definition:
semcreate.c:22
restore
void restore(intmask)
ptentry
ポートテーブルエントリ
Definition:
ports.h:33
ptcreate
syscall ptcreate(int32 count)
未処理のメッセージを「カウント」できるポートを作成する。
Definition:
ptcreate.c:23
xinu.h
全てのシステムヘッダファイルをインクルードする。
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
PT_ALLOC
#define PT_ALLOC
ポートが割り当てられた
Definition:
ports.h:15
ptentry::ptrsem
sid32 ptrsem
受信側セマフォ
Definition:
ports.h:38
ptentry::ptmaxcnt
uint16 ptmaxcnt
ポートに挿入できる最大メッセージ数
Definition:
ports.h:42
NPORTS
#define NPORTS
ポートの最大数
Definition:
ports.h:7
porttab
struct ptentry porttab[]
ポートテーブルエントリのextern宣言
Definition:
ptinit.c:10
ptentry::ptssem
sid32 ptssem
送信側セマフォ
Definition:
ports.h:36
ptentry::ptstate
uint16 ptstate
ポート状態(FREE/LIMBO/ALLOC)
Definition:
ports.h:40
intmask
uint32 intmask
保存された割り込みマスク
Definition:
kernel.h:38
int32
int int32
符号あり32ビット整数(int)
Definition:
kernel.h:11
ptnextid
int32 ptnextid
空きスロットを探す際に試みる次のポートID
Definition:
ptinit.c:12
ptentry::pttail
struct ptnode * pttail
メッセージリストの末尾ポインタ
Definition:
ports.h:48
PT_FREE
#define PT_FREE
ポートがFREE状態
Definition:
ports.h:11
syscall
int32 syscall
システムコール関数 返り値の型
Definition:
kernel.h:47
ptentry::pthead
struct ptnode * pthead
メッセージリストの先頭ポインタ
Definition:
ports.h:46
ptentry::ptseq
int32 ptseq
生成時に変更されたシーケンス
Definition:
ports.h:44
disable
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
Generated by
1.8.13