XINU
Functions | Variables
mark.c File Reference
#include <xinu.h>
Include dependency graph for mark.c:

Go to the source code of this file.

Functions

status mark (int32 *loc)
 
void markinit (void)
 

Variables

int32marks [MAXMARK]
 
sid32 mkmutex
 
int32 nmarks
 

Function Documentation

◆ mark()

status mark ( int32 loc)

Definition at line 24 of file mark.c.

References marks, MAXMARK, mkmutex, nmarks, OK, signal(), SYSERR, and wait().

27 {
28 
29  /* If location is already marked, do nothing */
30 
31  if ( (*loc>=0) && (*loc<nmarks) && (marks[*loc]==loc) ) {
32  return OK;
33  }
34 
35  /* If no more memory marks are available, indicate an error */
36 
37  if (nmarks >= MAXMARK) {
38  return SYSERR;
39  }
40 
41  /* Obtain exclusive access and mark the specified location */
42 
43  wait(mkmutex);
44  marks[ (*loc) = nmarks++ ] = loc;
45  signal(mkmutex);
46  return OK;
47 }
int32 * marks[MAXMARK]
Definition: mark.c:5
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define OK
処理が成功した場合
Definition: kernel.h:77
int32 nmarks
Definition: mark.c:6
sid32 mkmutex
Definition: mark.c:7
syscall wait(sid32)
Definition: wait.c:9
syscall signal(sid32)
セマフォにシグナルを送り、待機プロセスがある場合は解除する。
Definition: signal.c:18
#define MAXMARK
Definition: mark.h:3
Here is the call graph for this function:

◆ markinit()

void markinit ( void  )

Definition at line 13 of file mark.c.

References mkmutex, nmarks, and semcreate().

14 {
15  nmarks = 0;
16  mkmutex = semcreate(1);
17 }
sid32 semcreate(int32)
未使用セマフォを割り当て、そのセマフォへのインデックス(セマフォID)を返す。
Definition: semcreate.c:22
int32 nmarks
Definition: mark.c:6
sid32 mkmutex
Definition: mark.c:7
Here is the call graph for this function:

Variable Documentation

◆ marks

int32* marks[MAXMARK]

Definition at line 5 of file mark.c.

Referenced by mark().

◆ mkmutex

sid32 mkmutex

Definition at line 7 of file mark.c.

Referenced by mark(), and markinit().

◆ nmarks

int32 nmarks

Definition at line 6 of file mark.c.

Referenced by mark(), and markinit().