[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [RFR] man://manpages-de/mremap.2



* Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> [121126 20:09]:
> > > #. type: Plain text
> > > msgid ""
> > > "This flag serves a similar purpose to the B<MAP_FIXED> flag of "
> > > "B<mmap>(2). If this flag is specified, then B<mremap>() accepts
> a fifth "
> > > "argument, I<void *new_address>, which specifies a page-aligned
> address to "
> > > "which the mapping must be moved. Any previous mapping at the address "
> > > "range specified by I<new_address> and I<new_size> is unmapped. If "
> > > "B<MREMAP_FIXED> is specified, then B<MREMAP_MAYMOVE> must also be "
> > > "specified."
> > > msgstr ""
> > > "Dieses Flag dient einem ähnlichen Zweck wie das Flag
> B<MAP_FIXED> von "
> > > "B<mmap>(2).
> > linguee findet für "serves a similar purpose" unter anderem "hat die
> > gleiche Funktion wie", was ich hier recht passend finde (ansonsten noch
> > "geht in die gleiche Richtung wie", was hier nicht so gut passt).
>
> Zumindest wenn ich nur die eine Stelle in mmap(2) betrachte, sehe ich die
> gleiche Funktion nicht.
>
> MAP_FIXED
> Don't interpret addr as a hint: place the mapping at exactly that
> address. addr must be a multiple of the page size. If the memory
> region specified by addr and len overlaps pages of any existing map‐
> ping(s), then the overlapped part of the existing mapping(s) will be
> discarded. If the specified address cannot be used, mmap() will
> fail. Because requiring a fixed address for a mapping is less por‐
> table, the use of this option is discouraged.

Es ist in sofern die gleiche Funktion, als man sich mit MAP_FIXED
in beiden Fällen aussuchen kann, wo der Speicherbereich eingeblendet
wird. Es ist insofern anders, als es bei mmap schon ein Argument gibt,
dass dann die Bedeutung der unbedingt gewünschten Adresse bekommt,
wohingegen bei mremap ein neues Argument dazukommt.

>  Mapping -> Abbildung, Einblendung, ??? ???
> # FIXME: Wortwahl im Englischen? Schwer verst??ndlich, was virtuell und real ist.
> # FIXME: Wortwahl der ??bersetzung
> #
> #  Wenn ich es richtig verstanden habe: Der physikalische Speicher ist verstreut
> #  und wird zum zusammenh??ngenden virtuellen Adressraum zusammengefasst.

Virtueller Adressraum sind die Adressen, die der Prozess sieht auf die
er zugreifen kann.
Dahinter verbirgt sich entweder irgendein physikalischer
Speicher, ein Stück einer Datei von der Platte, ein Stück der
Auslagerungspartition oder sonst irgendwas.

> #  - Vergr????erung des virtuellen Speicherbereichs am Ende:
> #    Falls es nicht genug Speicher im Anschluss an das betreffende physikalische
> #    Segment gibt, muss dieses verlegt werden. Die virtuelle Anfangsadresse
> #    bleibt gleich, enspricht aber einer anderen physikalischen Adresse.

Die physikalischen Segmente sind völlig unerheblich. Es muss nichtmal
welche geben.

> #  - Vergr????erung des virtuellen Speicherbereichs in der Mitte:
> #    Prinzipiell wie oben, aber der anschlie??ende virtuelle Speicher muss um
> #    das angeforderte Delta verschoben werden.

Im virtuellen Adressraum kannst du nicht so einfach was verschieben, als
dann die ganzen Zeiger des Prozesses nicht mehr tun.

> #  Dann w??re f??r mich eine sinnvolle Beschreibung:
> #
> # "Per Voreinstellung schl??gt B<mremap>() fehl, wenn an der aktuellen "
> # "physikalischen Adresse nicht ausreichend Platz vorhanden ist, um den "
> # "Speicherplatz zu vergr????ern.

Das Problem ist nicht der physikalische Speicher. das Problem ist der
virtuelle Addressraum (was wo im physikalischen Speicher liegt und ob es
überhaupt im Speicher liegt, kann der Kernel jederzeit ändern, ohne das
der Prozess was mitbekommt. Das Problem ist wenn an den virtuellen
Adressen nach dem aktuellen eingeblendeten Bereich schon etwas anderes
eingeblendet ist.

> # Wird dieses Flag angegeben, darf der Kernel "
> # "den physikalischen Speicher an eine neue Adresse verlegen, falls das "
> # "erforderlich ist.

Der physikalische Speicher wird durch mremap nicht verändert, nur wo er
eingeblendet wird. Darum ist es ja gerade so praktisch.

> # Nachdem der physikalische Speicher verlegt wurde, werden "
> # "absolute Zeiger zum alten Speicherort ung??ltig.

Zeiger in den physikalischen Adressraum gibt es nicht. Alle Zeiger
beziehen sich auf virtuelle Adressen.

> msgid ""
> "By default, if there is not sufficient space to expand a mapping at its "
> "current location, then B<mremap>()  fails.  If this flag is specified, then "
> "the kernel is permitted to relocate the mapping to a new virtual address, if "
> "necessary.  If the mapping is relocated, then absolute pointers into the old "
> "mapping location become invalid (offsets relative to the starting address of "
> "the mapping should be employed)."
> msgstr ""
> "Per Voreinstellung schl??gt B<mremap>() fehl, wenn an der aktuellen Position "
> "nicht ausreichend Platz vorhanden ist, um den Speicherplatz zu vergr????ern. "
> "Wird dieses Flag angegeben, darf der Kernel die Speichereinblendung an eine "
> "neue virtuelle Adresse verlegen,

Wie wäre es statt dessen mit "darf der Kernel verändern, an welcher
virtuellen Addresse eingeblendet wird".

> falls das erforderlich ist. Falls die "
> "Abbildung verlegt wurde,

Plötzlich "Abbildung". Lieber auch hier Einblendung.

> werden absolute Zeiger zum Ort der alten Abbildung "
> "ung??ltig. (Es sollten Offsets relativ zum Anfang des Speicherbereichs "
> "verwendet werden.)"

werden Zeiger in die alte Einblendung ungültig. (Es empfiehlt sich,
Offsets relativ zum Anfang des Speicherbereichs zu verwenden).

> # FIXME: ??bersetzung umformulieren ?? Gr????e ist schon durch Menge ersetzt.
> #. type: Plain text
> msgid ""
> "If the memory segment specified by I<old_address> and I<old_size> is locked "
> "(using B<mlock>(2)  or similar), then this lock is maintained when the "
> "segment is resized and/or relocated.  As a consequence, the amount of memory "
> "locked by the process may change."
> msgstr ""
> "Falls das von I<old_address> und I<old_size> angegebene Speichersegment "
> "gesperrt ist (mittels B<mlock>(2) oder etwas ??hnlichem), wird diese Sperre "
> "aufrecht erhalten, wenn das Speichersegment verschoben oder seine Gr????e "
> "ge??ndert wird. Als Folge davon kann sich die Menge des durch einen Prozess "
> "gesperrten Speichers ??ndern."

gesperrt klingt recht merkwürdig. evtl zu "gegen Auslagern gesperrt
ist" bei der ersten Verwendung ausbauen?

> #. type: Plain text
> msgid ""
> "\"Segmentation fault.\" Some address in the range I<old_address> to "
> "I<old_address>+I<old_size> is an invalid virtual memory address for this "
> "process.  You can also get B<EFAULT> even if there exist mappings that cover "
> "the whole address space requested, but those mappings are of different types."
> msgstr ""
> "??Segmentation fault.?? Eine Adresse im Bereich von I<old_address> bis "
> "I<old_address>+I<old_size> ist eine unzul??ssige virtuelle Speicheradresse "
> "f??r diesen Prozess. Sie k??nnen sogar B<EFAULT> erhalten, wenn Einblendungen "
> "existieren, die den gesamten angeforderten Adressraum abdecken, aber von "
> "unterschiedlichem Typ sind."

s/sogar/sogar dann/ um klar zu machen, dass sich das auf das wenn und
nicht auf das EFAULT bezieht.

        Bernhard R. Link


Reply to: