XINU
Data Structures | Macros | Variables
process.h File Reference

プロセスに関する情報(プロセスの数、プロセス状態、プロセステーブル等)を定義する。 More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  procent
 プロセステーブル(32bitsの倍数)。 More...
 

Macros

#define INITPRIO   20
 初期プロセス優先度 More...
 
#define INITRET   userret
 プロセスが戻るアドレス。 More...
 
#define INITSTK   65536
 初期プロセススタックサイズ More...
 
#define isbadpid(x)
 プロセスIDを検証する。割り込みが無効になっている事を想定している。 More...
 
#define NDESC   5 /* must be odd to make procent 4N bytes */
 
#define NPROC   8
 デフォルトのプロセス数。 More...
 
#define NULLPROC   0
 NULLプロセスのID。NULLプロセスは、他に動かすプロセスがない時に動く空プロセス More...
 
#define PNMLEN   16
 プロセス名の長さ More...
 
#define PR_CURR   1
 プロセスが現在動作中。 More...
 
#define PR_FREE   0
 プロセステーブルエントリが使用されていない状態。 More...
 
#define PR_READY   2
 プロセスが準備完了(READY)状態。 More...
 
#define PR_RECTIM   7
 プロセスが「タイムアウト」か「メッセージの到着」のいずれか早い方で待機中の状態。 More...
 
#define PR_RECV   3
 プロセスがメッセージで待機中の状態。 More...
 
#define PR_SLEEP   4
 プロセスが休眠中(タイマー待機中)の状態。 More...
 
#define PR_SUSP   5
 プロセスがサスペンド(休止)させられた状態。 More...
 
#define PR_WAIT   6
 プロセスがセマフォ上で待機中の状態。 More...
 
#define STACKMAGIC   0x0A0AAAA9
 プロセススタックの最上位に配置するマーカ(オーバフロー検出に用いる) More...
 

Variables

pid32 currpid
 現在実行中のプロセス。 More...
 
int32 prcount
 現在アクティブのプロセス。 More...
 
struct procent proctab []
 プロセステーブル。 More...
 

Detailed Description

プロセスに関する情報(プロセスの数、プロセス状態、プロセステーブル等)を定義する。

XINUは組込みシステムで用いられる事を前提として、設計されている。
例えば、組み込み用途に耐えうるメモリ使用量とするために、XINUはリンクリストを用いた
プロセス管理を採用していない。ここでのリンクリストとは、ノードを連結したデータ構造である。
[ノード]
・データオブジェクト(例:プロセス、キー値)
・一つ前のノートへのポインタ
・一つ後のノートへのポインタ

[(双方向)リンクリスト]
・最先頭ノード <-> ノード <-> ノード <-> … <-> 最後方ノード

上記のようなリンクリストは、Linux Kernel等で用いられている。
しかし、XINUはプロセス数がデフォルト8個と少ないため、
・ノードを連続したメモリ領域に配置
・ノードからプロセスIDを省略(配列のインデックス = プロセスIDとみなす)
という形で設計する事によって、使用するメモリを減らしている。
(ポインタサイズの4byteですら、削減している)

Definition in file process.h.

Macro Definition Documentation

◆ INITPRIO

#define INITPRIO   20

初期プロセス優先度

Definition at line 59 of file process.h.

Referenced by nulluser(), and startup().

◆ INITRET

#define INITRET   userret

プロセスが戻るアドレス。

Definition at line 61 of file process.h.

Referenced by create().

◆ INITSTK

#define INITSTK   65536

初期プロセススタックサイズ

Definition at line 57 of file process.h.

Referenced by nulluser(), and startup().

◆ isbadpid

#define isbadpid (   x)
Value:
(((pid32)(x) < 0) || \
((pid32)(x) >= NPROC) || \
(proctab[(x)].prstate == PR_FREE))
#define PR_FREE
プロセステーブルエントリが使用されていない状態。
Definition: process.h:35
struct procent proctab[]
プロセステーブル。
Definition: initialize.c:23
int32 pid32
プロセスID
Definition: kernel.h:26
#define NPROC
デフォルトのプロセス数。
Definition: process.h:31

プロセスIDを検証する。割り込みが無効になっている事を想定している。

Parameters
[in]xプロセスID。

プロセスIDがプロセスID範囲内に収まっていない、もしくはプロセステーブルで
当該プロセスIDが未使用状態であれば、そのプロセスIDは不正とみなす。

Returns
プロセスIDが不正の場合≠0、正常の場合は=0を返す。

Definition at line 71 of file process.h.

Referenced by chprio(), enqueue(), getprio(), insert(), insertd(), kill(), ready(), resume(), send(), suspend(), and unsleep().

◆ NDESC

#define NDESC   5 /* must be odd to make procent 4N bytes */

一つのプロセスが開く事ができるデバイスディスクリプタの数。 procent構造体を4N Bytesにするため、奇数でなければいけない。

Definition at line 79 of file process.h.

◆ NPROC

#define NPROC   8

デフォルトのプロセス数。

プロセス数(=NPROC)は、条件付きコンパイルによって、動的にそのサイズを変更できる
(process.hの修正が不要となる)。

Definition at line 31 of file process.h.

◆ NULLPROC

#define NULLPROC   0

NULLプロセスのID。NULLプロセスは、他に動かすプロセスがない時に動く空プロセス

Definition at line 54 of file process.h.

Referenced by kill(), suspend(), and sysinit().

◆ PNMLEN

#define PNMLEN   16

プロセス名の長さ

Definition at line 52 of file process.h.

Referenced by create().

◆ PR_CURR

#define PR_CURR   1

プロセスが現在動作中。

Definition at line 37 of file process.h.

Referenced by kill(), resched(), suspend(), and sysinit().

◆ PR_FREE

#define PR_FREE   0

プロセステーブルエントリが使用されていない状態。

Definition at line 35 of file process.h.

Referenced by kill(), newpid(), printMemUse(), sysinit(), and xsh_ps().

◆ PR_READY

#define PR_READY   2

プロセスが準備完了(READY)状態。

Definition at line 39 of file process.h.

Referenced by kill(), ready(), resched(), and suspend().

◆ PR_RECTIM

#define PR_RECTIM   7

プロセスが「タイムアウト」か「メッセージの到着」のいずれか早い方で待機中の状態。

Definition at line 49 of file process.h.

Referenced by kill(), recvtime(), send(), and unsleep().

◆ PR_RECV

#define PR_RECV   3

プロセスがメッセージで待機中の状態。

Definition at line 41 of file process.h.

Referenced by receive(), and send().

◆ PR_SLEEP

#define PR_SLEEP   4

プロセスが休眠中(タイマー待機中)の状態。

Definition at line 43 of file process.h.

Referenced by kill(), sleepms(), and unsleep().

◆ PR_SUSP

#define PR_SUSP   5

プロセスがサスペンド(休止)させられた状態。

Definition at line 45 of file process.h.

Referenced by create(), resume(), and suspend().

◆ PR_WAIT

#define PR_WAIT   6

プロセスがセマフォ上で待機中の状態。

Definition at line 47 of file process.h.

Referenced by kill(), and wait().

◆ STACKMAGIC

#define STACKMAGIC   0x0A0AAAA9

プロセススタックの最上位に配置するマーカ(オーバフロー検出に用いる)

Definition at line 112 of file process.h.

Referenced by create().

Variable Documentation

◆ currpid

pid32 currpid

現在実行中のプロセス。

現在実行中のプロセス。

Definition at line 32 of file initialize.c.

Referenced by arp_resolve(), dnslookup(), getpid(), icmp_recv(), irq_dispatch(), receive(), recvclr(), recvtime(), resched(), sleepms(), sysinit(), udp_recv(), udp_recvaddr(), and wait().

◆ prcount

int32 prcount

現在アクティブのプロセス。

現在アクティブのプロセス。

Definition at line 30 of file initialize.c.

Referenced by create(), kill(), and sysinit().

◆ proctab

struct procent proctab[]

プロセステーブル。

プロセステーブル。

Definition at line 23 of file initialize.c.

Referenced by addargs(), chprio(), create(), getprio(), irq_dispatch(), kill(), newpid(), printMemUse(), ready(), receive(), recvclr(), recvtime(), resched(), resume(), send(), shell(), sleepms(), suspend(), sysinit(), unsleep(), wait(), and xsh_ps().