9 extern void start(
void);
14 extern void main(
void);
34 #define CONSOLE_RESET " \033[0m\033[2J\033[;H" 65 memptr = memptr->
mnext)
69 kprintf(
"%10d bytes of free memory. Free list:\n", free_mem);
72 kprintf(
" [0x%08X to 0x%08X]\n",
76 kprintf(
"%10d bytes of Xinu code.\n",
78 kprintf(
" [0x%08X to 0x%08X]\n",
80 kprintf(
"%10d bytes of data.\n",
82 kprintf(
" [0x%08X to 0x%08X]\n\n",
96 "Startup process", 0,
NULL));
124 kprintf(
"Cannot obtain an IP address\n");
131 (ipaddr >> 24) & 0xff, (ipaddr >> 16) & 0xff,
132 (ipaddr >> 8) & 0xff, ipaddr & 0xff);
134 kprintf(
"Obtained IP address %s (0x%08x)\n", str,
140 "Main process", 0,
NULL));
196 for (i = 0; i <
NPROC; i++)
218 for (i = 0; i <
NSEM; i++)
238 for (i = 0; i <
NDEVS; i++)
252 kprintf(
"looping... press reset\n");
syscall kprintf(char *fmt,...)
ポーリングI/Oを使用して、フォーマットされた文字列をコンソールに出力する。
#define NULL
連結リスト用のNULLポインタ
struct defer Defer
defer構造体のextern宣言
char * strncpy(char *, const char *, int32)
文字列s1に文字列s2をN文字(Byte)分コピーする。
static void sysinit()
内部システムの初期化を行うsysinit()のextern宣言
void meminit(void)
フリーメモリリストを初期化するmeminit()のextern宣言
local process startup(void)
スタートアップタスクを完了するプロセス
byte sstate
エントリ状態が利用可能(S_FREE)か、利用中(S_USED)かを表す。
#define DELAY(n)
マイクロ秒単位で処理を遅らせる。
セマフォテーブルエントリであり、本構造体の配列(長さNSEM)が静的に確保される。
#define INITSTK
初期プロセススタックサイズ
void start(void)
XINUコードの開始であるstart()のextern宣言
struct memblk * mnext
次のフリーメモリブロックへのポインタ
struct memblk memlist
フリーメモリブロックのリスト
int ebss
BSSセグメントの終了アドレス(リンカが追加する)
int32 sprintf(char *, char *,...)
int data
データセグメントの開始アドレス(リンカが追加する)
int32 stop(char *s)
処理を停止させる。無限ループによる停止のため、復帰にはリセットが必要である。
void nulluser()
システムの初期化を処理し、nullプロセスとなる。
#define NULLPROC
NULLプロセスのID。NULLプロセスは、他に動かすプロセスがない時に動く空プロセス
uint32 prstklen
Bytesで表されたスタックの長さ(最大値。Byte)。
struct procent proctab[NPROC]
プロセステーブルエントリ
qid16 readylist
READY状態のプロセスリストに対するグローバルID.
pri16 prprio
プロセスのスケジューリング優先度。
void enable(void)
割り込み許可(intr.Sに定義がある)
#define PR_CURR
プロセスが現在動作中。
int etext
テキストセグメントの終了アドレス(リンカが追加する)
#define TRUE
Boolean True(1)
char prname[PNMLEN]
プロセス名。
#define NULLSTK
NULLプロセスのスタックサイズ
char * prstkbase
ランタイムスタックの基点(メモリ領域で最上位のアドレス)。
int int32
符号あり32ビット整数(int)
int32 delay(int n)
マイクロ秒単位で処理を遅らせる。
uint16 prstate
プロセス状態(PR_CURR, ..., etc)。
#define PR_FREE
プロセステーブルエントリが使用されていない状態。
pri16 resume(pid32)
プロセスを休止状態(サスペンド)からREADY状態に遷移させる。
pid32 create(void *, uint32, pri16, char *, uint32,...)
関数の実行を開始するプロセスを作成する。
uint32 mlength
memblk構造体のサイズを含むブロックサイズ
qid16 squeue
セマフォ待機中プロセスのキュー
status bufinit(void)
バッファプールデータ構造を初期化する。
#define local
ローカル関数かローカル変数の宣言
void main(void)
最初に生成されるmainプロセスのextern宣言
int32 ndefers
未処理の延期プロセスの数
pid32 currpid
現在実行中のプロセスのID
qid16 newqueue(void)
グローバルキューテーブルにキューを割り当て、テーブルを初期化する。
int text
テキストセグメントの開始アドレス(リンカが追加する)
unsigned int uint32
符号なし32ビット整数(unsigned int)
#define CONSOLE_RESET
コンソール(コンソールカラー、文字、ポジション)をリセットするためのエスケープシーケンス ...
struct sentry semtab[NSEM]
セマフォテーブルエントリ
int32 scount
セマフォカウント(負の値(-N)の場合は、キューにN個の待機プロセスがある。それ以外はキューが空である) ...
#define S_FREE
セマフォテーブルエントリが利用可能
#define NULLCH
NULL文字(NULL終端)
char * getstk(uint32)
スタックメモリを割り当て、最上位のワードアドレスを返す。
#define INITPRIO
初期プロセス優先度
char * prstkptr
保存されたスタックポインタ。
syscall init(did32)
デバイスとデバイスドライバを初期化する。
int32 process
プロセスの最上位レベル関数 返り値の型