UNIX 用語集

単語 意          味
カーネル
kernel
オペレーティング・システムのことで、プログラムのために ファイルシステム、メモリ管理、CPU のスケジューリング、デバイスの I/O といったサービスを提供します。
プロセス
process
オペレーティング・システムによって実行されているプログラムの インスタンスです。UNIX システムでは、新しいプロセスを生成する 唯一の方法は fork システムコールを使う方法です。
システムコール
system call
UNIX のカーネルは、決まった数のエントリ・ポイントを提供します。 アクティブなプロセスは、このエントリ・ポイントを使ってカーネルのサービス を利用します。このエントリ・ポイントをシステムコールと呼び、 カーネルはこの番号を解釈することで、どのシステムコールが起動されたかを知る。

標準の UNIX の C ライブラリがこれらのシステムコールへの インタフェースを提供しています。これによって、システムコールの呼び出しは 通常の関数呼び出しのように見えます。

プロセス ID
PID
すべてのプロセスは、PID すなわちユニークなプロセス ID を持ちます。 PID は整数で、通常 0 から 30000 までの値をとります。 カーネルは新しいプロセスが生成されると PID を割り当てます。

プロセスは getpid() システムコールを用いてその PID を取得できます。

親プロセス ID
PPID
すべてのプロセスは、親プロセスとそれに対応する PPID を持ちます。 カーネルは新しいプロセスが生成されると PPID を設定します。

プロセスは getppid() システムコールを用いてその PPID を取得できます。

シェル
Shells
UNIX と会話形式でやりとりするためのプログラムです。 典型的なシェルは、端末あるいはファイルからユーザのコマンドを読みこみ、 実行するようなコマンドインタプリタとして機能します。 そればかりか、プログラミング言語でもあります。

/bin/sh Bourne シェル
/bin/ksh Korn シェル
/bin/csh C シェル

ユーザが UNIX システムにログインすると、パスワードファイル中の エントリの shell フィールドで指定されるプログラムがログインシェル として実行されます。

現在のシェルがなんであるかを知るには以下のようにします。

env | grep SHELL
デーモン
daemon
端末やログインシェルなしにバックグラウンドで動作し、 イベントが起きるのを待っているか、特定のタスクを定期的に行うプロセスのこと
メジャ・デバイス番号
major device
デバイスエントリを得るための大域配列のインデックス
v ノード
v node
UNIX カーネル内のファイルを表現するもので、 ファイルへのインタフェースと全操作の関数へのチャネルを定義している。 /,/usr 等:vnode.h
v ノードは、抽象オブジェクトで、例えば NFS では r ノードであり、 ufs では i ノードです。
i ノード
i node
各ファイルごとの属性を管理している構造体。:ufs_inode.h
vfs
virtual file system
UNIX カーネル内のファイルシステムで、rootvfs ではじまり、NULL で終わる
異なるファイルシステムを含むことが可能。:vfs.h
RISC Reduced Instruction Set Computer
コールアウト
callout
カーネルが後で実行しなければならない関数を登録できるメカニズム
スピン・ロック
spin lock
ロックの中で最も単純なもの。ロック変数は、不可分な test-and-set 命令を用いたビジー待機ループで操作される:mutex
advisory ロック
advisory lock
プロセスがチェックするロック:lockf(3c)
mandatory ロック
mandatory lock
カーネルが強制的にするもので、ロックと衝突する操作は拒否される
RAW I/O ブロック型デバイスへのバッファリングなしのアクセスを許可する機能
非同期 I/O
async I/O
プロセスがブロックすることなしに、I/O を遂行できる機構です。 ストリームに対する読み書き要求は、ただ単に要求キューに置かれ、 ブロックすることなく戻る。I/O が完了すると、SIGPOLL シグナルを介して報告される。
ストリーム
stream
双方向データ転送を行える、カーネル領域のドライバとユーザ領域の プロセスとの間のデータ転送路で、カーネル内に実装されている。 ストリームの I/O 処理は非同期です。
STREAMS ストリームの作成や使用、削除が可能な、システムコールやカーネル資源、 カーネル内のユーティリティ・ルーチンの集合体であり、デバイス・ドライバを 開発する場合のフレームワークでもある。

STREAMS は、ドライバを開発する場合の約束事やガイドラインを規定しているし、 ドライバをモジュール指向で開発するための機構やユーティリティを提供する。

クロック・ティック
CLK_TIC
UNIX マシンには、一定間隔でシステムに割り込みをかける ハードウェア・クロックがあります。 この間隔は、CPU ティックあるいはクロック・ティックと呼ばれます。 ほとんどの UNIX の実装では、1秒間のティック数を param.h で定義される HZ で保持しています。

多くの UNIX は、CPU ティックを10ミリ秒に設定しています。 ほとんどの UNIX の実装では、クロック周波数すなわち1秒間のティック数を param.h で定義される HZ で保持しています。 10ミリ秒ティックの場合、HZ は100になります。 カーネル関数は、時間を秒数やミリ秒単位でなく、このティック数で計測します。

当該マシンの CLK_TIC は、以下のコマンドで知ることができます。

> getconf CLK_TIC
ワーキングセット
working set
プロセスのページで近い将来必要になるページ群をいう
スラッシング
thrashing
起動されているプロセス数が多すぎて、各プロセスに充分な メモリがないと、ページフォルトが多発してその処理におわれて プロセスがほとんど動かなくなってしまう現象
メモリマップファイル
mmap
ファイルをメモリにマップする機構
バックグラウンド
プロセスグループ
Background Process Group
制御端末との接続を確立したセッションにおける、 フォアグラウンドプロセスグループを除くすべてのプロセスグループ。
制御プロセス
Controlling Process
制御端末との接続を確立したセッションのリーダプロセス。
制御端末
Controlling Terminal
セッションに対応している端末。

各セッションは制御端末を 1 つだけ持つことができ、 また 1 つの制御端末は 1 つのセッションにだけ対応できます。

制御端末から入力されるある種のシーケンスは、 その制御端末に対応するセッション中のプロセスグループへのシグナル送信を伴います。 詳しくは termio(7I) を参照してください。

ディレクトリ
Directory
ファイルを階層構造システムに組織化するためのもので、 ディレクトリはその階層構造におけるノードとなります。

ディレクトリもファイルの一種であり、 その内容は一群のファイル、 および一群の他のディレクトリ(サブディレクトリと呼ぶ)です。 階層構造においてサブディレクトリは、 当該ディレクトリのすぐ下のレベルに位置します。

ディレクトリ中の項目はリンクと呼ばれ、 リンクはファイル記述子とファイル名を対応付けます。 通常、各ディレクトリには、最低 2 つのリンクが含まれます。 それは .(ドット)と ..(ドットドット)です。

ドットは自分自身を指すリンクで、 ドットドットは自身のすぐ上のレベルのディレクトリ(親ディレクトリ) を表すリンクです。

階層構造の頂点にあるルートディレクトリにとっては、 親ディレクトリも自分自身となります。 ルートディレクトリのパス名は / で、その親ディレクトリのパス名も / となります。

ダウンストリーム
Downstream
ストリームにおける、ストリームヘッドからドライバへの方向を指します。
ドライバ
Driver
1 つのストリームでは、 ドライバが周辺ハードウェア機器とストリームとのインタフェースを提供します。

ドライバは、マルチプレクサやログドライバ( log(7D) 参照) のような擬似ドライバの形をとることもあります。 この場合ハードウェアデバイスは無関係です。

実効ユーザ ID と
実効グループ ID
Effective User ID and Effective Group ID
稼動中の各プロセスは実効ユーザ ID と実効グループ ID を 1 つずつ持っていて、これらはファイルへのアクセス権(後述) を検査する際に使用されます。 この両 ID は、当該プロセスの実 ユー ザ ID および実グループ ID とそれぞれ同一です。

ただし当該プロセスまたはその先祖がユーザ ID セットのビットまたはグループ ID セッ トのビットが設定されたファイル( exec(2) 参照) から生成されている場合を除きます。

ファイルの
アクセス権
File Access Permissions
以下のいずれかの条件が満たされるとき、ファイルへの読み取り、 書き込み、実行/検索権がプロセスに対して与えられます。

  • そのプロセスの実効ユーザ ID がスーパーユーザである。

  • そのプロセスの実効ユーザ ID が当該ファイルの所有者のユー ザ ID と一致していて、かつ当該ファイルのモードの「所有者」部分(0700) のアクセスビットがセットされている。

  • そのプロセスの実効ユーザ ID が当該ファイルの所有者のユー ザ ID とは一致しないが、 プロセスの実効グループ ID または補助グループ ID のいずれかが当該ファイルのグループ ID と 一致していて、 かつ当該ファイルのモードの「グループ」部分(0070) のアクセスビットがセットされている。

  • そのプロセスの実効ユーザ ID が当該ファイルの所有者のユー ザ ID とは一致せず、かつプロセスの実効グループ ID や補助グループ ID のいずれもが当該ファイルのグループ ID とは一致しないが、当該ファイルのモードの「その他」部分 (0007)のアクセスビットがセットされている。

上記の条件のいずれもが偽の場合、 そのプロセスが要求する種類のアクセス権は拒否されます。

ファイル記述子
File Descriptor
ファイルへの I/O を実行するのに使用される小さな整数値。 最小値は 0 で、最大値は NOFILES の値マイナス 1 です。

各プロセスは、NOFILES 値を超える数のファイル記述子を同時にオープンすることはできません。 ファイル記述子は open や pipe などのシステムコールにより返されます。 また read、write、ioctl、close などのシステムコールの引数として用いられます。

ファイル名
File Name
通常ファイル、特殊ファイル、およびディレクトリに与えられる名前。 名前を構成する文字数の最小値は 1 で、最大値は NAME_MAX の値です。

ファイル名には \0(ナル)および /(スラッシュ)の ASCII コードを除くすべての文字が使用できます。

ただし、*、 ?、 [、 ] の 4 文字はシェルに対して特別な意味を持つので ( sh(1)、 csh(1)、および ksh(1) 参照)、 通常は使用しないでください。また印刷不能な文字は、 使用することは許されていますが、避けてください。

ファイル名はパス名の 1 項目とも考えられます。 パス名の各項目の解釈は、その項目の接頭辞に対応した NAME_MAX および _POSIX_NO_TRUNC の値により異なります。

つまりパス名中のある項目の長さが NAME_MAX 値を超えていて、 かつその項目のパス接頭辞に対して _POSIX_NO_TRUNC が有効な場合 ( fpathconf(2) および limits(4) 参 照)、 その環境ではその項目はエラーとなります。

_POSIX_NO_TRUNC が有効でなければ、その項目の先頭部分 (バイト数は NAME_MAX 値に等しい)が項目名として用いられます。

フォアグラウンド
プロセスグループ
Foreground Process Group
制御端末と接続を確立したセッションは、 そのセッションのプロセスグループ群のうちの 1 つを制御端末のフォアグラウンドプロセスグループとして認識します。

このグループは、他のグループ(バックグラウンドプロセスグループ) には許されないような特別なアクセスを制御端末に対して行うことができます。

{IOV_MAX} struct iovec 配列の項目の最大数。
{LIMIT} 中かっこ {LIMIT} は、 インプリメンテーションごとに決められた大きさの制限を表示するのに使われます。 これは、ヘッダファイル({} はなし)によって決定できる値、 またはコンフィギュレーション調査(引数 _PC_LIMIT を使った pathconf(2)) を呼び出すことによって実行時に得ることができる実際の値を示しています。
マスク
Masks
指定された mode 引数中のアクセス権ビットをクリアするための生成関数コールの呼出し時に使用される、 プロセスのファイルモード生成マスク。

umask( cmask)中にセットされていたビットは、 生成されるファイルのモードではクリアされています。

メッセージ
Message
ストリーム中におけるデータまたは情報の何ブロックかの集まりで、 STREAMS 制御構造体を伴います。 メッセージにはいくつかのタイプが定義されていて、 それはメッセージの内容の種類を表しています。

ストリーム中においては、 メッセージがデータ送信および通信の唯一の手段です。

メッセージキュー
Message Queue
ストリーム中において、 モジュールまたはドライバによる処理を待っているリンクされたメッセージ群。
メッセージキュー
識別子
Message Queue Identifier
msgget システムコールにより生成される一意な正の整数で、 メッセー ジを識別します。msqid とも表されます。

各 msqid は、メッセージキューとそれに対応したデータ構造体を含んでいます。 データ構造体は msqid_ds と表され、以下のメンバからなります。

 
        struct ipc_perm msg_perm; 
        struct msg *msg_first; 
        struct msg *msg_last; 
        ulong msg_cbytes; 
        ulong msg_qnum; 
        ulong msg_qbytes; 
        pid_t msg_lspid; 
        pid_t msg_lrpid; 
        time_t msg_stime; 
        time_t msg_rtime; 
        time_t msg_ctime; 
        
msqid_ds 構造体の各フィールドを以下に説明します。

フィールド 説      明
msg_perm ipc_perm 構造体の 1 つで、メッセージ操作用のアクセス権を指定します(後述)。 この構造体には以下のメンバが含まれます。
 
        uid_t cuid; /* creator user id */ 
        gid_t cgid; /* creator group id */ 
        uid_t uid; /* user id */ 
        gid_t gid; /* group id */ 
        mode_t mode; /* r/w permission */ 
        ulong seq; /* slot usage sequence # */ 
        key_t key; /* key */ 
        
 
        
*msg_first キュー内の先頭のメッセージへのポインタ
*msg_last キュー内の最後のメッセージへのポインタ
*msg_cbytes 現在のキューの内容の総バイト数
msg_qnum 現在キューにあるメッセージの数
msg_qbytes キューに置くことのできる最大バイト数
msg_lspid 最後に msgsnd 動作を実行したプロセスのプロセス ID
msg_lrpid 最後に msgrcv 動作を実行したプロセスのプロセス ID
msg_stime 最後に msgsnd 動作を実行した時刻
msg_rtime 最後に msgrcv 動作を実行した時刻
msg_ctime 上記構造体のメンバを変更する msgctl 動作を最後に実行した時刻

メッセージ操作用
アクセス権
Message Operation Permissions
msgop と msgctl の両システムコールの説明では、 操作に必要なアクセス権を {token} で表していて、 この token はアクセス権の種類で以下のように解釈されます。
 
        00400 ユーザによる読み取り 
        00200 ユーザによる書き込み 
        00040 グループによる読み取り 
        00020 グループによる書き込み 
        00004 その他による読み取り 
        00002 その他による書き込み 
        
以下のいずれかの条件が満たされるとき、 msqid への読み取りおよび書き込み権が、プロセスに与えられます。

  1. そのプロセスの実効ユーザ ID がスーパーユーザである。

  2. そのプロセスの実効ユーザ ID が msqid に対応するデータ構造体中の msg_perm.cuid または msg_perm.uid と一致していて、かつ msg_perm.mode の「ユーザ」部分(0600) の正しいビットがセットされている。

  3. そのプロセスの実効グループ ID が msg_perm.cgid または msg_perm.gid と一致していて、かつ msg_perm.mode の 「グループ」部分(060)の正しいビットがセットされている。

  4. msg_perm.mode の「その他」部分(006)の正しいビットがセットされている。

上記の条件のいずれもが偽の場合、 そのプロセスが要求する種類のアクセス権は拒否されます。

モジュール
Module
データの I/O 用の処理ルーチンの集まり。常にストリームの中間、 つまりストリームヘッドからドライバまでの間に存在します。

ストリームにおけるモジュールは、 シェルパイプラインにおけるコマンドと似ています。 ただしモジュールには、双方向(ダウンストリームとアップストリーム) のデータ送信と処理を独立して実施することを可能にするための 2 つの関数が含まれています。

マルチプレクサ
Multiplexor
複数のユーザプロセスに対応したストリーム群を 1 つのドライバに接続したり、 複数のドライバを 1 つのユーザプロセスに接続することを可能にするドライバ。

STREAMS は一般的な多重化用ドライバを備えてはいませんが、 ストリームを構築したり多重化されたストリーム群を接続したりする機能を提供します。

オーファン
プロセスグループ
Orphaned Process Group
グループ内の全メンバの親が、そのグループのメンバか、 あるいはグループのセッションのメンバではないようなプロセスグループ。 オーファンとは「孤児」の意味です。
パス名
Path Name
スラッシュ(/)で区切られたディレクトリ名の集まりで、 NULL 文字で終わる文字列。先頭がスラッシュの場合や、 最後がファイル名の場合もあります。

パス名の先頭がスラッシュの場合、 パスの検索はルートディレクトリから始まります。 先頭がスラッシュでなければ、検索は現在の作業ディレクトリから始まります。

スラッシュ 1 つだけからなるパス名はルートディレクトリを指します。

特に断わりのない限り、 NULL のパス名は「存在しないファイルを表す」 ものと解釈されます。

プロセス ID
Process ID
各プロセスは、システム中に存在している間、 つまり寿命が終わるまでプロセス ID と呼ばれる一意な正の整数で認識されます。

あるプロセス ID を割り当てた後、その ID を持つプロセス、 プロセスグループ、およびセッションの寿命がすべて終わるまで、 システムはその ID を再使用しません。

プロセス中には thread_t および LWPID_t と呼ばれているスレッド ID を持つスレッドがあります。 これらのスレッドは外のプロセスからは見えません。

親プロセス ID
Parent Process ID
現在動作中のプロセスが新たなプロセスを生成した場合( folk(2) 参照)、 現プロセスが新プロセスの親プロセスとなり、現プロセス のプロセス ID が親プロセス ID となります。
特権
Privilege
特権を持つということは、 システムによる制限を受けずに動作する権利を持つことです。
プロセスグループ
Process Group
システム中の各プロセスは、必ずあるプロセスグループのメンバです。 各グループはプロセスグループ ID により認識されます。

現在プロセスグループリーダではないプロセスは、 新たなグループを生成してそのグループのリーダとなることができます。 さらに現在プロセスグループリーダではないプロセスは、 同じセッション中の他の既存のプロセスグループに加わることができます。

新たに生成されたプロセスは、 その親プロセスが属するプロセスグループのメンバとなります。

プロセスグループ
リーダ
Process Group Leader
プロセスグループ ID と同一のプロセス ID を持つプロセス。
プロセスグループ ID
Process Group ID
動作中の各プロセスは、必ずあるプロセスグループのメンバであり、 プロセスグループはプロセスグループ ID と呼ばれる正の整数により認識されます。プロセスグループ ID は、 そのグループのリーダのプロセスのプロセス ID です。

プロセスをグループ化することにより、 関連したプロセス群に一括してシグナルを送信できます( kill(2) 参照)。

プロセスの寿命
Process Lifetime
プロセスの寿命とは、フォークされたときから、 終了した旨を親プロ セスが認識するまでの間を指します。 wait(2) を参照してください。
プロセスグループ
の寿命
Process Group Lifetime
プロセスグループの寿命は、 プロセスグループリーダによりグループが生成されたときから、 そのグループの最後のプロセスの寿命が終わるとき、 または最後のプロセスがグループから離れるときまでを指します。
読み込みキュー
Read Queue
ストリームにおけるモジュールまたはドライバ中のメッセージキューで、 アップストリーム方向のメッセージを含んでいます。
実ユーザ ID と
実グループ ID
Real User ID and Real Group ID
システム上に存在することを許されたユーザは、 実ユーザ ID と呼ばれる正の整数(範囲は 0 から MAXUID の値まで) により認識されます。

各ユーザはグループのメンバでもあります。 各グループは、実グループ ID と呼ばれる正の整数により認識されます。

動作中のプロセスの実ユーザ ID と実グループ ID は、 そのプロセスを生成したユーザの実ユーザ ID と実グループ ID にセットされています。

ルートディレクトリ
と作業ディレクトリ
Root Directory and Current Working Directory
各プロセスには、 ルートディレクトリと現在の作業ディレクトリが対応付けられています。 この目的は、パス名の検索方法を定義するためです。 プロセスのルートディレクトリは、 ルートファイルシステムのルートディレクトリと同じである必要はありません。
保存されたユーザ ID
と保存された
グループ ID
Saved User ID and Saved Group ID
保存されたユーザ ID と保存されたグループ ID の値は、 ユー ザセットまたはグループセットファイルモードビットがセットされたファイルを、 実行する前の実効ユーザ ID および実効グループ ID の値である( exec(2) 参照)。
セマフォ識別子
Semaphore Identifier
セマフォ識別子(semid)は、 semget システムコールにより生成される一意な正の整数です。 各 semid は、一群のセマフォとそれに関連したデータ構造体を持つ。 このデータ構造体は semid_ds と呼ばれ、次のメンバから構成されます。
 
        struct ipc_perm sem_perm; /* operation permission struct */ 
        struct sem *sem_base; /* ptr to first semaphore in set */ 
        ushort sem_nsems; /* number of sems in set */ 
        time_t sem_otime; /* last operation time */ 
        time_t sem_otime; /* last operation time */ 
        time_t sem_ctime; /* last change time */ 
        /* Times measured in secs since */ 
        /* 00:00:00 GMT, Jan. 1, 1970 */ 
        
semid_ds 構造体の各フィールドを以下に説明します。

フィールド 説      明
sem_perm セマフォ操作用アクセス権(後述) を指定する ipc_perm 構造体であり、以下のメンバを含んでいます。
 
        uid_t uid; /* user id */ 
        gid_t gid; /* group id */ 
        uid_t cuid; /* creator user id */ 
        gid_t cgid; /* creator group id */ 
        mode_t mode; /* r/a permission */ 
        ulong seq; /* slot usage sequence number */ 
        key_t key; /* key */ 
        
sem_nsems セマフォ群に含まれているセマフォの数です。 各セマフォは、 sem_num と呼ばれる負ではない整数により参照されます。 sem_num の値の最小値は 0 で、最大値は sem_nsems の値マイナス 1 です。
sem_otime 最後に semop 動作を実行した時刻
sem_ctime 上記構造体のメンバを変更する semctl 動作を最後に実行した時刻

セマフォは、次のメンバからなる sem という名のデータ構造体です。

 
        ushort semval; /* semaphore value */ 
        pid_t sempid; /* pid of last operation */ 
        ushort semncnt; /* # awaiting semval > cval */ 
        ushort semzcnt; /* # awaiting semval = 0 */ 
        
フィールド 説      明
semval セマフォの実の値に等しい 0 以上の整数
sempid このセマフォに対するセマフォ操作を最後に実行したプロセスのプロセス ID
semncnt このセマフォの semval 値が現在の値より大きくなるまで待つよう中断状態に置かれているプロセスの数
semzcnt このセマフォの semval 値が 0 になるまで待つよう中断状態に置かれているプロセスの数
セマフォ操作
アクセス権
Semaphore Operation Permissions
semop と semctl の両システムコールの説明では、 操作に必要なアクセス権を {token} で表していて、 この token はアクセス権の種類で以下のように解釈されます。
 
        00400 ユーザによる読み取り 
        00200 ユーザによる変更 
        00040 グループによる読み取り 
        00020 グループによる変更 
        00004 その他による読み取り 
        00002 その他による変更 
        
以下のいずれかの条件が満たされるとき、 semid への読み取りおよび変更権がプロセスに対して与えられます。

  1. そのプロセスの実効ユーザ ID がスーパーユーザである。

  2. そのプロセスの実効ユーザ ID が semid に対応するデータ構造体中の sem_perm.cuid または sem_perm.uid と一致していて、かつ sem_perm.mode の「ユーザ」部分(0600) の正しいビットがセットされている。

  3. そのプロセスの実効グループ ID が sem_perm.cgid または sem_perm.gid と一致していて、かつ sem_perm.mode の 「グループ」部分(060)の正しいビットがセットされている。

  4. sem_perm.mode の「その他」部分(06)の正しいビットがセットされている。
上記の条件のいずれもが偽の場合、 そのプロセスが要求する種類のアクセス権は拒否されます。
セッション
Session
セッション ID と呼ばれる識別子により認識される一群のプロセスで、 制御端末との接続を確立する機能を持っています。

現在プロセスグループリーダではないプロセスは、 新たなセッションとプロセスグループを生成することができます。 そのときそのプロセスは、新セッションのセッションリーダとなり、 さらに新プロセスグループのプロセスグループリーダとなります。

プロセスが新たに生成されると、 そのプロセスはそれを生成したセッションに属することになります。

セッション ID
Session ID
システム中の各セッションは、その寿命が続く間、セッション ID という正の整数値により一意に認識されます。 このセッション ID は、セッションリーダとなっているプロセスのプロセス ID です。
セッションリーダ
Session Leader
セッション ID と同一のプロセス ID およびプロセスグループ ID を持つプロセス。
セッションの寿命
Session Lifetime
セッションの寿命は、セッションリーダによりセッションが生成されたときから、 そのセッションの最後のプロセスの寿命が終わるとき、 または最後のプロセスがセッションから離れるときまでを指します。
共有メモリ
識別子
Shared Memory Identifier
共有メモリ識別子( shmid)は、 shmget システムコールにより生成される一意な正の整数です。 各 shmid は、共有メモリセグメントと呼ばれるメモリ領域と、 それに対応したデータ構造体を持っています。
(ユーザは、共有メモリセグメントへの参照が終わったら、 必ずそのセグメントを削除しなければなりません。)

データ構造体は shmid_ds と呼ばれ、以下のメンバで構成されます。

 
        struct ipc_perm shm_perm; /* operation permission struct */ 
        int shm_segsz; /* size of segment */ 
        struct region *shm_reg; /* ptr to region structure */ 
        char pad[4]; /* for swap compatibility */ 
        pid_t shm_lpid; /* pid of last operation */ 
        pid_t shm_cpid; /* creator pid */ 
        ushort shm_nattch; /* number of current attaches */ 
        ushort shm_cnattch; /* used only for shminfo */ 
        ushort shm_cnattch; /* used only for shminfo */ 
        time_t shm_atime; /* last attach time */ 
        time_t shm_dtime; /* last detach time */ 
        time_t shm_ctime; /* last change time */ 
        /* Times measured in secs since */ 
        /* 00:00:00 GMT, Jan. 1, 1970 */ 
        
shmid_ds 構造体の各フィールドを以下に説明します。

フィールド 説      明
shm_perm 共有メモリ操作用アクセス権(後述)を指定するipc_perm 構造体であり、 以下のメンバを含んでいます。
 
        uid_t cuid; /* creator user id */ 
        gid_t cgid; /* creator group id */ 
        uid_t uid; /* user id */ 
        gid_t gid; /* group id */ 
        mode_t mode; /* r/w permission */ 
        ulong seq; /* slot usage sequence # */ 
        key_t key; /* key */ 
        
shm_segsz 共有メモリセグメントのサイズをバイト単位で表す。
shm_cpid 共有メモリ識別子を生成したプロセスのプロセス ID
shm_lpid 最後に shmop 動作を実行したプロセスのプロセス ID
shm_nattch このセグメントが現在アタッチされているプロセスの数
shm_atime 最後に shmat 動作を実行した時刻( shmop(2) 参照)
shm_dtime 最後に shmdt 動作を実行した時刻( shmop(2) 参照)
shm_ctime 上記構造体のメンバを変更する shmctl 動作を最後に実行した時刻

共有メモリ操作
アクセス権
Shared Memory Operation Permissions
shmop と shmctl の両システムコールの説明では、 操作に必要なアクセス権を {token} で表していて、 この token はアクセス権の種類で以下のように解釈されます。
 
        00400 ユーザによる読み取り 
        00200 ユーザによる書き込み 
        00040 グループによる読み取り 
        00020 グループによる書き込み 
        00004 その他による読み取り 
        00002 その他による書き込み 
        
以下のいずれかの条件が満たされるとき、 shmid への読み取りおよび書き込み権がプロセスに対して与えられます。
  1. そのプロセスの実効ユーザ ID がスーパーユーザである。

  2. そのプロセスの実効ユーザ ID が shmid に対応するデータ構造体中の shm_perm.cuid または shm_perm.uid と一致していて、かつ shm_perm.mode の「ユーザ」部分(0600) の正しいビットがセットされている。

    そのプロセスの実効グループ ID が shm_perm.cgid または shm_perm.gid と一致していて、かつ shm_perm.mode の 「グループ」部分(060)の正しいビットがセットされている。

  3. shm_perm.mode の「その他」部分(06)の正しいビットがセットされている。

上記の条件のいずれもが偽の場合、 そのプロセスが要求する種類のアクセス権は拒否されます。

特殊プロセス
Special Processes
プロセス ID の値が 0 または 1 のプロセス( kill(2) 参 照)。 ID が 0 のプロセスは proc0 と呼ばれるプロセススケジューラです。 ID が 1 のプロセスは proc1 と呼ばれる初期化プロセス(init)で、 システム中の他のすべてのプロセスの先祖であり、 プロセス構造体を制御するために使用されます。
STREAMS カーネルメカニズムの集合体で、 ネットワークドライバおよび通信ドライバの開発をサポートする機能を持っています。

STREAMS はカーネル内部およびカーネルとユーザレベルのプロセスとの間での、 文字の I/O に関するインタフェース基準を定義します。 STREAMS メカニズムは、各種のユーティリティルーチン、カーネル機能、 およびデータ構造体から構成されます。

ストリーム
stream
カーネル内におけるユーザプロセスとドライバルーチンとの間の全二重データパス。

主な内容は、1 つのストリームヘッド、1 つのドライバ、 そしてその両者の間に位置するいくつか(0 個の場合もある) のモジュールです。ストリームはシェルのパイプラインと似ていますが、 データの流れと処理が双方向に行われる点が異なります。

ストリームヘッド
Stream Head
ストリームの両端のうち、 ストリームとユーザプロセスとのインタフェースを提供する端。

ストリームヘッドの主要な機能は、 STREAMS に関連したシステムコールを処理すること、 およびストリームとユーザプロセス間でデータや情報を送信することです。

スーパユーザ
Super-user
実効ユーザ ID の値が 0 のプロセス(スーパユーザプロセス) に対応するユーザ。スーパユーザプロセスには、 ファイルがアクセス権で保護されていてもアクセスできるなどの特権が与えられています。
アップストリーム
Upstream
ストリームにおける、ドライバからストリームヘッドへの方向を指します。
書き込みキュー
Write Queue
ストリームにおけるモジュールまたはドライバ中 の メッセージキューで、 ダウンストリーム方向のメッセージを含んでいます。
セグメンテーション
segmentation
もし、CPUが16bitデータしか扱う能力がない時に、32bitアドレスを扱いたい 時にはどうすればよいだろうか? 80x86 architecture などでは、 segmentation という技術が使われている。これは、CPUから出力されるアドレスをCPUの アドレスレジスタだけでなく、Segment Register と の組で表すものである。 通常は単なるshift + 加算で処理が行われる。

Paging を行う場合は、Segment RegisterにはPage Entry Table そのものを 使っても良い。この場合は、Segment Register の数値にはさま ざまな意味が 与えられる。

8086 では、Segment register は4つ(CS,DS,ES,SS)あり、アドレス を指示できるアドレスレジスタは6つである(BX,SI,DI,BP,SP,IP)。 それぞれ 16bit幅であり、Segment register は 4bit shiftされて アドレスレジスタに加算される。CS:IP で CS segemnet を使って、 segment の中で IP のoffset を持つアドレスを指示することになる。

バッファキャッシュ
buffer cache
バッファキャッシュには、 ブロックデバイスドライバが使用するデータバッファが含まれている。

これらのバッファは固定サイズ(たとえば、512 バイト)で、 ブロックデバイスから 読み出されたか、 そこに書き込まれた情報のブロックが入っている。 ブ ロックデバイスとは、データアクセスの際に、 固定サイズのブロック単位でのみ読み書きできるデバイスを指す。 すべてのハードディスクはブロックデバイスである。

バッファキャッシュは、 デバイス識別子と必要なブロック番号とでインデックス付けされていて、 データブロックをすばやく見つけだすために使用される。 ブロックデバイスは、バッファキャッシュを経由しなければアクセスできない。 データがバッファキャッシュに見つかれば、 ハードディスクのような物理ブロックデバイスから読み出す必要がなくなるので、 アクセスがずっと高速になる。

ページキャッシュ
page cache
ページキャッシュは、 ディスク上のイメージやデータへのアクセスを高速化するために使用される。

これは、ページ単位でファイルの論理的な内容をキャッシュし、 ファイル名と そのファイル内のオフセットを使ってアクセスされる。 ページがディスクからメモリ に読み出されると、 それらはページキャッシュにキャッシュされる。

アップストリーム
Upstream
ストリームにおける、ドライバからストリームヘッドへの方向を指します。
マジックナンバー
magic number
ファイルに定義されたファイル固有の番号で、 ファイルの先頭の数バイトに設定されています。
file コマンドは、 ファイルが特定のマジックナンバーで始まるかどうかでファイルの種類を識別します。
【 関連項目 】
magic(4),file(1)