1 .\" Hey Emacs! This file is -*- nroff -*- source.
3 .\" Copyright (c) 1996 Tom Bjorkholm <tomb@mydata.se>
5 .\" This is free documentation; you can redistribute it and/or
6 .\" modify it under the terms of the GNU General Public License as
7 .\" published by the Free Software Foundation; either version 2 of
8 .\" the License, or (at your option) any later version.
11 .\" and "executables" are to be interpreted as the output of any
12 .\" document formatting or typesetting system, including
13 .\" intermediate and printed output.
15 .\" This manual is distributed in the hope that it will be useful,
16 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
17 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 .\" GNU General Public License for more details.
20 .\" You should have received a copy of the GNU General Public
21 .\" License along with this manual; if not, write to the Free
22 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
25 .\" 1996-04-11 Tom Bjorkholm <tomb@mydata.se>
26 .\" First version written (1.3.86)
27 .\" 1996-04-12 Tom Bjorkholm <tomb@mydata.se>
28 .\" Update for Linux 1.3.87 and later
29 .\" 2005-10-11 mtk: Added NOTES for MREMAP_FIXED; revised EINVAL text.
31 .\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
32 .\" all rights reserved.
33 .\" Translated 1997-02-23, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
34 .\" Updated 2002-11-26, Kentaro Shirakata <argrath@ub32.org>
35 .\" Updated 2005-10-09, Kentaro Shirakata <argrath@ub32.org>
36 .\" Updated 2006-04-16, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.28
38 .\"WORD: virtual memory 仮想メモリ
41 .\"WORD: address space アドレス空間
42 .\"WORD: page align ページ境界
45 .\"WORD: segment セグメント
46 .\"WORD: real memory 実メモリ
47 .\"WORD: segmentation violation セグメンテーション侵害
48 .\"WORD: segmentation fault セグメンテーション違反
53 .TH MREMAP 2 2010-06-10 "Linux" "Linux Programmer's Manual"
55 mremap \- 仮想メモリ・アドレスを再マッピングする
58 .BR "#define _GNU_SOURCE" " /* feature_test_macros(7) 参照 */"
60 .B #include <sys/mman.h>
62 .BI "void *mremap(void *" old_address ", size_t " old_size ,
63 .BI " size_t " new_size ", int " flags ", ... /* void *" new_address " */);"
67 は既存のメモリ・マッピングの拡張 (または縮小) を行う。
69 (\fIflags\fP 引き数と利用可能な仮想アドレス空間によって決まる)。
71 \fIold_address\fP は拡張 (または縮小) しようとする仮想メモリ・ブロック
72 の元のアドレスである。\fIold_address\fP はページ境界に合っていなければ
73 ならない点に注意すること。\fIold_size\fP は元の仮想メモリ・ブロックの
75 \fInew_size\fP は要求する変更後の仮想メモリ・ブロックのサイズである。
82 Linux ではメモリはページに分割される。ユーザー・プロセスは (一つまたは)
84 それぞれの仮想メモリセグメントは一つ以上の実メモリ・ページ
85 にマッピングされている (マッピング情報はページ・テーブルで管理される)。
86 仮想メモリセグメントにはセグメント毎の保護 (アクセス権) が設定されており、
87 メモリが不正にアクセスされた場合 (例えば読み込み専用のセグメントに
88 書き込んだ場合)、セグメンテーション侵害 (segmentation violation) を
89 引き起こす。また、セグメント外の仮想メモリにアクセスした場合にも
93 は Linux のページ・テーブル方式を使用する。
95 は仮想アドレスとメモリ・ページのマッピングを変更する。これは非常に効率的な
99 \fIflags\fP ビットマスク引数は 0 または以下のフラグを含む:
102 デフォルトでは、現在の位置にマッピングを拡張するための
106 このフラグが指定されると、カーネルは必要があればマッピングを
107 新しい仮想アドレスに再配置することができる
108 マッピングが再配置されると、古いマッピング位置への絶対ポインタは
109 無効になる (マッピングの開始アドレスからの相対オフセットは有効のままである)。
111 .BR MREMAP_FIXED " (Linux 2.3.31 以降)"
120 .I "void *new_address"
121 を受け取り、この引数はマッピングが移動されるべきアドレスを指定する。
122 このアドレスはページ境界に合っていなければならない。
126 で指定されるアドレス範囲に過去のマッピングがあった場合、
127 そのマッピングはアンマップされる (unmapped)。
138 や同様のもので) ロックされている場合、セグメントのサイズが変わったり
139 再配置されたりした時にロックも維持される。
140 その結果、プロセスによってロックされるメモリの量は変化する。
144 は新しい仮想メモリ領域へのポインタを返す。
147 (すなわち \fI(void\ *)\ \-1\fP) が返され、
148 \fIerrno\fP が適切に設定される。
152 呼び出し元がロックされているメモリセグメントを拡張しようとしたが、
154 リソース制限を越えずにこれを行うことができない。
157 「セグメンテーション違反(segmentation fault)」
158 \fIold_address\fP から \fIold_address\fP+\fIold_size\fP の
159 範囲のアドレスのどれかがこのプロセスにおいて不正な仮想メモリ・アドレスである。
160 たとえ要求したアドレス空間全体を含むようなマッピングがあったとしても、
168 たいていは \fIold_address\fP がページ境界に
189 で指定される古いアドレス範囲と重なっている;
196 現在の仮想アドレスではメモリ領域が拡張できず、
198 フラグが \fIflags\fP に設定されていない。
199 または十分な (仮想) メモリが存在しない。
201 このコールは Linux 特有であり、移植を意図したプログラムで
203 .\" 4.2BSD には (実際に実装されていたわけではないが)
204 .\" 全く異った方式 (semantics) による
207 .\" FIXME perhaps remove above statement about 4.2BSD.
209 バージョン 2.4 より前の glibc では、
226 ページ分割されたメモリについてもっと詳しく知りたいならば
227 あなたの好みの OS の教科書を参照すること。
228 (\fIModern Operating Systems\fP by Andrew S. Tannenbaum,
229 \fIInside Linux\fP by Randolf Bentson,
230 \fIThe Design of the UNIX Operating System\fP by Maurice J. Bach.)