File: mremap.2

package info (click to toggle)
manpages-de 0.1-7
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 2,448 kB
  • ctags: 10
  • sloc: makefile: 90
file content (114 lines) | stat: -rw-r--r-- 4,668 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (c) 1996 Tom Bjorkholm <tomb@mydata.se>
.\"
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, write to the Free
.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
.\" USA.
.\"
.\" 1996-04-11 Tom Bjorkholm <tomb@mydata.se>
.\"            First version written (1.3.86)
.\" 1996-04-12 Tom Bjorkholm <tomb@mydata.se>
.\"            Update for Linux 1.3.87 and later
.\" Translated to German Tue Jun 04 15:30:00 1996 by Patrick Rother
.\"                                                  (krd@burn.rhein-ruhr.de)
.\"
.TH MREMAP 2 "4. Juni 1996" "Linux 1.3.87" "Linux Programmierhandbuch"
.SH BEZEICHNUNG
mremap \- verlege eine virtuelle Speicheradresse
.SH BERSICHT
.B #include <unistd.h>
.br
.B #include <sys/mman.h>
.sp
.BI "void * mremap(void * " old_address ", size_t " old_size
.BI ", size_t " new_size ", unsigned long " flags );
.fi
.SH BESCHREIBUNG
\fBmremap\fR erweitert (oder verkleinert) einen bestehenden Speicherbereich,
potentiell durch gleichzeitiges Verschieben (bestimmt durch das Argument 
\fIflags\fR und den zur Verfgung stehenden virtuellen Speicherplatz).

\fIold_address\fR ist die alte Adresse des virtuellen Speicherblocks den
man vergrern (oder verkleinern) mchte.  Beachten Sie, da
\fIold_address\fR an die Speicherseiten ausgerichtet sein mu.  \fIold_size\fR ist 
die alte Gre des virtuellen Speicherblocks.  \fInew_size\fR ist die
angeforderte Gre des virtuellen Speicherblocks nach der Grennderung.

Das Argument \fIflags\fR ist ein Bitmuster von Flags.

Unter Linux ist der Speicher in Seiten eingeteilt.  Ein Benutzerprozes^
hat (eine oder) mehrere lineare virtuelle Speichersegmente.  Jedes virtuelle
Speichersegment hat ein oder mehr Verknpfungen zu realen Speicherseiten
(in der Seitentabelle).  Jedes virtuelle Speichersegment hat seine eigenen
Schutz (Zugriffsrechte), welcher eine Segmentverletzung (Segmentation 
violation) verursachen kann wenn auf den Speicher unkorrekt zugegriffen wird.
Zugreifen auf virtuellen Speicher auerhalb der Segmente verursacht auch 
eine Segmentverletzung.

\fBmremap\fR benutzt das Linux Seitentabellenschema.  \fBmremap\fR ndert 
die Verknpfung zwischen virtuellen Adressen und Speicherseiten.  Dies kann
benutzt werden im ein sehr effizientes \fBrealloc\fR zu implementieren.

.SH FLAGS
.TP
.B MREMAP_MAYMOVE
zeigt an ob die Operation fehlschlagen oder die virtuelle Adresse ndern 
soll, wenn die Grennderung nicht durchgefhrt werden kann bei der 
aktuellen virtuellen Adresse.
.SH RCKGABEWERT
Bei Erfolg gibt \fBmremap\fR einen Pointer auf den neuen virtuellen 
Speicherbereich zurck.
Im FEhlerfall wird \-1 zurckgegeben und \fIerrno\fR entsprechend gesetzt.

.SH FEHLER
.TP
.B EINVAL
Ein ungltiges Argument wurde angegeben.  Sehr wahrscheinlich war 
.I old_address
nicht an der Speicherseite ausgerichtet.
.TP
.B EFAULT
"Segmentation fault."  Eine Adresse im Bereich von \fIold_address\fR bis
\fIold_address\fR+\fIold_size\fR ist eine ungltige Speicheradresse fr diesen
Prozes^.
Man erhlt sogar EFAULT, wenn Verknpfungen existieren, die den gesammten
angeforderten Adresseraum abdecken, aber von unterschiedlichem Typ sind.
.TP
.B EAGAIN
Das Speichersegment ist gesperrt und kann nicht neu verknpft werden.
.TP
.B ENOMEM
Der Speicherbereich kann an der aktuellen virtuellen Adresse nicht erweitert
werden, und das Flag \fIMREMAP_MAYMOVE\fR ist nicht gesetzt in \fIflags\fR. 
Oder es gibt nicht genug freien virtuellen Speicher.
.PT
.SH SIEHE AUCH
.BR getpagesize (2),
.BR realloc (3),
.BR malloc (3),
.BR brk (2),
.BR sbrk (2),
.BR mmap (2)
.P
Ihr Lieblings-Betriebssystem-Buch fr mehr Informationen ber paged memory.
(\fIModern Operating Systems\fR von Andrew S. Tannenbaum, 
\fIInside Linux\fR von Randolf Bentson,
\fIThe Design of the UNIX Operating System\fR von Maurice J. Bach.)