b3aee9efe3
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>
163 lines
4.6 KiB
Groff
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
|
|
によって書かれました。
|