doc/ja_JP.eucJP/man/man9/sleep.9
SUZUKI Koichi b3aee9efe3 Catch up with 5.4-Release.
Submitted by: Nobuyuki Koganemaru <n-kogane at syd odn ne jp>
Reviewed by: kano at na rim or jp
             Yoshihiko Sarumaru <mistral at imasy or jp>
2005-07-11 13:46:23 +00:00

163 lines
4.6 KiB
Groff

.\"
.\" 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.43.2.1 2005/01/10 08:27:21 cperciva 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
はイベントに基づいたプロセスのブロックを取り扱います。
プロセスが外部イベントを待たなければならない場合には、そのプロセスは
.Fn tsleep
によってスリープ状態に置かれます。
パラメータ
.Fa ident
は、プロセスがどのイベント上でスリープしているかを識別する一意的な
任意のアドレスです。
単一の
.Fa ident
上でスリープしている全てのプロセスは後で、
.Fn wakeup
によって起こされます。
これは、しばしば割り込みルーチンの中から呼び出され、
プロセスがブロックしているリソースが現在利用可能になったことを示します。
.Pp
パラメータ
.Fa wmesg
.Xr ps 1
のようなツールのためのスリープ状態を解説する文字列です。
これらのプログラムの任意の文字列を表示するための領域の制限のため、
このメッセージは 6 文字を超えるべきではありません。
.Pp
.Fn wakeup_one
関数はパラメータ
.Fa ident
上でスリープしているキューの中の最初のプロセスを実行可能に
するために使用されます。
これは、多数のプロセスが同じアドレス上でスリープしているが、
実行可能となったときその中の 1 つのみが実際には役に立つ作業ができるときに、
システムが飽和することを防ぐことが可能です。
.Pp
.Fn tsleep
関数は一般的なスリープの呼び出しです。
明示された識別子上の wakeup が実行されるまでの間、
現在のプロセスを一時停止させます。
それからそのプロセスは明示された優先度
.Fa priority
で実行可能にされます。
長くて
.Fa timo
\&/ hz 秒間 (0 はタイムアウトなしを意味します) スリープします。
.Va Giant
ロックが保持されていないなら、
.Fa timo
は 0 以外でなければなりません。
.Fa priority
.Dv PCATCH
フラグを含む場合には、スリープの前後でシグナルがチェックされます。
そうでない場合には、シグナルはチェックされません。
起こされた場合には 0 を返し、タイムアウトが経過した場合には
.Er EWOULDBLOCK
を返します。
.Dv PCATCH
が設定されていてシグナルが配信される必要がある場合で、
可能であれば現在のシステムコールが再開始されるべきである場合には
.Er ERESTART
が返され、
.Er ( EINTR
を返す) シグナルによってそのシステムコールが中断されるべき場合には
.Er EINTR
が返されます。
.Pp
.Fn msleep
関数は tsleep の変種です。
パラメータ
.Fa mtx
は、スリープの前に抜け、
.Fn msleep
が戻る前に入る mutex です。
.Fa priority
.Dv PDROP
フラグを含む場合には、戻る前に
.Fa mtx
引数を再取得しません。
ある状態を不可分にチェックできることを保証し、
その状態の変更も対応する wakeup も失うことなく
現在のプロセスを中断できることを保証するために、
この mutex は使用されます。
.Sh 戻り値
上記を参照してください。
.Sh 関連項目
.Xr ps 1 ,
.Xr malloc 9 ,
.Xr mi_switch 9
.Sh 歴史
sleep/wakeup プロセス同期機構はとても古いです。
これはとても早期のバージョンの
.Ux
で登場しました。
.Pp
.Fn tsleep
関数は
.Bx 4.4
で登場しました。
.Pp
.Fn sleep
関数は伝統的な形式でした。
これはタイムアウトも
.Fa wmesg
も指定できないため、使用取り止めとなりました。
.Sh 作者
.An -nosplit
このマニュアルページは
.An J\(:org Wunsch Aq joerg@FreeBSD.org
によって書かれました。