XINU
Functions
receive.c File Reference

メッセージの受信を待ち、受信後にreceive()の呼び出し者にメッセージを返す。 More...

#include <xinu.h>
Include dependency graph for receive.c:

Go to the source code of this file.

Functions

umsg32 receive (void)
 メッセージの受信を待ち、受信後にreceive()の呼び出し者にメッセージを返す。 More...
 

Detailed Description

メッセージの受信を待ち、受信後にreceive()の呼び出し者にメッセージを返す。

Definition in file receive.c.

Function Documentation

◆ receive()

umsg32 receive ( void  )

メッセージの受信を待ち、受信後にreceive()の呼び出し者にメッセージを返す。

Step1. 割り込みを禁止する。
Step2. 現在のプロセスが有効なメッセージを受信していない場合は受信待ち状態に移行し、
再スケジューリングを行う。
Step3. プロセスが復帰後、メッセージを取得し、メッセージフラグをリセットする。
Step4. 割り込み状態を復元する。

Returns
取得したメッセージを返す。

Definition at line 17 of file receive.c.

References currpid, disable(), FALSE, PR_RECV, procent::prhasmsg, procent::prmsg, proctab, procent::prstate, resched(), and restore().

Referenced by main(), rdscontrol(), rdsread(), and shell().

18 {
19  intmask mask; /* Saved interrupt mask */
20  struct procent *prptr; /* Ptr to process's table entry */
21  umsg32 msg; /* Message to return */
22 
23  mask = disable();
24  prptr = &proctab[currpid];
25  if (prptr->prhasmsg == FALSE)
26  {
27  prptr->prstate = PR_RECV;
28  resched(); /* Block until message arrives */
29  }
30  msg = prptr->prmsg; /* Retrieve message */
31  prptr->prhasmsg = FALSE; /* Reset message flag */
32  restore(mask);
33  return msg;
34 }
pid32 currpid
現在実行中のプロセス。
Definition: initialize.c:32
void restore(intmask)
#define PR_RECV
プロセスがメッセージで待機中の状態。
Definition: process.h:41
uint32 umsg32
プロセス間で渡されるメッセージ
Definition: kernel.h:32
#define FALSE
Boolean False(0)
Definition: kernel.h:63
uint32 intmask
保存された割り込みマスク
Definition: kernel.h:38
uint16 prstate
プロセス状態(PR_CURR, ..., etc)。
Definition: process.h:88
void resched(void)
最優先の適切なプロセスにCPU実行権を渡す。
Definition: resched.c:22
struct procent proctab[]
プロセステーブル。
Definition: initialize.c:23
プロセステーブル(32bitsの倍数)。
Definition: process.h:85
bool8 prhasmsg
有効(Valid)メッセージの場合、非0となる。
Definition: process.h:106
intmask disable(void)
割り込み禁止(intr.Sに定義がある)
umsg32 prmsg
このプロセスに送信されたメッセージ。
Definition: process.h:104
Here is the call graph for this function:
Here is the caller graph for this function: