日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
MEM(4) FreeBSD カーネルインタフェースマニュアル MEM(4) 名称 mem, kmem -- メモリファイル 書式 device mem 解説 特殊ファイル /dev/mem は、コンピュータの物理メモリへのインタフェースで す。このファイルのバイトオフセットは、物理メモリアドレスとして解釈されま す。このファイルを読み書きすることは、メモリ自体を読み書きすることと同等 です。/dev/mem の範囲内のオフセットだけが許可されます。 カーネル仮想記憶は、/dev/mem と同じ方法でインタフェース /dev/kmem を通し てアクセスされます。現在メモリにマップされているカーネルの仮想アドレスだ けが許可されます。 ISA において、I/O メモリ空間は、物理アドレス 0x000a0000 から始まって 0x00100000 まで達します。現在プロセスのためのプロセスごとのデータサイズ は、UPAGES であり、仮想アドレス 0xf0000000 で終わります。 IOCTL インタフェース アドレスプロパティ MEM_EXTRACT_PADDR ioctl は、呼び出しているプロセスのアドレス空間の与えら れた仮想アドレスの物理アドレスと NUMA ドメインを検索するために使用するこ とができます。要求は、次のように記述されます: struct mem_extract { uint64_t me_vaddr; /* input */ uint64_t me_paddr; /* output */ int me_domain; /* output */ int me_state; /* output */ }; ioctl は、アドレスが有効でないなら、エラーを返します。MEM_EXTRACT_PADDR によって返された情報は、ioctl 呼び出しが返る時間によって期限切れとなって いるかもしれません。特有に、並列システムコール、ページフォルト、またはシ ステムページの再利用活動は、ioctl 呼び出しが返る前に、仮想ページをアン マップするか、または裏打ちされた物理ページを置き換えるかもしれません。 mlock(2) によってロックされているような固定 (wired) ページは、システムに よって再利用されません。 me_state フィールドは、仮想ページの状態に関する情報を提供しています: ME_STATE_INVALID 仮想アドレスが無効です。 ME_STATE_VALID 仮想アドレスは、有効ですが、ioctl 呼び出し時点でマッピングされて いません。 ME_STATE_MAPPED 仮想アドレスは、物理ページマッピングに対応しており、me_paddr と me_domain フィールドは、有効です。 メモリ範囲 いくつかのアーキテクチャによって、属性は、物理メモリの範囲に関連付けする ことができます。/dev/mem で実行される ioctl() 呼び出しによって、これらの 属性を操作することができます。宣言とデータタイプは、<sys/memrange.h> に存 在します。 特有の属性とプログラム可能な範囲の数は、アーキテクチャの間で異なります。 サポートしている属性の一式は、次の通りです: MDF_UNCACHEABLE 範囲は、キャッシュされていません。 MDF_WRITECOMBINE 範囲への書き込みは、結合されているか、または異常な実行です。 MDF_WRITETHROUGH 範囲への書き込みは、同期して行なわれました。 MDF_WRITEBACK 範囲への書き込みは、非同期に行なわれました。 MDF_WRITEPROTECT 範囲に書き込むことができません。 メモリ範囲は、struct mem_range_desc で説明されています: struct mem_range_desc { uint64_t mr_base; /* 物理基本アドレス */ uint64_t mr_len; /* 範囲の物理長 */ int mr_flags; /* 範囲の属性 */ char mr_owner[8]; }; 上にリストされた範囲属性に加えて、次のフラグも、mr_flags フィールドに設定 されます: MDF_FIXBASE 範囲のベースアドレスを変更することができません。 MDF_FIXLEN 範囲の長さを変更することができません。 MDF_FIRMWARE 範囲は、システムファームウェアによって確立されたと信じられます。 MDF_ACTIVE 範囲は、現在アクティブです。 MDF_BOGUS 範囲が無効であるか、そうでなければ、誤りがあると信じています。 MDF_FIXACTIVE 範囲を無効にすることができません。 MDF_BUSY 範囲は、現在、別のプロセスで所有され、変更することができません。 操作は、struct mem_range_op を使用して実行されます: struct mem_range_op { struct mem_range_desc *mo_desc; int mo_arg[2]; }; MEMRANGE_GET ioctl は、現在のメモリ範囲属性を検索して取り出すために使用さ れます。mo_arg[0] が 0 に設定されるなら、それは、メモリ範囲記述子の合計数 で更新されます。0 を越えるなら、mo_desc の配列は、対応する記述子の構造体 の数か、または最大のどちらか少ないほうで、満たされます。 MEMRANGE_SET ioctl は、メモリ範囲属性を追加する、変更する、削除するために 使用されます。MDF_FIXACTIVE フラグがある範囲は、削除されません。MDF_BUSY フラグがある範囲は、削除または更新もされません。 mo_arg[0] は、存在するか、または新しい範囲を確立して更新するために MEMRANGE_SET_UPDATE に設定されるか、または範囲を削除するために MEMRANGE_SET_REMOVE に設定されるべきです。 ライブカーネルダンプ MEM_KERNELDUMP ioctl は、実行しているシステムに対してカーネルダンプを開始 し、その内容は、プロセス所有のファイル記述子に書き込まれます。結果のダン プ出力は、minidump 形式です。要求は、次のように記述されます。 struct mem_livedump_arg { int fd; /* 入力 */ int flags /* 入力 */ uint8_t compression /* 入力 */ }; fd フィールドは、ファイル記述子を渡すために使用されます。 flags フィールドは、現在未使用であり、0 に設定されなければなりません。 compression フィールドは、ダンプ出力に適用される要求される圧縮を指定する ために使用することができます。サポートされる値は、<sys/kerneldump.h> で定 義されています。すなわち、KERNELDUMP_COMP_NONE, KERNELDUMP_COMP_GZIP また は KERNELDUMP_COMP_ZSTD です。 実行しているシステムに対して取られるカーネルダンプは、ダンプ手続きと同時 にメモリの割り付け、解放、または変更のためにカーネルデータ構造の一貫性は ありません。したがって、結果のコアダンプは、使用可能であることは保証され ません。負荷がかかっているシステムは、より一貫性のない結果が得られる可能 性が高くなります。それにもかかわらず、ライブカーネルダンプは、デッドロッ クのような特定のタイプのカーネルのバグのオフラインデバッグ、またはシステ ムの状態の特定の部分を検査するために役に立てることができます。 戻り値 MEM_EXTRACT_PADDR MEM_EXTRACT_PADDR ioctl は、常に 0 の値を返します。 MEMRANGE_GET/MEMRANGE_SET [EOPNOTSUPP] メモリ範囲の操作が、このアーキテクチャでサポートされて いません。 [ENXIO] メモリ範囲の記述子が、利用可能ではありません (例えば、 ファームウェアが、いずれも有効ではありませんでした)。 [EINVAL] 引数として供給されたメモリの範囲が、無効であるか、また はこのアーキテクチャによってサポートされなかった方法で 別の範囲に重なります。 [EBUSY] 範囲がビジーであるので、範囲を削除するか、または更新す る試みが、失敗しました。 [ENOSPC] 新しい範囲を作成する試みが、ハードウェアのリソース (例 えば、記述子スロット) が不足したために失敗しました。 [ENOENT] 範囲が、供給された記述子 base/length に一致しないの で、範囲を削除する試みが、失敗しました。 [EPERM] 範囲が永久に有効にされるので、範囲を削除する試みが、失 敗しました。 MEM_KERNELDUMP [EOPNOTSUPP] カーネル minidump がこのアーキテクチャで、サポートされ ていません。 [EPERM] 呼び出したスレッドに ? ないので、カーネルダンプを開始 する試みが失敗しました。 [EBADF] 提供されたファイル記述子が無効であるか、または書き込み パーミッションがありません。 [EBUSY] すでに進行中であるので、カーネルダンプを開始しようとす る試みが、失敗しました。 [EINVAL] 無効な値またはサポートされていない値が flags に指定さ れました。 [EINVAL] 無効であるか、またはサポートされていない圧縮タイプが、 指定されました。PRIV_KMEM_READ 特権。 関連ファイル /dev/mem /dev/kmem 関連項目 kvm(3), memcontrol(8) 歴史 mem と kmem ファイルは、Version 6 AT&T UNIX で登場しました。メモリ範囲属 性のための ioctl インタフェースは、FreeBSD 3.2 で追加されました。 バグ ビジー範囲属性は、まだ正しく管理されていません。 このデバイスは、kvm(3) のすべてのユーザが操作するために必要です。 FreeBSD 13.2 March 11, 2022 FreeBSD 13.2