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

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



Hallo Bernhard,

ich freue mich über die Rückmeldungen aus den Reihen jenseits der von mir
als "die üblichen Verdächtigen" Empfundenen (Chris, Erik & Erik, Helge,
Holger). So schmoren wir nicht im eigenen Saft.

Wir brauchen sicher noch eine weitere Iterationsrunde.

Als Anhang gibt es noch einmal die modifizierten und kommentierten Stellen.
Die sind immerhin ein Drittel kürzer als die gesamte Datei :-)

Die kommentierten Anmerkungen:

******************************************************************************

> > # s/abbildung/einblendung/ ?
> > #. type: Plain text
> > msgid ""
> > "B<mremap>() expands (or shrinks) an existing memory mapping, potentially " > > "moving it at the same time (controlled by the I<flags> argument and the "
> > "available virtual address space)."
> > msgstr ""
> > "B<mremap>() vergrößert (oder verkleinert) eine bestehende "
> > "Speicherabbildung, potenziell durch gleichzeitiges Verschieben (gesteuert " > > "durch das Argument I<flags> und den zur Verfügung stehenden virtuellen "
> > "Speicherplatz)."
> Hat mmap schon eine Übersetzung? Memory mapping sollte gleich wie dort
> übersetzt sein. Und falls es eine hat, hoffe ich, dass die nicht
> Speicherabbildung" ist.

> Ich persönlich tendiere zu "Einblendung".

> linguee.de findet: Speicher-Einblendung, Speicheraufteilung, Mapping,
> gemappter Speicher, Speicher-Anordnung, Speicher-Zuordnung.

Ich habe mich bislang bei leo.org bedient und finde das Wort dort nicht direkt. Wikipedia (1) spricht für auch für Einblendung, Informationen zu manpages-de
findest Du unter (2) und (3). Jetzt steht da Einblendung.

Zu mmap(2) kannst Du den eingerückten Absatz überspringen. Es gibt eine total
veraltete Übersetzung eines Originals aus dem Jahr 1996. Seitdem ist das
Original um gut das Zweieinhalbfache angewachsen.

Ich konnte nicht wiederstehen, aus dem Text der Version 0.6 zu kopieren:

.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl)
.\"
.\" [nicht zitierte Lizenzbestimmungen
.\"
.\" Translated into german by Martin Schulze
.\" (joey@finlandia.infodrom.north.de)
.\"
.TH MMAP 2 "15. Juni 1996" "Linux 1.3.86" "Systemaufrufe"


> > #. type: Plain text
> > msgid ""
> > "In Linux the memory is divided into pages. A user process has (one or) "
> > "several linear virtual memory segments. Each virtual memory segment "
> > "has one or more mappings to real memory pages (in the page table). Each " > > "virtual memory segment has its own protection (access rights), which may "
> > "cause a segmentation violation if the memory is accessed incorrectly "
> > "(e.g., writing to a read-only segment). Accessing virtual memory outside "
> > "of the segments will also cause a segmentation violation."
> > msgstr ""
> > "Unter Linux ist der Speicher in Seiten eingeteilt. Ein Benutzerprozess " > > "verfügt über (ein oder) mehrere lineare virtuelle Speichersegmente. Jedes "
> s/lineare/zusamenhängende/
Diese und die folgenden Anmerkungen habe ich modifiziert übernommen.


> > #. type: Plain text
> > msgid ""
> > "B<mremap>() uses the Linux page table scheme. B<mremap>() changes the " > > "mapping between virtual addresses and memory pages. This can be used to "
> > "implement a very efficient B<realloc>(3)."
> > msgstr ""
> > "B<mremap>() benutzt das Linux-Schema für »page tables« (Seitentabellen). "
> > "B<mremap>() ändert die Verknüpfung zwischen virtuellen Adressen und "
> > "Speicherseiten.
> Ich denke das ist verbesserungswürdig. Ich habe aber keine Ahnung,
> wie...

Erst einmal die Klammer weglassen (s.o). Sachlich ist es wohl:
"B<mremap>() blendet Speicherseiten an anderen virtuellen Adressen ein. "
Oder gemäß der Bezeichnung: "verlegt eine virtuelle Speicheradresse"


#. type: TP
#, no-wrap
msgid "B<MREMAP_MAYMOVE>"
msgstr "B<MREMAP_MAYMOVE>"

Hier hast Du etliches zum folgenden Absatz angemerkt. Ich habe noch nichts
geändert, aber den Sachverhalt ausführlich kommentiert und einen Vorschlag
für eine neue Formulierung gemacht.


> > #. 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. Aber eine andere Formulierung für page-aligned:
addr must be a multiple of the page size.

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.


> > #. type: Plain text
> > msgid ""
> > "An invalid argument was given. Possible causes are: I<old_address> was " > > "not page aligned; a value other than B<MREMAP_MAYMOVE> or B<MREMAP_FIXED> "
> > "was specified in I<flags>; I<new_size> was zero; I<new_size> or "
> > "I<new_address> was invalid; or the new address range specified by "
> > "I<new_address> and I<new_size> overlapped the old address range specified "
> > "by I<old_address> and I<old_size>; or B<MREMAP_FIXED> was specified "
> > "without also specifying B<MREMAP_MAYMOVE>."
> > msgstr ""
> > "Es wurde ein ungültiges Argument angegeben. Mögliche Gründe sind: "
> s/ungültig/unzulässig/ (ungültig ist zwar eine recht häufige
> Fehlübersetzung in diesem Kontext, aber...).
> Und ich denke das sind "Ursachen" und nicht "Gründe" in diesem Fall.

Zur Übersetzung von (un)valid schreibe ich noch eine Mail. Weil es so gerne
falsch gemacht wird, sollte es in die Wortliste. Und die abschließende
Formulierung hat auch Einfluss auf viele Übersetzungen der Manpages:

$ for i in `seq 8`; do grep valid man$i/*.$i.po; done | wc -l
221
$ for i in `seq 8`; do grep invalid man$i/*.$i.po; done | wc -l
90

Zu Grund und Ursache gibt Dir der Duden recht, die Bedeutungen von Grund, die sich mit Ursache überschneiden, kommen erst recht spät. Ich habe aber trotzdem
erst einmal als Übersetzung Fehler gewählt.


Martin


1: http://en.wikipedia.org/wiki/Virtual_memory
http://de.wikipedia.org/wiki/Virtueller_Speicher
2: http://manpages-de.alioth.debian.org/
3: http://anonscm.debian.org/gitweb/?p=manpages-de/manpages-de.git;a=summary

# Vielleicht umformulieren?
# "B<mremap>() vergrö�ert (oder verkleinert) eine bestehende 
# "Speichereinblendung. Abhängig vom Argument I<flags> und dem zur Verfügung 
# "stehenden Speicherplatz kann der Speicher dabei auch verschoben werden.)"
#. type: Plain text
msgid ""
"B<mremap>()  expands (or shrinks) an existing memory mapping, potentially "
"moving it at the same time (controlled by the I<flags> argument and the "
"available virtual address space)."
msgstr ""
"B<mremap>() vergrö�ert (oder verkleinert) eine bestehende "
"Speichereinblendung, potenziell durch gleichzeitiges Verschieben (gesteuert "
"durch das Argument I<flags> und den zur Verfügung stehenden virtuellen "
"Speicherplatz)."


# Alternativen zu "an den Speicherseiten ausgerichtet sein muss":
#   "durch die Seitengrö�e teilbar seien muss"?
#   "ein Vielfaches der Seitengrö�e sein muss."?
#. type: Plain text
msgid ""
"I<old_address> is the old address of the virtual memory block that you want "
"to expand (or shrink).  Note that I<old_address> has to be page aligned.  "
"I<old_size> is the old size of the virtual memory block.  I<new_size> is the "
"requested size of the virtual memory block after the resize.  An optional "
"fifth argument, I<new_address>, may be provided; see the description of "
"B<MREMAP_FIXED> below."
msgstr ""
"I<old_address> ist die alte Adresse des virtuellen Speicherblocks, den man "
"vergrö�ern (oder verkleinern) möchte.  Beachten Sie, dass I<old_address> an "
"den Speicherseiten ausgerichtet sein muss.  I<old_size> ist die alte Grö�e "
"des virtuellen Speicherblocks.  I<new_size> ist die angeforderte Grö�e des "
"virtuellen Speicherblocks nach der Grö�enänderung. Optional kann ein fünftes "
"Argument, I<new_address>, angegeben werden; siehe die folgende Beschreibung "
"von B<MREMAP_FIXED>."


#. type: Plain text
msgid ""
"In Linux the memory is divided into pages.  A user process has (one or)  "
"several linear virtual memory segments.  Each virtual memory segment has one "
"or more mappings to real memory pages (in the page table).  Each virtual "
"memory segment has its own protection (access rights), which may cause a "
"segmentation violation if the memory is accessed incorrectly (e.g., writing "
"to a read-only segment).  Accessing virtual memory outside of the segments "
"will also cause a segmentation violation."
msgstr ""
"Unter Linux ist der Speicher in Seiten eingeteilt. Ein Benutzerprozess "
"verfügt über (ein oder) mehrere zusammenhängende virtuelle Speichersegmente. "
"Jedes virtuelle Speichersegment verweist auf einen oder mehrere physikalische "
"Speicherbereiche (in der Page Table). Jedes virtuelle Speichersegment hat "
"seine eigene Absicherung (Zugriffsrechte), welche eine Segmentierungsverletzung "
"(Segmentation violation) verursachen kann, wenn auf den Speicher nicht "
"korrekt zugegriffen wird. Zugriffe auf virtuellen Speicher auÃ?erhalb der "
"Segmente verursachen ebenfalls eine Segmentierungsverletzung."


# Satz zwei vielleicht: 
# "Die Funktion verlegt virtuelle Speicheradressen." ?
#. type: Plain text
msgid ""
"B<mremap>()  uses the Linux page table scheme.  B<mremap>()  changes the "
"mapping between virtual addresses and memory pages.  This can be used to "
"implement a very efficient B<realloc>(3)."
msgstr ""
"B<mremap>() benutzt das Linux-Schema für Page tables. Die Funktion blendet "
"Speicherseiten an anderen virtuellen Adressen ein. Das kann benutzt werden, "
"um ein sehr effizientes B<realloc>(3) zu implementieren."


# FIXME: flag(s)? Nein, so steht es in der Synopsys.
#. type: Plain text
msgid "The I<flags> bit-mask argument may be 0, or include the following flag:"
msgstr ""
"Das Bitmasken-Argument I<flags> kann 0 sein oder die folgenden Flags "
"enthalten:"


 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.
#
#  - 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.
#
#  - Vergrö�erung des virtuellen Speicherbereichs in der Mitte:
#    Prinzipiell wie oben, aber der anschlieÃ?ende virtuelle Speicher muss um
#    das angeforderte Delta verschoben werden.
# 
#  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. Wird dieses Flag angegeben, darf der Kernel "
# "den physikalischen Speicher an eine neue Adresse verlegen, falls das "
# "erforderlich ist. Nachdem der physikalische Speicher verlegt wurde, werden "
# "absolute Zeiger zum alten Speicherort ungültig. Es sollten Offsets �"
#. type: Plain text
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, falls das erforderlich ist. Falls die "
"Abbildung verlegt wurde, werden absolute Zeiger zum Ort der alten Abbildung "
"ungültig. (Es sollten Offsets relativ zum Anfang des Speicherbereichs "
"verwendet werden.)"


# FIXME: �bersetzung überarbeiten, gleiches Problem ist auch weiter oben
# Alternativen zu "an den Speicherseiten ausgerichtet sein muss": â?¦
#. 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). Wenn dieses Flag angegeben wird, dann akzeptiert B<mremap>() ein "
"fünftes Argument, I<void *new_address>, das eine an Seiten ausgerichtete "
"Adresse angibt, an welche die Einblendung verschoben werden soll. Alle früheren "
"Einblendungen auf den von I<new_address> und I<new_size> angegebenen "
"Adressbereich werden verworfen. Falls B<MREMAP_FIXED> angegeben wird, muss "
"ebenfalls B<MREMAP_MAYMOVE> angegeben werden."


# 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."


#. type: Plain text
msgid ""
"On success B<mremap>()  returns a pointer to the new virtual memory area.  "
"On error, the value B<MAP_FAILED> (that is, I<(void\\ *)\\ -1>) is returned, "
"and I<errno> is set appropriately."
msgstr ""
"Bei Erfolg gibt B<mremap>() einen Zeiger auf den neuen virtuellen "
"Speicherbereich zurück. Im Fehlerfall wird der Wert B<MAP_FAILED> (d.h. "
"I<(void \\ *)\\ -1>) zurückgegeben und I<errno> entsprechend gesetzt."


#. 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."


# FIXME: Ã?bersetzungen alignment, invalid
#. type: Plain text
msgid ""
"An invalid argument was given.  Possible causes are: I<old_address> was not "
"page aligned; a value other than B<MREMAP_MAYMOVE> or B<MREMAP_FIXED> was "
"specified in I<flags>; I<new_size> was zero; I<new_size> or I<new_address> "
"was invalid; or the new address range specified by I<new_address> and "
"I<new_size> overlapped the old address range specified by I<old_address> and "
"I<old_size>; or B<MREMAP_FIXED> was specified without also specifying "
"B<MREMAP_MAYMOVE>."
msgstr ""
"Es wurde ein ungültiges Argument angegeben. Mögliche Fehler sind: "
"I<old_address> war nicht an einer Speicherseite ausgerichtet; in I<flags> "
"wurde ein anderer Wert als B<MREMAP_MAYMOVE> oder B<MREMAP_FIXED> angegeben; "
"I<new_size> war null; I<new_size> oder I<new_address> war ungültig oder der "
"durch I<new_address> and I<new_size> angegebene neue Adressbereich "
"überschnitt sich mit dem durch I<old_address> und I<old_size> angegebenen "
"alten Adressbereich oder B<MREMAP_FIXED> wurde angegeben, ohne zugleich auch "
"B<MREMAP_MAYMOVE> anzugeben."


#. type: Plain text
msgid ""
"The memory area cannot be expanded at the current virtual address, and the "
"B<MREMAP_MAYMOVE> flag is not set in I<flags>.  Or, there is not enough "
"(virtual) memory available."
msgstr ""
"Der Speicherbereich kann an der aktuellen virtuellen Adresse nicht erweitert "
"werden und in I<flags> ist das Flag I<MREMAP_MAYMOVE> nicht gesetzt. Oder es "
"gibt nicht genug freien (virtuellen) Speicher."

Reply to: