New Japanese man9 entries based on 5.0-RELEASE

Submitted by:	Akira Ikeuchi <yr6a-ikuc@asahi-net.or.jp>
This commit is contained in:
Kazuo Horikawa 2003-02-17 06:48:34 +00:00
parent 442094a43d
commit 3a11737a07
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=16026
5 changed files with 1034 additions and 3 deletions

View file

@ -62,6 +62,7 @@ MAN9 = BUS_PRINT_CHILD.9\
at_fork.9\
bios.9\
boot.9\
buf.9\
bus_alloc_resource.9\
bus_generic_attach.9\
bus_generic_detach.9\
@ -106,6 +107,7 @@ MAN9 = BUS_PRINT_CHILD.9\
make_dev.9\
malloc.9\
mi_switch.9\
microseq.9\
microtime.9\
microuptime.9\
module.9\
@ -114,6 +116,7 @@ MAN9 = BUS_PRINT_CHILD.9\
psignal.9\
resettodr.9\
sbuf.9\
sleep.9\
spl.9\
store.9\
style.9\
@ -121,6 +124,7 @@ MAN9 = BUS_PRINT_CHILD.9\
sysctl_add_oid.9\
sysctl_ctx_init.9\
time.9\
timeout.9\
tvtohz.9\
uio.9\
vfs_unmountall.9\
@ -172,15 +176,18 @@ MLINKS+=mi_switch.9 cpu_switch.9 mi_switch.9 cpu_throw.9
MLINKS+=psignal.9 gsignal.9
MLINKS+=psignal.9 pgsignal.9
#MLINKS+=rtalloc.9 rtalloc1.9 rtalloc.9 rtalloc_ign.9
#MLINKS+=sleep.9 tsleep.9 sleep.9 wakeup.9 sleep.9 wakeup_one.9
#MLINKS+=buf.9 bp.9
MLINKS+=sleep.9 tsleep.9 sleep.9 wakeup.9 sleep.9 wakeup_one.9
MLINKS+=sleep.9 msleep.9
MLINKS+=buf.9 bp.9
MLINKS+=spl.9 spl0.9
MLINKS+=spl.9 splbio.9 spl.9 splclock.9 spl.9 splhigh.9 spl.9 splimp.9
MLINKS+=spl.9 splnet.9 spl.9 splsoftclock.9 spl.9 splsofttty.9
MLINKS+=spl.9 splstatclock.9 spl.9 spltty.9 spl.9 splvm.9 spl.9 splx.9
MLINKS+=store.9 subyte.9 store.9 suswintr.9 store.9 susword.9 store.9 suword.9
MLINKS+=time.9 boottime.9 time.9 mono_time.9 time.9 runtime.9
#MLINKS+=timeout.9 untimeout.9
MLINKS+=timeout.9 untimeout.9
MLINKS+=timeout.9 callout_handle_init.9 timeout.9 callout_init.9
MLINKS+=timeout.9 callout_stop.9 timeout.9 callout_reset.9
MLINKS+=uio.9 uiomove.9
MLINKS+=vref.9 VREF.9
MLINKS+=vslock.9 vsunlock.9

144
ja_JP.eucJP/man/man9/buf.9 Normal file
View file

@ -0,0 +1,144 @@
.\" Copyright (c) 1998
.\" The Regents of the University of California. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/buf.9,v 1.12 2002/12/12 17:25:58 ru Exp %
.\" $FreeBSD$
.\"
.Dd December 22, 1998
.Dt BUF 9
.Os
.Sh 名称
.Nm buf
.Nd "FreeBSD の VM システムで使用されたカーネルバッファ入出力機構"
.Sh 解説
カーネルは、(主にファイルシステムの) デバイスおよびデバイス入出力によって
使用されるための、まったくバラバラかもしれない仮想メモリページを
連続した KVM にマップすることを可能にする、
バッファキャッシュの KVM の抽象概念を実装します。
この抽象概念は、DEV_BSIZE (通常 512) から数ページ以上のまでのブロックサイズを
サポートします。
また、NFS によって使用されるための現在はハードコーディングされている、
相対的に基本的なバイト粒度の正当な範囲およびダーティな範囲も、サポートします。
VM バッファの抽象概念を実装しているコードは、大部分は
.Pa /usr/src/sys/kern/vfs_bio.c
に集約されています。
.Pp
バッファポインタ (struct buf) を取り扱うときに憶えておくべき最も重要な
ことの 1 つは、下層のページがバッファキャッシュから直接的にマップされる
ということです。
もっとも UFS のような幾つかのファイルシステムがファイルのフラグメントを
取り扱うときには少しコピーをしなければならないのですが、厳密な意味での
この機構では、データのコピーは発生しません。
憶えておくべき最も重要なことの 2 番目は、下層のページマッピングの
ため、buf の中の b_data ベースポインタは常に *ブロック* で整列されるのでは
なく、*ページ* で整列されるということです。
ある b_offset および b_size を表現する VM バッファを持つもきには、
そのバッファの実際の開始は (b_data + (b_offset & PAGE_MASK)) で、
ちょうど b_data ではありません。
最後に、VM システムの中核のバッファキャッシュは、DEV_BSIZE の塊の中の
ページのための、正当およびダーティビット (m->valid, m->dirty) を
サポートします。従って、4096 バイトのページサイズのハードウェアを持つ
プラットホームは、8 個の正当ビットおよび 8 個のダーティビットを持ちます。
これらのビットは一般的に、ページを裏打ちするそのデバイスの
デバイスブロックサイズに基づいたグループ単位で、セットおよびクリアされます。
完全なページの価値は、しばしば VM_PAGE_BITS_ALL ビットマスク (すなわち、
ハードウェアのページサイズが 4096 であれば 0xFF) を使用することに当たります。
.Pp
VM バッファはバイト粒度のダーティな範囲および正当な範囲の追跡も維持します。
この機能は通常 NFS サブシステムによってのみ使用されます。
VM バッファの内部に DEV_BSIZE の正当/ダーティの粒度を持っているので、本当に、
一体どうして使用されているのか自信を持って言えません。
バッファをダーティにする操作が '穴' を生成する場合には、ダーティな範囲が
その穴を覆うように広がります。
バッファを正当化する操作が '穴' を生成する場合には、バイト粒度の正当な範囲が
そのまま残され、新しい拡張の評価は行なわれません。
従って、バイト粒度の抽象概念全体は悪いハックだと考えられます。
それを徹底的に除去できるのであれば、快適なことでしょう。
.Pp
VM バッファは、カーネルが直接的に (vnode,b_offset,b_size) に関連付けられた
データを操作することを可能にするために、
下層の VM キャッシュページを KVM にマップすることが可能です。
カーネルは一般的には、バッファがもはや必要でなくなった時に、VM バッファを
アンマップしますが、すでに KVM からアンマップされているにもかかわらず、
しばしば実体化された 'struct buf' 構造体を、および
実体化された bp->b_pages の配列をも保持します。
VM バッファに仕立てられたページが今にも入出力を受けようとしている場合には、
システムは一般的には、それを KVM からアンマップし、b_pages[] 配列の中の
ページを bogus_page (偽のページ) と呼ばれる位置目印に置き換えます。
その場所の目印は、関連付けられたページを再捜索するために、全てのカーネルの
サブシステムが関連付けられた struct buf を参照することを、強制します。
位置目印のハックは、ファイルシステムデバイスのようなきわめて複雑な
デバイスが、例えば、ファイルのフラグメントをファイルブロックに再マップ
するために、下層のページを再マップすることを、
可能にするために使用されると確信しています。
.Pp
VM バッファはカーネル内部の入出力操作を追跡するために使用されます。
運の悪いことに、入出力の実装もハックの対象です。なぜならば、カーネルは
物理的な入出力が実際に始まったときではなく、VFS デバイスに入出力をキューに
入れたときに、下層のページ上のダーティビットをクリアしたいからです。
これは、遅延書き込みを使用するファイルシステムデバイスの内部に混乱を
生み出すことがありえます。なぜならば、実際には未だダーティであるがページを
正当であると目印をつけて終了するからです。
注意深く取り扱わない場合には、これらのページは破棄されてしまうことが
ありえます。
それどころか、このハックに関連したかなりの深刻なバグが、2.2.8/3.0 リリースまで
修正されませんでした。
カーネルはこの特殊状態にあるページに位置目印をつけるため、
実体化された VM バッファ (すなわち struct buf) を使用します。
バッファは通常 B_DELWRI フラグが付けられます。
もはやバッファが必要でなくなったときに、通常 B_RELBUF としてフラグを付けます。
下層のページが正当であると目印を付けられている結果、B_DELWRI|B_RELBUF の
組み合わせは、そのバッファは実際には未だダーティであり、それが実際に解放される
ことがありうる前に、後援の記憶装置に書込まれなければならないということを
意味すると、解釈されなければなりません。
この場合で、B_DELWRI が設定されない場合、下層のダーティなページは未だ適切に
ダーティであると目印を付けられ、そのバッファは正当/ダーティの状態情報を
失うことなく、完全に解放されることが可能です。
(XXX この状況に配慮して、その他のフラグをチェックしなければならない
のでしょうか ???)。
.Pp
カーネルは VM バッファのデータマップを保持するために、その KVM 空間の
一部を予約します。
これは仮想空間 (バッファはバッファキャッシュからマップされるため) である
にもかかわらず、それを任意に大きく出来ません。なぜならば、
実体化された VM バッファ (struct buf) がバッファキャッシュの中の
下層のページが解放されることを妨げるからです。
これはページングシステムの生存を脅かし得ることです。
.Pp
.\" .Sh 関連項目
.\" .Xr <fillmein> 9
.Sh 歴史
.Nm
のマニュアルページは元々
.An Matthew Dillon
が書いて、1998 年 12 月に
.Fx 3.1
ではじめて登場しました。

View file

@ -0,0 +1,492 @@
.\" Copyright (c) 1998, 1999, Nicolas Souchu
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/microseq.9,v 1.16 2001/10/01 16:09:25 ru Exp %
.\" $FreeBSD$
.\"
.Dd June 6, 1998
.Dt MICROSEQ 9
.Os
.Sh 名称
.Nm microseq
.Nd ppbus マイクロシーケンサ開発者ガイド
.Sh 書式
.In sys/types.h
.In dev/ppbus/ppbconf.h
.In dev/ppbus/ppb_msq.h
.Sh 解説
ppbus の解説およびマイクロシーケンサについての一般的な情報は
.Xr ppbus 4
を参照してください。
.Pp
この文書の目的は以下を得るために、
開発者がマイクロシーケンサ機構を使用するように支援することです。
.Bl -enum -offset indent
.It
統一的なプログラミングモデル
.It
効率的なコード
.El
.Pp
マイクロシーケンスを使用する前に、
.Xr ppc 4
マイクロシーケンサの実装および
.Xr vpo 4
の中のこれをどのように使用するかの例を見ることが、奨励されています。
.Sh PPBUS レジスタモデル
.Ss 背景
ppbus のために選択されたパラレルポートモデルは PC パラレルポートモデルです。
従って、後で解説されるあらゆるレジスタは、PC パラレルポートの対になるものと
同じセマンティクスを持ちます。
より多くの ISA/ECP プログラミングについての情報については、
"Extended Capabilities Port Protocol and ISA interface Standard"
として参照される Microsoft 標準を入手してください。
後述するレジスタは標準のパラレルポートレジスタです。
.Pp
マスクマクロは、パラレルポートレジスタの個々の有効なビットのために
標準 ppbus インクルードファイルの中で定義されています。
.Ss データレジスタ
コンパチブルモードまたはニブルモードでは、このレジスタへの書き込みは
パラレルポートのデータ線へ出力されます。
その他のモードでは、出力段は制御レジスタ内の方向ビット (PDC) の設定によって、
トライステート (3 状態) になることができます。
このレジスタへの読み込みはデータ線上の値を返します。
.Ss デバイス状態レジスタ
この読取り専用レジスタはパラレルポートインタフェース上の入力を反映します。
.Pp
.Bl -column "ビット" "名前" "解説" -compact
.It Em ビット Ta Em 名前 Ta Em 解説
.It 7 Ta nBUSY Ta "パラレルポートの Busy 信号の反転"
.It 6 Ta nACK Ta "パラレルポートの nAck 信号"
.It 5 Ta PERROR Ta "パラレルポートの PERROR 信号"
.It 4 Ta SELECT Ta "パラレルポートの Select 信号"
.It 3 Ta nFAULT Ta "パラレルポートの nFault 信号"
.El
.Pp
その他は予約済みで、読込み時の結果は未定義です。
.Ss デバイス制御レジスタ
このレジスタは直接的に幾つかの機能の有効化はもちろん、
幾つかの出力信号を制御します。
.Pp
.Bl -column "ビット" "名前 " "解説" -compact
.It Em ビット Ta Em 名前 Ta Em 解説
.It 5 Ta PCD Ta "拡張モード時の方向ビット"
.It 4 Ta IRQENABLE Ta "1 で nAck の立ち上りで割り込み有効"
.It 3 Ta SELECTIN Ta "パラレルポートの nSelect 信号の反転を出力"
.It 2 Ta nINIT Ta "パラレルポートの nInit 信号を出力"
.It 1 Ta AUTOFEED Ta "パラレルポートの nAutoFd 信号の反転を出力"
.It 0 Ta STROBE Ta "パラレルポートの nStrobe 信号の反転を出力"
.El
.Sh マイクロインストラクション
.Ss 解説
.Em マイクロインストラクション
はパラレルポートのアクセス、プログラムの繰り返し、サブマイクロシーケンス
または C の呼び出しです。
パラレルポートは
.Xr ppbus 4
で解説されている論理モデルとみなされなければなりません。
.Pp
利用可能なマイクロシーケンスは以下のとおりです。
.Bd -literal
#define MS_OP_GET 0 /* get <ptr>, <len> */
#define MS_OP_PUT 1 /* put <ptr>, <len> */
#define MS_OP_RFETCH 2 /* rfetch <reg>, <mask>, <ptr> */
#define MS_OP_RSET 3 /* rset <reg>, <mask>, <mask> */
#define MS_OP_RASSERT 4 /* rassert <reg>, <mask> */
#define MS_OP_DELAY 5 /* delay <val> */
#define MS_OP_SET 6 /* set <val> */
#define MS_OP_DBRA 7 /* dbra <offset> */
#define MS_OP_BRSET 8 /* brset <mask>, <offset> */
#define MS_OP_BRCLEAR 9 /* brclear <mask>, <offset> */
#define MS_OP_RET 10 /* ret <retcode> */
#define MS_OP_C_CALL 11 /* c_call <function>, <parameter> */
#define MS_OP_PTR 12 /* ptr <pointer> */
#define MS_OP_ADELAY 13 /* adelay <val> */
#define MS_OP_BRSTAT 14 /* brstat <mask>, <mask>, <offset> */
#define MS_OP_SUBRET 15 /* subret <code> */
#define MS_OP_CALL 16 /* call <microsequence> */
#define MS_OP_RASSERT_P 17 /* rassert_p <iter>, <reg> */
#define MS_OP_RFETCH_P 18 /* rfetch_p <iter>, <reg>, <mask> */
#define MS_OP_TRIG 19 /* trigger <reg>, <len>, <array> */
.Ed
.Ss 実行コンテキスト
マイクロインストラクションの
.Em 実行コンテキスト
は以下のとおりです。
.Bl -bullet -offset indent
.It
メインのマイクロシーケンスの中またはサブコールの中の、実行するための
次のマイクロインストラクションを指し示す
.Em プログラムカウンタ
.It
送る/受け取るための次の文字を指し示す
.Em ptr
の現在の値
.It
内部の
.Em 分岐レジスタ
の現在の値
.El
.Pp
このデータは全てではない幾つかのマイクロインストラクションによって
変更されます。
.Ss MS_OP_GET および MS_OP_PUT
は定義済みの標準 IEEE1284-1994 転送またはプログラムされた非標準の
入出力のいずれかを行なうために使用されるマイクロインストラクションです。
.Ss MS_OP_RFETCH - レジスタ取得
はパラレルポートレジスタの現在の値を取り出し、マスクを適用し、
それをバッファに保存するために使用されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
レジスタ
.It
文字マスク
.It
バッファへのポインタ
.El
.Pp
定義済みマクロ: MS_RFETCH(reg,mask,ptr)
.Ss MS_OP_RSET - レジスタ設定
は 2 つのマスクを適用された、個々のパラレルポートレジスタの幾つかの
ビットをアサート/クリアするために使用されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
レジスタ
.It
アサートされるべきビットのマスク
.It
クリアされるべきビットのマスク
.El
.Pp
定義済みマクロ: MS_RSET(reg,assert,clear)
.Ss MS_OP_RASSERT - レジスタアサート
は個々のパラレルポートレジスタの全てのビットをアサートするために使用されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
レジスタ
.It
アサートされるべきバイト
.El
.Pp
定義済みマクロ: MS_RASSERT(reg,byte)
.Ss MS_OP_DELAY - マイクロ秒の遅延
はマイクロシーケンスの実行の遅延のために使用されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
マイクロ秒単位の遅延時間
.El
.Pp
定義済みマクロ: MS_DELAY(delay)
.Ss MS_OP_SET - 内部分岐レジスタの設定
は内部の分岐レジスタの値を設定するために使用します。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
整数値
.El
.Pp
定義済みマクロ: MS_SET(accum)
.Ss MS_OP_DBRA - 分岐の実行
は内部の分岐レジスタが 1 減らされた結果の値が正である場合に
分岐するために使用されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
現在実行された (サブ) マイクロシーケンスの整数のオフセット。
オフセットは次に実行されるマイクロインストラクションの
インデクスに追加されます。
.El
.Pp
定義済みマクロ: MS_DBRA(offset)
.Ss MS_OP_BRSET - セット時に分岐
はパラレルポートの状態レジスタのビットの幾つかがセットされている場合に
分岐するために使用されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
状態レジスタのビット
.It
現在実行された (サブ) マイクロシーケンスの整数のオフセット。
オフセットは次に実行されるマイクロインストラクションの
インデクスに追加されます。
.El
.Pp
定義済みマクロ: MS_BRSET(mask,offset)
.Ss MS_OP_BRCLEAR - クリア時に分岐
はパラレルポートの状態レジスタのビットの幾つかがクリアされている場合に
分岐するために使用されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
状態レジスタのビット
.It
現在実行された (サブ) マイクロシーケンスの整数のオフセット。
オフセットは次に実行されるマイクロインストラクションの
インデクスに追加されます。
.El
.Pp
定義済みマクロ: MS_BRCLEAR(mask,offset)
.Ss MS_OP_RET - 戻る
はマイクロシーケンスから戻るために使用されます。
この関数は必須です。
これはマイクロシーケンサがマイクロシーケンスの終わりを検出する唯一の方法です。
ppb_MS_microseq() の (int *) パラメータによって指される整数に、
リターンコードが返されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
整数のリターンコード
.El
.Pp
定義済みマクロ: MS_RET(code)
.Ss MS_OP_C_CALL - C 関数の呼び出し
はマイクロシーケンスの実行から C 関数を呼び出すために使用されます。
これはパラレルポートからデータ文字を取り出すために非標準の入出力が実行
されるときに有用かもしれません。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
呼び出すべき C 関数
.It
関数呼び出しのために渡されるパラメータ
.El
.Pp
C 関数は
.Ft int(*)(void *p, char *ptr)
と宣言されることになっています。
ptr パラメータは現在走査されているバッファの中の現在位置です。
.Pp
定義済みマクロ: MS_C_CALL(func,param)
.Ss MS_OP_PTR - 内部ポインタの初期化
は現在走査されているバッファへの内部ポインタを初期化します。
このポインタはあらゆる C 呼び出しに渡されます (上記を参照してください)。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
xxx_P() マイクロシーケンスの呼び出しによってアクセスされることになっている
バッファへのポインタ。
このポインタは xxx_P() 呼び出しの間自動的に増やされることに注意してください。
.El
.Pp
定義済みマクロ: MS_PTR(ptr)
.Ss MS_OP_ADELAY - 非同期遅延の実行
はマイクロシーケンスの実行の間に tsleep() するために使用されます。
この tsleep は PPBPRI レベルで実行されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
ミリ秒単位での遅延時間
.El
.Pp
定義済みマクロ: MS_ADELAY(delay)
.Ss MS_OP_BRSTAT - 状態による分岐
は状態レジスタの状態で分岐するために使用されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
アサートされたビットのマスク。
状態レジスタの中のアサートされるはずのビットがマスクにセットされます。
.It
クリアされたビットのマスク。
状態レジスタの中のクリアされるはずのビットがマスクにセットされます。
.It
現在実行された (サブ) マイクロシーケンスの整数のオフセット。
オフセットは次に実行されるマイクロインストラクションの
インデクスに追加されます。
.El
.Pp
定義済みマクロ: MS_BRSTAT(asserted_bits,clear_bits,offset)
.Ss MS_OP_SUBRET - サブマイクロシーケンスから戻る
はサブマイクロシーケンスの呼び出しから戻るために使用されます。
この行動は RET の呼び出しの前に必須です。
幾つかのマイクロインストラクション (PUT, GET) はサブマイクロシーケンスの
内部では呼び出し可能ではないかもしれません。
.Pp
パラメータはありません。
.Pp
定義済みマクロ: MS_SUBRET()
.Ss MS_OP_CALL - サブマイクロシーケンスの呼び出し
はサブマイクロシーケンスを呼び出すために使用されます。
サブマイクロシーケンスは SUBRET の呼び出しを伴なうマイクロシーケンスです。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
実行されるべきサブマイクロシーケンス
.El
.Pp
定義済みマクロ: MS_CALL(microseq)
.Ss MS_OP_RASSERT_P - 内部 PTR からレジスタへのアサート
は内部の PTR ポインタによって現在指されているデータでレジスタを
アサートするために使用されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
レジスタに書込むためのデータ量
.It
レジスタ
.El
.Pp
定義済みマクロ: MS_RASSERT_P(iter,reg)
.Ss MS_OP_RFETCH_P - 内部 PTR へのレジスタフェッチ
はレジスタからデータを読込むために使用されます。
データは内部の PTR ポインタによって現在指されているバッファに保存されます。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
レジスタから読込むためのデータ量
.It
レジスタ
.It
読込まれたデータに適用されるマスク
.El
.Pp
定義済みマクロ: MS_RFETCH_P(iter,reg,mask)
.Ss MS_OP_TRIG - レジスタのトリガ
はパラレルポートをトリガするために使用されます。
このマイクロインストラクションはパラレルポートのとても効率的な制御の
提供を意図されています。
レジスタのトリガはデータ書込み、少しウェイト、データ書込み、
少しウェイト ... です。
これはポートへマジックシーケンスを書込むことを可能にします。
.Pp
パラメータ:
.Bl -enum -offset indent
.It
.\" 原文は読込まれる --- send-pr すべき?
レジスタに書込まれるデータ量
.It
レジスタ
.It
配列の大きさ
.It
unsigned char の配列。
個々の u_char の組はレジスタに書込むべきデータおよび
マイクロ秒単位でのウェイトするべき遅延時間です。
遅延時間は簡単化および配列の大きさの縮小のために 255 マイクロ秒までに
制限されています。
.El
.Pp
定義済みマクロ: MS_TRIG(reg,len,array)
.Sh マイクロシーケンス
.Ss C 構造体
.Bd -literal
union ppb_insarg {
int i;
char c;
void *p;
int (* f)(void *, char *);
};
struct ppb_microseq {
int opcode; /* マイクロインストラクション opcode */
union ppb_insarg arg[PPB_MS_MAXARGS]; /* 引数 */
};
.Ed
.Ss マイクロシーケンスの使用
マイクロシーケンスを実体化するためには、ppb_microseq 構造体の配列を
宣言して必要に応じて初期化するだけです。
定義済みのマクロまたは ppb_microseq の定義に従った独自の
マイクロインストラクションのいずれかを使用できます。
例えば、
.Bd -literal
struct ppb_microseq select_microseq[] = {
/* パラメータリスト
*/
#define SELECT_TARGET MS_PARAM(0, 1, MS_TYP_INT)
#define SELECT_INITIATOR MS_PARAM(3, 1, MS_TYP_INT)
/* 出力するための選択コマンドの送信 */
MS_DASS(MS_UNKNOWN),
MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE),
MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE),
MS_DASS(MS_UNKNOWN),
MS_CASS( H_AUTO | H_nSELIN | H_nINIT | H_STROBE),
/* 出力の準備ができるまで待ちます */
MS_SET(VP0_SELTMO),
/* loop: */ MS_BRSET(H_ACK, 2 /* ready */),
MS_DBRA(-2 /* loop */),
/* error: */ MS_RET(1),
/* ready: */ MS_RET(0)
};
.Ed
.Pp
ここで、幾つかのパラメータが未定義でマイクロシーケンスの実行の前に
満たされなければなりません。
個々のマイクロシーケンスを初期化するために、ppb_MS_init_msq() 関数を
以下のように使用するべきです。
.Bd -literal
ppb_MS_init_msq(select_microseq, 2,
SELECT_TARGET, 1 << target,
SELECT_INITIATOR, 1 << initiator);
.Ed
.Pp
それからマイクロシーケンスを実行します。
.Ss マイクロシーケンサ
マイクロシーケンサは ppbus レベルまたはアダプタレベル (ppbus の
システムレイヤについての情報は
.Xr ppbus 4
を参照してください) のいずれかで実行されます。
マイクロシーケンサの殆んどは、ppbus からアダプタへの関数呼び出しの
オーバヘッドを避けるために、ppc レベルで実行されます。
しかし、その転送は IEEE1284-1994 に合致しているのに反して、
いくつかの決まりきった様な機能は ppbus レイヤで実行されます。
.Sh バグ
1 レベルのサブマイクロシーケンスのみが認められています。
.Pp
ポートのトリガ時は、許可されている最大の遅延は 255 マイクロ秒です。
.Sh 関連項目
.Xr ppbus 4 ,
.Xr ppc 4 ,
.Xr vpo 4
.Sh 歴史
.Nm
のマニュアルページは
.Fx 3.0
ではじめて登場しました。
.Sh 作者
このマニュアルページは
.An Nicolas Souchu
が書きました。

View file

@ -0,0 +1,157 @@
.\"
.\" Copyright (c) 1996 Joerg Wunsch
.\"
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/sleep.9,v 1.34 2002/03/18 10:43:49 ru Exp %
.\" $FreeBSD$
.\" "
.Dd December 17, 1998
.Os
.Dt SLEEP 9
.Sh 名称
.Nm sleep ,
.Nm msleep ,
.Nm tsleep ,
.Nm wakeup
.Nd イベントのウェイト
.Sh 書式
.In sys/param.h
.In sys/systm.h
.In sys/proc.h
.Ft int
.Fn tsleep "void *ident" "int priority" "const char *wmesg" "int timo"
.Ft int
.Fn msleep "void *ident" "struct mtx *mtx" "int priority" "const char *wmesg" "int timo"
.Ft void
.Fn wakeup "void *ident"
.Ft void
.Fn wakeup_one "void *ident"
.Sh 解説
関数
.Fn tsleep
および
.Fn wakeup
はイベントに基づいたプロセスのブロックを取り扱います。
プロセスが外部イベントを待たなければならない場合には、そのプロセスは
.Nm tsleep
によってスリープ状態に置かれます。
パラメータ
.Ar ident
は、プロセスがどのイベント上でスリープしているかを識別する一意的な
任意のアドレスです。
単一の
.Ar ident
上でスリープしている全てのプロセスは後で、
.Nm wakeup
によって起こされます。これは、しばしば割り込みルーチンの中から呼び出され、
プロセスがブロックしているリソースが現在利用可能になったことを示します。
.Pp
パラメータ
.Ar wmesg
.Xr ps 1
のようなツールのためのスリープ状態を解説する文字列です。
これらのプログラムの任意の文字列を表示するための領域の制限のため、
このメッセージは 6 文字を超えるべきではありません。
.Pp
.Fn wakeup_one
関数はパラメータ
.Fa ident
上でスリープしているキューの中の最初のプロセスを実行可能に
するために使用されます。
これは、多数のプロセスが同じアドレス上でスリープしているが、
実行可能となったときその中の 1 つのみが実際には役に立つ作業ができるときに、
システムが飽和することを防ぐことが可能です。
.Pp
.Nm tsleep
は一般的なスリープの呼び出しです。
明示された識別子上の wakeup が実行されるまでの間、
現在のプロセスを一時停止させます。
それからそのプロセスは明示された優先度
.Ar priority
で実行可能にされます。
長くて
.Ar timo
\&/ hz 秒間 (0 はタイムアウトなしを意味します) スリープします。
.Ar pri
.Dv PCATCH
フラグを含む場合には、スリープの前後でシグナルがチェックされます。
そうでない場合には、シグナルはチェックされません。
起こされた場合には 0 を返し、タイムアウトが経過した場合には
.Er EWOULDBLOCK
を返します。
.Dv PCATCH
が設定されていてシグナルが配信される必要がある場合で、
可能であれば現在のシステムコールが再開始されるべきである場合には
.Er ERESTART
が返され、
.Er ( EINTR
を返す) シグナルによってそのシステムコールが中断されるべき場合には
.Er EINTR
が返されます。
.Pp
.Nm msleep
は tsleep の変種です。パラメータ
.Ar mtx
は、スリープの前に抜け、
.Nm msleep
が戻る前に入る mutex です。
.Ar pri
.Dv PDROP
フラグを含む場合には、戻る前に
.Ar mtx
引数へ入りません。
ある状態を不可分にチェックできることを保証し、
その状態の変更も対応する wakeup も失うことなく
現在のプロセスを中断できることを保証するために、
この mutex は使用されます。
.Sh 戻り値
上記を参照してください。
.Sh 関連項目
.Xr ps 1 ,
.Xr malloc 9 ,
.Xr mi_switch 9
.Sh 歴史
sleep/wakeup プロセス同期機構はとても古いです。
これはとても早期のバージョンの
.Ux
で登場しました。
.Pp
.Nm tsleep
.Bx 4.4
で登場しました。
.Pp
.Nm sleep
は伝統的な形式のために使用されます。
これはタイムアウトまたは
.Ar wmesg
を明示させないため、中止されています。
.Sh 作者
.An -nosplit
このマニュアルページは
.An J\(:org Wunsch .
が書きました。

View file

@ -0,0 +1,231 @@
.\" $NetBSD: timeout.9,v 1.2 1996/06/23 22:32:34 pk Exp $
.\"
.\" Copyright (c) 1996 The NetBSD Foundation, Inc.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to The NetBSD Foundation
.\" by Paul Kranenburg.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the NetBSD
.\" Foundation, Inc. and its contributors.
.\" 4. Neither the name of The NetBSD Foundation nor the names of its
.\" contributors may be used to endorse or promote products derived
.\" from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/timeout.9,v 1.18 2001/10/01 16:09:25 ru Exp %
.\" $FreeBSD$
.\"
.Dd September 10, 1996
.Dt TIMEOUT 9
.Os
.Sh 名称
.Nm timeout ,
.Nm untimeout ,
.Nm callout_handle_init ,
.Nm callout_init ,
.Nm callout_stop ,
.Nm callout_reset
.Nd 明示された時間長の後の関数の実行
.Sh 書式
.In sys/types.h
.In sys/systm.h
.Pp
.Bd -literal
typedef void timeout_t (void *);
.Ed
.Ft struct callout_handle
.Fn timeout "timeout_t *func" "void *arg" "int ticks"
.Ft void
.Fn callout_handle_init "struct callout_handle *handle"
.Pp
.Bd -literal
struct callout_handle handle = CALLOUT_HANDLE_INITIALIZER(&handle)
.Ed
.Ft void
.Fn untimeout "timeout_t *func" "void *arg" "struct callout_handle handle"
.Ft void
.Fn callout_init "struct callout *c" "int mpsafe"
.Ft int
.Fn callout_stop "struct callout *c"
.Ft void
.Fn callout_reset "struct callout *c" "int ticks" "timeout_t *func" "void *arg"
.Sh 解説
関数
.Fn timeout
.Fa ticks Ns No /hz
秒後に実行されるための引数
.Fa func
によって与えられる関数を呼び出すためのスケジュールを行います。
正ではない値の
.Fa ticks
は沈黙のうちに値
.Sq 1
に変換されます。
.Fa func
.Fa void *
の引数を取る関数へのポインタであるべきです。
実行時には、
.Fa func
.Fa arg
をその唯一の引数として受け取ります。
.Fn timeout
からの戻り値は、スケージュールされた timeout を取り消す要求のための
.Fn untimeout
関数との接続に使用されることが可能な
.Ft struct callout_handle
です。
.Pp
関数
.Fn callout_handle_init
はハンドルを初期化するために使用し、untimeout と共に
使用されても副作用無しに戻るようにします。
.Pp
コールアウトハンドルに
.Fn CALLOUT_HANDLE_INITIALIZER
の値を割当てることは、
.Fn callout_handle_init
と同様の機能を実行し、静的な宣言またはグローバルなコールアウトハンドルで
使用するために提供されています。
.Pp
関数
.Fn untimeout
は、そのハンドルの正当性を確認するために
.Fa func
および
.Fa arg
引数を使用して、
.Fa handle
に関連付けられた timeout を取り消します。
そのハンドルが引数
.Fa arg
を取る関数
.Fa func
を持つ timeout と一致しない場合には、何も行いません。
.Fa handle
.Fn untimeout
に渡される前に以前の
.Fn timeout ,
.Fn callout_handle_init
の呼び出し、または
.Fn CALLOUT_HANDLE_INITIALIZER "&handle"
の値の割当てによって初期化されなければなりません。
以前に初期化されたハンドルを伴なわない untimeout の呼び出しの振る舞いは
未定義です。
.Pp
ハンドルがシステムによって再利用されるので、
両方の呼び出しが同じ関数のポインタおよび引数を使用し、2 番目の呼び出しの前に
最初の timeout が終了するか取り消された場合には、1 つの
.Fn timeout
の実行からのハンドルが別の
.Fn timeout
の実行のハンドルが一致することができることが (意外ではあるが) 可能です。
timeout の設備は
.Fn timeout
および
.Fn untimeout
のための O(1) 実行時間を提供します。
timeout (訳注: および untimeout) は
.Fn splsoftclock
の状態で
.Fn softclock
から実行されます。
従って、再入から保護されます。
.Pp
関数
.Fn callout_init ,
.Fn callout_stop
および
.Fn callout_reset
は固有のコールアウト構造を割当てることを希望するクライアントのための、
低レベルのルーチンです。
.Pp
関数
.Fn callout_init
はコールアウトを初期化し、そのためそのコールアウトは何の副作用もなしに
.Fn callout_stop
または
.Fn callout_reset
に渡されることができます。
.Fa mpsafe
引数が 0 の場合には、callout 構造体は
.Dq マルチプロセッサセーフ
であるとはみなされません。
すなわち、ジャイアントロックが callout 関数の呼出し前に
獲得され、callout 関数が戻るときに解放されるようにします。
.Pp
関数
.Fn callout_stop
は、そのコールアウトが現在保留中の場合には、コールアウトを取り消します。
コールアウトが保留中の場合には、
.Fn callout_stop
は 0 でない値を返します。
コールアウトが既に実行されたか現在実行中の場合には、0 が返されます。
.Pp
関数
.Fn callout_reset
は最初にそのコールアウトを廃止するために
.Fn callout_stop
を呼び出し、それから新しいコールアウトを
.Fn timeout
と同じ流儀で確立します。
.Sh 戻り値
.Fn timeout
関数は
.Fn untimeout
に渡すことが可能な
.Ft struct callout_handle
を返します。
.Fn callout_stop
関数はコールアウトが未だ保留の場合には 0 以外を、そうでない場合には 0 を
返します。
.Sh 歴史
現在の timeout および untimeout ルーチンは
.An Adam M. Costello
および
.An George Varghese
.%T "Redesigning the BSD Callout and Timer Facilities"
と名付けられた技術レポートで発表された作業に基づいています。また、
.Fx
への導入のために
.An Justin T. Gibbs
によって少し修正されています。
この実装で使用されているデータ構造の元の作業は、
.An G. Varghese
および
.An A. Lauck
によって
.%B "Proceedings of the 11th ACM Annual Symposium on Operating Systems Principles"
.%T "Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility"
で発表されました。
現在の実装は、長らく存在していた、挿入および削除の O(n) 実行時間を
提供するが untimeout 操作のためのハンドルを生成または要求しなかった
.Bx
リンクリストのコールアウト機構に、取って代りました。