Catch up with 5.0-CURRENT-20021105-JPSNAP
Submitted by: Akira Ikeuchi <yr6a-ikuc@asahi-net.or.jp>
This commit is contained in:
parent
35e1829141
commit
8d9a34f82a
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=15550
6 changed files with 425 additions and 234 deletions
|
@ -1,5 +1,5 @@
|
||||||
.\"-
|
.\"-
|
||||||
.\" Copyright (c) 1999, 2000 Robert N. M. Watson
|
.\" Copyright (c) 1999-2001 Robert N. M. Watson
|
||||||
.\" All rights reserved.
|
.\" All rights reserved.
|
||||||
.\"
|
.\"
|
||||||
.\" Redistribution and use in source and binary forms, with or without
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.\" %FreeBSD: src/share/man/man9/acl.9,v 1.2.2.4 2001/12/17 11:30:18 ru Exp %
|
.\" %FreeBSD: src/share/man/man9/acl.9,v 1.11 2002/05/29 17:45:44 ru Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.Dd December 23, 1999
|
.Dd December 23, 1999
|
||||||
|
@ -37,55 +37,8 @@
|
||||||
.In sys/vnode.h
|
.In sys/vnode.h
|
||||||
.In sys/acl.h
|
.In sys/acl.h
|
||||||
.Pp
|
.Pp
|
||||||
.Bd -literal
|
カーネルコンフィギュレーションファイルの中に、
|
||||||
typedef int acl_type_t;
|
.Cd "options UFS_ACL"
|
||||||
typedef int acl_tag_t;
|
|
||||||
typedef mode_t acl_perm_t;
|
|
||||||
|
|
||||||
struct acl_entry {
|
|
||||||
acl_tag_t ae_tag;
|
|
||||||
uid_t ae_id;
|
|
||||||
acl_perm_t ae_perm;
|
|
||||||
};
|
|
||||||
typedef struct acl_entry *acl_entry_t;
|
|
||||||
|
|
||||||
struct acl {
|
|
||||||
int acl_cnt;
|
|
||||||
struct acl_entry acl_entry[ACL_MAX_ENTRIES];
|
|
||||||
};
|
|
||||||
typedef struct acl *acl_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* acl_entry_t の a_tag に有効な値
|
|
||||||
*/
|
|
||||||
#define ACL_USER_OBJ 0x00000001
|
|
||||||
#define ACL_USER 0x00000002
|
|
||||||
#define ACL_GROUP_OBJ 0x00000004
|
|
||||||
#define ACL_GROUP 0x00000008
|
|
||||||
#define ACL_MASK 0x00000010
|
|
||||||
#define ACL_OTHER 0x00000020
|
|
||||||
#define ACL_OTHER_OBJ ACL_OTHER
|
|
||||||
|
|
||||||
/*
|
|
||||||
* a_type_t 引数に有効な値
|
|
||||||
*/
|
|
||||||
#define ACL_TYPE_ACCESS 0x00000000
|
|
||||||
#define ACL_TYPE_DEFAULT 0x00000001
|
|
||||||
#define ACL_TYPE_AFS 0x00000002
|
|
||||||
#define ACL_TYPE_CODA 0x00000003
|
|
||||||
#define ACL_TYPE_NTFS 0x00000004
|
|
||||||
#define ACL_TYPE_NWFS 0x00000005
|
|
||||||
|
|
||||||
/*
|
|
||||||
* a_perm フィールドに可能なフラグ
|
|
||||||
*/
|
|
||||||
#define ACL_PERM_EXEC 0x0001
|
|
||||||
#define ACL_PERM_WRITE 0x0002
|
|
||||||
#define ACL_PERM_READ 0x0004
|
|
||||||
#define ACL_PERM_NONE 0x0000
|
|
||||||
#define ACL_PERM_BITS (ACL_PERM_EXEC | ACL_PERM_WRITE | ACL_PERM_READ)
|
|
||||||
#define ACL_POSIX1E_BITS (ACL_PERM_EXEC | ACL_PERM_WRITE | ACL_PERM_READ)
|
|
||||||
.Ed
|
|
||||||
.Sh 解説
|
.Sh 解説
|
||||||
アクセス制御リスト、すなわち ACL は、
|
アクセス制御リスト、すなわち ACL は、
|
||||||
ファイルおよびディレクトリを表現する vnode に対する権限を、
|
ファイルおよびディレクトリを表現する vnode に対する権限を、
|
||||||
|
@ -98,20 +51,158 @@ vnode
|
||||||
関連付けられる 0 個以上の ACL を持つことが可能です。
|
関連付けられる 0 個以上の ACL を持つことが可能です。
|
||||||
それぞれ ACL の名前は、適切な vnode ACL 呼び出し
|
それぞれ ACL の名前は、適切な vnode ACL 呼び出し
|
||||||
.Xr VOP_ACLCHECK 9 ,
|
.Xr VOP_ACLCHECK 9 ,
|
||||||
.Xr VOP_GETACL 9 ,
|
.Xr VOP_GETACL 9
|
||||||
|
および
|
||||||
.Xr VOP_SETACL 9
|
.Xr VOP_SETACL 9
|
||||||
の
|
の
|
||||||
.Fa type
|
.Fa type
|
||||||
フィールドを使用して指定されます。
|
フィールドを使用して指定されます。
|
||||||
.Pp
|
.Pp
|
||||||
現在は、個々の ACL はカーネル内で固定サイズの ACL 構造体によって表現されます。
|
現在は、個々の ACL は以下に定義されるカーネル内で固定サイズの
|
||||||
|
.Vt acl
|
||||||
|
構造体によって表現されます。
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
struct acl {
|
||||||
|
int acl_cnt;
|
||||||
|
struct acl_entry acl_entry[ACL_MAX_ENTRIES];
|
||||||
|
};
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
ACL は、ACL エントリの固定サイズ配列で構成されます。
|
ACL は、ACL エントリの固定サイズ配列で構成されます。
|
||||||
各 ACL エントリは、
|
各 ACL エントリは、
|
||||||
パーミッションの組、主要な名前空間、主要な識別子から構成されます。
|
パーミッションの組、主要な名前空間、主要な識別子から構成されます。
|
||||||
結びつけられた acl_cnt フィールドの値に依存して、
|
.Pp
|
||||||
これらの 0 個以上のエントリが "定義" されることが出来ます。
|
個別の ACL エントリは、以下のメンバを持つ構造体の
|
||||||
|
.Vt acl_entry_t
|
||||||
|
型です。
|
||||||
|
.Bl -tag -width 2n
|
||||||
|
.It Vt acl_tag_t Va ae_tag
|
||||||
|
以下は
|
||||||
|
.Va ae_tag
|
||||||
|
に設定されるべき ACL の型の定義のリストです。
|
||||||
|
.Pp
|
||||||
|
.Bl -tag -width ".Dv ACL_UNDEFINED_FIELD" -offset indent -compact
|
||||||
|
.It Dv ACL_UNDEFINED_FIELD
|
||||||
|
未定義の ACL 型。
|
||||||
|
.It Dv ACL_USER_OBJ
|
||||||
|
実効ユーザ ID がファイルの所有者のユーザ ID と
|
||||||
|
一致するプロセスのための任意のアクセス権。
|
||||||
|
.It Dv ACL_USER
|
||||||
|
実効ユーザ ID が ACL エントリの権限と
|
||||||
|
一致するプロセスのための任意のアクセス権。
|
||||||
|
.It Dv ACL_GROUP_OBJ
|
||||||
|
実効グループ ID または全ての追加のグループがファイルの所有者のグループ ID と
|
||||||
|
一致するプロセスのための任意のアクセス権。
|
||||||
|
.It Dv ACL_GROUP
|
||||||
|
実効グループ ID または全ての追加のグループが ACL エントリの権限と
|
||||||
|
一致するプロセスのための任意のアクセス権。
|
||||||
|
.It Dv ACL_MASK
|
||||||
|
ファイルグループクラスの中のプロセスが許可されることができる
|
||||||
|
任意のアクセス権の最高限度。
|
||||||
|
.It Dv ACL_OTHER
|
||||||
|
その他の ACL エントリによって保護されていない
|
||||||
|
プロセスのための任意のアクセス権。
|
||||||
|
.It Dv ACL_OTHER_OBJ
|
||||||
|
.Dv ACL_OTHER
|
||||||
|
と同じです。
|
||||||
|
各々の ACL エントリは、厳密に、1 つの
|
||||||
|
.Dv ACL_USER_OBJ
|
||||||
|
と 1 つの
|
||||||
|
.Dv ACL_GROUP_OBJ
|
||||||
|
と 1 つの
|
||||||
|
.Dv ACL_OTHER
|
||||||
|
を含まなければなりません。
|
||||||
|
.Dv ACL_USER ,
|
||||||
|
.Dv ACL_GROUP
|
||||||
|
または
|
||||||
|
.Dv ACL_OTHER
|
||||||
|
が存在する場合には、厳密に 1 つの
|
||||||
|
.Dv ACL_MASK
|
||||||
|
エントリが存在するべきです。
|
||||||
|
.El
|
||||||
|
.It Vt uid_t Va ae_id
|
||||||
|
この ACL がアクセスパーミションを記述しているユーザのユーザ ID。
|
||||||
|
.It Vt acl_perm_t Va ae_perm
|
||||||
|
このフィールドは、この ACL に適合するプロセスが関連したファイルの
|
||||||
|
アクセスのために、どの種類のアクセスかを定義します。
|
||||||
|
.Bl -tag -width ".Dv ACL_POSIX1E_BITS"
|
||||||
|
.It Dv ACL_EXECUTE
|
||||||
|
プロセスは関連したファイルの実行が可能です。
|
||||||
|
.It Dv ACL_WRITE
|
||||||
|
プロセスは関連したファイルへの書込みが可能です。
|
||||||
|
.It Dv ACL_READ
|
||||||
|
プロセスは関連したファイルからの読込みが可能です。
|
||||||
|
.It Dv ACL_PERM_NONE
|
||||||
|
プロセスは関連したファイルへの読込み、書込みまたは実行のパーミションを
|
||||||
|
所有していません。
|
||||||
|
.El
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
.Sh 実装に関する注
|
||||||
|
.Bd -literal
|
||||||
|
typedef mode_t *acl_permset_t;
|
||||||
|
|
||||||
|
/* 内部の ACL 構造体 */
|
||||||
|
struct acl {
|
||||||
|
int acl_cnt;
|
||||||
|
struct acl_entry acl_entry[ACL_MAX_ENTRIES];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 外部の ACL 構造体 */
|
||||||
|
struct acl_t_struct {
|
||||||
|
struct acl ats_acl;
|
||||||
|
int ats_cur_entry;
|
||||||
|
};
|
||||||
|
typedef struct acl_t_struct *acl_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ae_tag フィールドに有効な値
|
||||||
|
*/
|
||||||
|
#define ACL_UNDEFINED_TAG 0x00000000
|
||||||
|
#define ACL_USER_OBJ 0x00000001
|
||||||
|
#define ACL_USER 0x00000002
|
||||||
|
#define ACL_GROUP_OBJ 0x00000004
|
||||||
|
#define ACL_GROUP 0x00000008
|
||||||
|
#define ACL_MASK 0x00000010
|
||||||
|
#define ACL_OTHER 0x00000020
|
||||||
|
#define ACL_OTHER_OBJ ACL_OTHER
|
||||||
|
|
||||||
|
/*
|
||||||
|
* acl_type_t 引数のために有効な値
|
||||||
|
*/
|
||||||
|
#define ACL_TYPE_ACCESS 0x00000000
|
||||||
|
#define ACL_TYPE_DEFAULT 0x00000001
|
||||||
|
#define ACL_TYPE_AFS 0x00000002
|
||||||
|
#define ACL_TYPE_CODA 0x00000003
|
||||||
|
#define ACL_TYPE_NTFS 0x00000004
|
||||||
|
#define ACL_TYPE_NWFS 0x00000005
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ae_perm フィールドに可能なフラグ
|
||||||
|
*/
|
||||||
|
#define ACL_EXECUTE 0x0001
|
||||||
|
#define ACL_WRITE 0x0002
|
||||||
|
#define ACL_READ 0x0004
|
||||||
|
#define ACL_PERM_NONE 0x0000
|
||||||
|
#define ACL_PERM_BITS (ACL_EXECUTE | ACL_WRITE | ACL_READ)
|
||||||
|
#define ACL_POSIX1E_BITS (ACL_EXECUTE | ACL_WRITE | ACL_READ)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* acl_get_entry() のための entry_id に可能な値
|
||||||
|
*/
|
||||||
|
#define ACL_FIRST_ENTRY 0
|
||||||
|
#define ACL_NEXT_ENTRY 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ae_id フィールドの中の未定義の値
|
||||||
|
*/
|
||||||
|
#define ACL_UNDEFINED_ID ((uid_t)-1)
|
||||||
|
.Ed
|
||||||
.Sh 関連項目
|
.Sh 関連項目
|
||||||
|
.Xr acl 3 ,
|
||||||
|
.Xr vaccess_acl_posix1e 9 ,
|
||||||
.Xr VFS 9 ,
|
.Xr VFS 9 ,
|
||||||
|
.Xr vaccess 9 ,
|
||||||
.Xr VOP_ACLCHECK 9 ,
|
.Xr VOP_ACLCHECK 9 ,
|
||||||
.Xr VOP_GETACL 9 ,
|
.Xr VOP_GETACL 9 ,
|
||||||
.Xr VOP_SETACL 9
|
.Xr VOP_SETACL 9
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.\"-
|
.\"-
|
||||||
.\" Copyright (c) 1999 Robert N. M. Watson
|
.\" Copyright (c) 1999, 2000, 2001 Robert N. M. Watson
|
||||||
.\" All rights reserved.
|
.\" All rights reserved.
|
||||||
.\"
|
.\"
|
||||||
.\" Redistribution and use in source and binary forms, with or without
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.\" %FreeBSD: src/share/man/man9/extattr.9,v 1.1.2.4 2001/12/17 11:30:18 ru Exp %
|
.\" %FreeBSD: src/share/man/man9/extattr.9,v 1.10 2002/05/16 05:21:58 trhodes Exp %
|
||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.Dd December 23, 1999
|
.Dd December 23, 1999
|
||||||
|
@ -42,7 +42,23 @@
|
||||||
この追加のデータのセマンティクスは、"name=value" ("名前=値") のペアで、
|
この追加のデータのセマンティクスは、"name=value" ("名前=値") のペアで、
|
||||||
名前は定義されても定義されなくても良く、定義されていれば、0 バイト以上の
|
名前は定義されても定義されなくても良く、定義されていれば、0 バイト以上の
|
||||||
任意のバイナリデータに関連付けられます。
|
任意のバイナリデータに関連付けられます。
|
||||||
このデータの読み込みは、
|
拡張属性の名前は名前空間の集合の中に存在します。
|
||||||
|
拡張属性上の個々の操作は、操作を参照するために名前空間を供給することが
|
||||||
|
要求されています。
|
||||||
|
複数の名前空間の中に同じ名前が存在する場合には、その名前に関連付けられた
|
||||||
|
拡張属性は、独立して格納され、操作されます。
|
||||||
|
次の 2 つの名前空間が普遍的に定義されていますが、個々のファイルシステムは
|
||||||
|
追加の名前空間を実装することが可能で、またこれら
|
||||||
|
.Dv EXTATTR_NAMESPACE_USER ,
|
||||||
|
.Dv EXTATTR_NAMESPACE_SYSTEM
|
||||||
|
の名前空間を実装しないことも可能です。
|
||||||
|
これらの属性のセマンティクスは以下を意図しています。
|
||||||
|
ユーザ属性データは、ファイルまたはディレクトリの中のデータに関連付けられた
|
||||||
|
通常の任意および必須の保護によって、保護されます。
|
||||||
|
システム属性データは、これらの属性への直接的なアクセスまたは操作には
|
||||||
|
適切な特権が要求されることによって、保護されます。
|
||||||
|
.Pp
|
||||||
|
拡張属性データの読み込みは、
|
||||||
.Xr VOP_READ 9
|
.Xr VOP_READ 9
|
||||||
の形式で、明示されたメタデータの連続した領域を返します。
|
の形式で、明示されたメタデータの連続した領域を返します。
|
||||||
一方、書込みは、
|
一方、書込みは、
|
||||||
|
@ -58,7 +74,7 @@
|
||||||
.Pp
|
.Pp
|
||||||
拡張属性は、ヌルで終端された文字列を使用して名前付けされます。
|
拡張属性は、ヌルで終端された文字列を使用して名前付けされます。
|
||||||
名前は大文字と小文字を区別するかもしれませんし、しないかもしれませんが、
|
名前は大文字と小文字を区別するかもしれませんし、しないかもしれませんが、
|
||||||
これはファイルシステムのセマンティクスに依存します。
|
これは潜在的なファイルシステムのセマンティクスに依存します。
|
||||||
適切な vnode 拡張属性の呼び出しは、
|
適切な vnode 拡張属性の呼び出しは、
|
||||||
.Xr VOP_GETEXTATTR 9
|
.Xr VOP_GETEXTATTR 9
|
||||||
および
|
および
|
||||||
|
@ -66,9 +82,20 @@
|
||||||
です。
|
です。
|
||||||
.Sh 関連項目
|
.Sh 関連項目
|
||||||
.Xr VFS 9 ,
|
.Xr VFS 9 ,
|
||||||
|
.Xr VFS_EXTATTRCTL 9 ,
|
||||||
.Xr VOP_GETEXTATTR 9 ,
|
.Xr VOP_GETEXTATTR 9 ,
|
||||||
.Xr VOP_SETEXTATTR 9
|
.Xr VOP_SETEXTATTR 9
|
||||||
.Sh 作者
|
.Sh 作者
|
||||||
このマニュアルページは
|
このマニュアルページは
|
||||||
.An Robert Watson
|
.An Robert Watson
|
||||||
が書きました。
|
が書きました。
|
||||||
|
.Sh バグ
|
||||||
|
現在は拡張属性アクセスインタフェースは、属性のトータルの大きさを返せないか、
|
||||||
|
呼び出し側によって提供されたバッファ空間が全ての利用可能なデータを保持する
|
||||||
|
ためには不足であることを示します。
|
||||||
|
加えて、このインタフェースは現在の利用可能な属性の組を取り出す仕組みを
|
||||||
|
提供していません。既に、
|
||||||
|
.Dv NULL
|
||||||
|
の属性名を与えることで、渡されたファイルまたはディレクトリのための
|
||||||
|
定義された属性のリストをもたらすべきであると提案されていますが、
|
||||||
|
現在は実装されていません。
|
||||||
|
|
|
@ -22,28 +22,37 @@
|
||||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.\" %FreeBSD: src/share/man/man9/make_dev.9,v 1.2.2.3 2001/12/17 11:30:18 ru Exp %
|
.\" %FreeBSD: src/share/man/man9/make_dev.9,v 1.12 2002/02/11 01:21:29 dd Exp %
|
||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.Dd September 25, 1999
|
.Dd May 27, 2001
|
||||||
.Os
|
.Os
|
||||||
.Dt MAKE_DEV 9
|
.Dt MAKE_DEV 9
|
||||||
.Sh 名称
|
.Sh 名称
|
||||||
.Nm make_dev ,
|
.Nm make_dev ,
|
||||||
.Nm destroy_dev
|
.Nm make_dev_alias ,
|
||||||
.Nd 新しいデバイスのための dev_t の作成と削除
|
.Nm destroy_dev ,
|
||||||
|
.Nm dev_depends
|
||||||
|
.Nd デバイスのための
|
||||||
|
.Vt dev_t
|
||||||
|
および DEVFS 登録の管理
|
||||||
.Sh 書式
|
.Sh 書式
|
||||||
.In sys/types.h
|
.In sys/param.h
|
||||||
.In sys/conf.h
|
.In sys/conf.h
|
||||||
.Ft dev_t
|
.Ft dev_t
|
||||||
.Fn make_dev "struct cdevsw *cdevsw" "int minor" "uid_t uid" "gid_t gid" "int perms" "char *fmt" ...
|
.Fn make_dev "struct cdevsw *cdevsw" "int minor" "uid_t uid" "gid_t gid" "int perms" "const char *fmt" ...
|
||||||
|
.Ft dev_t
|
||||||
|
.Fn make_dev_alias "dev_t pdev" "const char *fmt" ...
|
||||||
.Ft void
|
.Ft void
|
||||||
.Fn destroy_dev "dev_t dev"
|
.Fn destroy_dev "dev_t dev"
|
||||||
|
.Ft void
|
||||||
|
.Fn dev_depends "dev_t pdev" "dev_t cdev"
|
||||||
.Sh 解説
|
.Sh 解説
|
||||||
.Fn make_dev
|
.Fn make_dev
|
||||||
関数は新しいデバイスのための
|
関数は新しいデバイスのための
|
||||||
.Fa dev_t
|
.Fa dev_t
|
||||||
構造体を作成します。
|
構造体を作成します。
|
||||||
|
DEVFS が利用可能の場合には、新しいデバイスの存在も通知されます。
|
||||||
そのデバイスは
|
そのデバイスは
|
||||||
.Va uid
|
.Va uid
|
||||||
によって所有され、
|
によって所有され、
|
||||||
|
@ -80,16 +89,49 @@
|
||||||
#endif
|
#endif
|
||||||
.Ed
|
.Ed
|
||||||
.Pp
|
.Pp
|
||||||
|
.Fn make_dev_alias
|
||||||
|
関数は
|
||||||
|
.Fn make_dev
|
||||||
|
から返された
|
||||||
|
.Ft dev_t
|
||||||
|
をとり、このデバイスのための別の名前 (別名) を作成します。
|
||||||
|
.Fn make_dev
|
||||||
|
の呼出しの前の
|
||||||
|
.Fn make_dev_alias
|
||||||
|
の呼出しは、誤りです。
|
||||||
|
.Pp
|
||||||
.Fn destroy_dev
|
.Fn destroy_dev
|
||||||
関数は、
|
関数は
|
||||||
.Fn make_dev
|
.Fn make_dev
|
||||||
から返された
|
から返された
|
||||||
.Fa dev_t
|
.Fa dev_t
|
||||||
をとり、そのデバイスの登録を削除します。
|
をとり、そのデバイスの登録を削除します。
|
||||||
|
.Fn make_dev_alias
|
||||||
|
で作成されたデバイスで
|
||||||
|
.Fn destroy_dev
|
||||||
|
を呼出さないでください。
|
||||||
|
.Pp
|
||||||
|
.Fn dev_depends
|
||||||
|
関数は 2 つのデバイス間の親子関係を確立します。
|
||||||
|
このネット効果は、親デバイスの
|
||||||
|
.Fn destroy_dev
|
||||||
|
は、もしあれば、結果としてその子デバイスの破壊に終わります。
|
||||||
|
1 つのデバイスは同時に親にも子にもなれ、
|
||||||
|
そのため、完全な階層構造を構築することが可能です。
|
||||||
.Sh 歴史
|
.Sh 歴史
|
||||||
.Fn make_dev
|
.Fn make_dev
|
||||||
および
|
および
|
||||||
.Fn destroy_dev
|
.Fn destroy_dev
|
||||||
関数は
|
関数は
|
||||||
.Fx 4.0
|
.Fx 4.0
|
||||||
で初めて登場しました。
|
ではじめて登場しました。
|
||||||
|
関数
|
||||||
|
.Fn make_dev_alias
|
||||||
|
は
|
||||||
|
.Fx 4.1
|
||||||
|
ではじめて登場しました。
|
||||||
|
関数
|
||||||
|
.Fn dev_depends
|
||||||
|
は
|
||||||
|
.Fx 5.0 .
|
||||||
|
ではじめて登場しました。
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.\" %FreeBSD: src/share/man/man9/mi_switch.9,v 1.7.2.4 2001/12/17 11:30:18 ru Exp %
|
.\" %FreeBSD: src/share/man/man9/mi_switch.9,v 1.16 2002/08/13 14:51:17 ru Exp %
|
||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.Dd November 24, 1996
|
.Dd November 24, 1996
|
||||||
|
@ -42,36 +42,40 @@
|
||||||
.Os
|
.Os
|
||||||
.Sh 名称
|
.Sh 名称
|
||||||
.Nm mi_switch ,
|
.Nm mi_switch ,
|
||||||
.Nm cpu_switch
|
.Nm cpu_switch ,
|
||||||
.Nd 別のプロセスコンテキストへのスイッチ
|
.Nm cpu_throw
|
||||||
|
.Nd 別のスレッドコンテキストへのスイッチ
|
||||||
.Sh 書式
|
.Sh 書式
|
||||||
.In sys/param.h
|
.In sys/param.h
|
||||||
.In sys/proc.h
|
.In sys/proc.h
|
||||||
.Ft void
|
.Ft void
|
||||||
.Fn mi_switch "void"
|
.Fn mi_switch "void"
|
||||||
.Ft void
|
.Ft void
|
||||||
.Fn cpu_switch "struct proc *p"
|
.Fn cpu_switch "void"
|
||||||
|
.Ft void
|
||||||
|
.Fn cpu_throw "void"
|
||||||
.Sh 解説
|
.Sh 解説
|
||||||
.Fn mi_switch
|
.Fn mi_switch
|
||||||
関数はマシン非依存なプロセスコンテキストスイッチの前処理を実装しています。
|
関数はマシン非依存なスレッドコンテキストスイッチの前処理を実装しています。
|
||||||
横取り不可能なカーネルモード実行の方針の結果として、カーネル内の数少ない
|
横取り不可能なカーネルモード実行の方針の結果として、カーネル内の数少ない
|
||||||
区別された場所からのみ呼び出されます。
|
区別された場所からのみ呼び出されます。
|
||||||
3 つの主な
|
いくつかの主な
|
||||||
.Nm
|
.Nm
|
||||||
の使用は以下に挙げられます。
|
の使用は以下に挙げられます。
|
||||||
.Bl -enum -offset indent
|
.Bl -enum -offset indent
|
||||||
.It
|
.It
|
||||||
.Xr sleep 9
|
.Xr sleep 9 ,
|
||||||
および
|
|
||||||
.Xr tsleep 9
|
.Xr tsleep 9
|
||||||
|
および
|
||||||
|
.Xr msleep
|
||||||
の中から、あるリソースが利用可能になるのを待つために
|
の中から、あるリソースが利用可能になるのを待つために
|
||||||
現在のプロセスが自発的に CPU を放棄するとき。
|
現在のスレッドが自発的に CPU を放棄するとき。
|
||||||
.It
|
.It
|
||||||
トラップ (例えば、システムコール、デバイス割り込み) の取り扱いの後で、
|
トラップ (例えば、システムコール、デバイス割り込み) の取り扱いの後で、
|
||||||
カーネルがユーザモード実行のために戻る準備のとき。
|
カーネルがユーザモード実行のために戻る準備のとき。
|
||||||
通常この場合は、現在のプロセスのシグナル配置の中の変化の検出の後で
|
通常この場合は、現在のプロセスのシグナル配置の中の変化の検出の後で
|
||||||
マシン依存のトラップハンドリングコードによって取り扱われるか、
|
マシン依存のトラップハンドリングコードによって取り扱われるか、
|
||||||
より高い優先度のプロセスが実行可能になったかもしれないときです。
|
より高い優先度のスレッドが実行可能になったかもしれないときです。
|
||||||
後者のイベントはマシン定義の
|
後者のイベントはマシン定義の
|
||||||
.Fn need_resched
|
.Fn need_resched
|
||||||
の呼び出しによるマシン非依存のスケジューリングルーチンによって伝達されます。
|
の呼び出しによるマシン非依存のスケジューリングルーチンによって伝達されます。
|
||||||
|
@ -79,11 +83,21 @@
|
||||||
シグナルハンドラコード
|
シグナルハンドラコード
|
||||||
.Xr ( issignal 9
|
.Xr ( issignal 9
|
||||||
を参照) の中で、プロセスを停止させるシグナルが届けられた場合。
|
を参照) の中で、プロセスを停止させるシグナルが届けられた場合。
|
||||||
|
.It
|
||||||
|
スレッドが
|
||||||
|
.Xr thread_exit 9
|
||||||
|
の中で終了し、プロセッサの制御が次の実行可能のスレッドに渡されることが
|
||||||
|
可能なとき。
|
||||||
|
.It
|
||||||
|
.Xr thread_suspend_check 9
|
||||||
|
中で、全体としてのプロセスの停止状態のために、
|
||||||
|
スレッドが実行を停止する必要がある
|
||||||
|
場合。
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
.Fn mi_switch
|
.Fn mi_switch
|
||||||
はプロセス構造体の中に現在のプロセスが実行された時間量を記録して、
|
はプロセス構造体の中に現在のプロセスが実行された時間量を記録して、
|
||||||
そのプロセスに割当てられている CPU の時間リミット
|
そのスレッドに割当てられている CPU の時間リミット
|
||||||
.Xr ( getrlimit 2
|
.Xr ( getrlimit 2
|
||||||
を参照) に照らしてこの値を検査します。
|
を参照) に照らしてこの値を検査します。
|
||||||
ソフトリミットの超過はそのプロセスに
|
ソフトリミットの超過はそのプロセスに
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
* CSRG の KNF (Kernel Normal Form, カーネル標準書式) に基づいています。
|
* CSRG の KNF (Kernel Normal Form, カーネル標準書式) に基づいています。
|
||||||
*
|
*
|
||||||
* @(#)style 1.14 (Berkeley) 4/28/95
|
* @(#)style 1.14 (Berkeley) 4/28/95
|
||||||