aboutsummaryrefslogtreecommitdiff
path: root/de_DE.ISO8859-1
diff options
context:
space:
mode:
authorMartin Heinen <mheinen@FreeBSD.org>2002-12-23 12:50:21 +0000
committerMartin Heinen <mheinen@FreeBSD.org>2002-12-23 12:50:21 +0000
commit98bfe8e4c6b379d551061f22a58f831a8409e6e9 (patch)
tree5e6e8cf1b4657b21a2843c6d51bfd6b32e97aa2d /de_DE.ISO8859-1
parentdc2e41ebb2188aa04efd0481b487fca028d75f3e (diff)
downloaddoc-98bfe8e4c6b379d551061f22a58f831a8409e6e9.tar.gz
doc-98bfe8e4c6b379d551061f22a58f831a8409e6e9.zip
Finish the translation of the linuxemu chapter.
Submitted by: Johann Kois <j.kois@web.de> Obtained from: The FreeBSD German Documentation Project
Notes
Notes: svn path=/head/; revision=15418
Diffstat (limited to 'de_DE.ISO8859-1')
-rw-r--r--de_DE.ISO8859-1/books/handbook/linuxemu/chapter.sgml178
1 files changed, 162 insertions, 16 deletions
diff --git a/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.sgml b/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.sgml
index 476b9007af..33d487e7a8 100644
--- a/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.sgml
+++ b/de_DE.ISO8859-1/books/handbook/linuxemu/chapter.sgml
@@ -3,7 +3,7 @@
The FreeBSD German Documentation Project
$FreeBSD$
- $FreeBSDde: de-docproj/books/handbook/linuxemu/chapter.sgml,v 1.31 2002/12/05 17:54:22 mheinen Exp $
+ $FreeBSDde: de-docproj/books/handbook/linuxemu/chapter.sgml,v 1.36 2002/12/22 19:18:02 mheinen Exp $
basiert auf: 1.80
-->
@@ -51,7 +51,7 @@
</indexterm>
<para>FreeBSD bietet Bin&auml;rkompatibilit&auml;t zu verschiedenen
- anderen Unix-artigen Betriebssystemen, darunter auch Linux. Nun
+ anderen &unix; Betriebssystemen, darunter auch Linux. Nun
k&ouml;nnten Sie sich fragen, warum FreeBSD in der Lage sein
muss, Linux-Bin&auml;rprogramme auszuf&uuml;hren? Die Antwort
auf diese Frage ist sehr einfach. Viele Unternehmen und Entwickler
@@ -165,7 +165,7 @@ Id Refs Address Size Name
1 2 0xc0100000 16bdb8 kernel
7 1 0xc24db000 d000 linux.ko</screen>
<indexterm>
- <primary>Kernel-Option</primary>
+ <primary>Kerneloption</primary>
<secondary>LINUX</secondary>
</indexterm>
@@ -3236,21 +3236,169 @@ options SHMMAXPGS=393216
</sect2>
</sect1>
+ <!-- j.kois@web.de, 08. Dezember 2002 -->
<sect1>
<title>Weiterf&uuml;hrende Themen</title>
<para>Wenn Sie sich fragen, wie die Linux-Bin&auml;rkompatibilit&auml;t
- unter FreeBSD realisiert wurde, sollten Sie diesen (englischen)
- Abschnitt lesen. Der Gro&szlig;teil der folgenden Informationen
- stammt aus einer E-Mail, die von Terry Lambert
- (<email>tlambert@primenet.com</email>) an die FreeBSD-Chat-
- Mailingliste (<email>freebsd-chat@FreeBSD.org</email>) geschrieben wurde
- (Message ID: <literal>&lt;199906020108.SAA07001@usr09.primenet.com&gt;</literal>).
- </para>
-
- <para>Dieser Abschnitt ist noch nicht &uuml;bersetzt. Lesen Sie bitte
- <ulink url="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/linuxemu.html">
- diesen Abschnitt in englischer Sprache</ulink>.</para>
+ unter FreeBSD realisiert wurde, sollten Sie diesen Abschnitt lesen.
+ Der Gro&szlig;teil der folgenden Informationen stammt aus einer
+ E-Mail, die von Terry Lambert (<email>tlambert@primenet.com</email>)
+ an die FreeBSD-Chat-Mailingliste
+ (<email>freebsd-chat@FreeBSD.org</email>) geschrieben wurde
+ (Message ID: <literal>&lt;199906020108.SAA07001@usr09.primenet.com&gt;</literal>).</para>
+
+ <sect2>
+ <title>Wie funktioniert es?</title>
+ <indexterm><primary>execution class loader</primary></indexterm>
+
+ <para>FreeBSD verf&uuml;gt &uuml;ber eine <quote>execution class
+ loader</quote> genannte Abstraktion. Dabei handelt es sich um einen
+ Eingriff in den &man.execve.2; Systemaufruf.</para>
+
+ <para>FreeBSD verf&uuml;gt &uuml;ber eine Liste von Ladern, anstelle
+ eines einzigen, auf <literal>#!</literal>
+ zur&uuml;ckgreifenden Laders, um Shell-Interpreter oder Shell-Skripte
+ auszuf&uuml;hren.</para>
+
+ <para>Historisch gesehen untersuchte der einzige, auf
+ UNIX-Plattformen vorhandene Lader die "magische Zahl"
+ (in der Regel die ersten 4 oder 8&nbsp;Bytes der Datei), um
+ festzustellen, ob der Bin&auml;rtyp dem System bekannt war.
+ War dies der Fall, wurde der Bin&auml;rlader aufgerufen.</para>
+
+ <para>Wenn es sich nicht um den zum System geh&ouml;rigen Bin&auml;rtyp
+ handelte, gab &man.execve.2; einen Fehler zur&uuml;ck,
+ und die Shell versuchte stattdessen, die Datei als Shell-Befehl
+ auszuf&uuml;hren.</para>
+
+ <para>Dabei wurde als Standardeinstellung <quote>was auch immer die
+ aktuelle Shell ist</quote> festgelegt.</para>
+
+ <para>Sp&auml;ter wurde ein Hack in &man.sh.1; eingef&uuml;gt,
+ der die zwei ersten Zeichen untersuchte. Wenn diese
+ <literal>:\n</literal> entsprachen,
+ wurde stattdessen die &man.csh.1;-Shell aufgerufen
+ (wir glauben, dass dies zuerst von SCO umgesetzt wurde).</para>
+
+ <para>FreeBSD versucht heute eine Liste von Ladern, unter denen
+ sich ein allgemeiner Lader f&uuml;r Interpreter befindet. Der
+ auszuf&uuml;hrende Interpreter wird im ersten, durch
+ Leerzeichen getrennten Feld, der <literal>#!</literal>-Zeile
+ angegeben. L&auml;&szlig;t sich der Interpreter nicht ermitteln,
+ wird auf <filename>/bin/sh</filename> zur&uuml;ckgegriffen.</para>
+
+ <indexterm><primary>ELF</primary></indexterm>
+
+ <para>F&uuml;r die Linux ABI-Unterst&uuml;tzung erkennt FreeBSD
+ die magische Zahl als ELF-Bin&auml;rdatei (Zu diesem Zeitpunkt wird
+ nicht zwischen FreeBSD, Solaris, Linux oder anderen Systemen
+ unterschieden, die &uuml;ber ELF-Bin&auml;rdateien
+ verf&uuml;gen.).</para>
+
+ <indexterm><primary>Solaris</primary></indexterm>
+
+ <para>Der ELF-Lader sucht nach einer speziellen
+ <emphasis>Kennzeichnung</emphasis>, die aus einem Kommentarabschnitt
+ in der ELF-Datei besteht, und die in SVR4/Solaris ELF
+ Bin&auml;rdateien nicht vorhanden ist.</para>
+
+ <para>Damit Linux-Bin&auml;rdateien (unter FreeBSD) funktionieren,
+ m&uuml;ssen sie als <literal> Linux</literal>
+ <emphasis>gekennzeichnet</emphasis> werden, und zwar durch
+ &man.brandelf.1;:</para>
+
+ <screen>&prompt.root; <userinput>brandelf -t Linux file</userinput></screen>
+
+ <para>Nachdem dies geschehen ist, erkennt der ELF-Lader die
+ <literal>Linux</literal>-Kennzeichnung der Datei.</para>
+ <indexterm>
+ <primary>ELF</primary>
+ <secondary><command>brandelf</command></secondary>
+ </indexterm>
+
+ <para>Wenn der ELF-Lader die <literal>Linux</literal>-Kennzeichnung
+ sieht, wird ein Zeiger in der <literal>proc</literal>-Struktur
+ ersetzt. Alle Systemaufrufe werden durch diesen Zeiger indiziert
+ (in einem traditionellen &unix; System w&auml;re das ein
+ <literal>sysent[]</literal>-Strukturfeld, das die Systemaufrufe
+ enth&auml;lt). Der Prozess wird weiterhin speziell gekennzeichnet,
+ so dass der Trap-vector im Signal-trampoline-code eine spezielle
+ Behandlung erf&auml;hrt und das Linux-Kernelmodul verschiedene
+ kleinere Korrekturen vornehmen kann.</para>
+
+ <para>Der Linux-Systemaufrufvektor enth&auml;lt neben anderen
+ Dingen eine Liste der <literal>sysent[]</literal>-Eintr&auml;ge,
+ deren Adressen sich im Kernelmodul befinden.</para>
+
+ <para>Wenn ein Linux-Programm einen Systemaufruf ausf&uuml;hrt,
+ dereferenziert die Trap-Behandlungsroutine den Zeiger auf die
+ Eintrittspunkte f&uuml;r die Systemaufrufe und erh&auml;lt damit die
+ Linux-Eintrittspunkte und nicht die FreeBSD-Eintrittspunkte.</para>
+
+ <para>Zus&auml;tzlich <emphasis>ver&auml;ndert</emphasis> der
+ Linuxmodus die Systempfade dynamisch; genauso, wie dies die
+ <literal>union</literal> Option beim Einbinden von Dateisystemen
+ macht (Achtung: <emphasis>nicht</emphasis> unionfs!).
+ Zuerst wird die Datei im <filename>/compat/linux/<replaceable>Originalpfad</replaceable></filename>
+ Verzeichnis gesucht, <emphasis>erst dann</emphasis>, d.h. nur
+ wenn dies fehlschl&auml;gt, wird im
+ (FreeBSD)-<filename>/<replaceable>Originalpfad</replaceable></filename>
+ -Verzeichnis gesucht. Dadurch wird sichergestellt, dass
+ Bin&auml;rdateien, die zur Ausf&uuml;hrung andere
+ Bin&auml;rdateien ben&ouml;tigen, ausgef&uuml;hrt
+ werden k&ouml;nnen (so dass alle Linux-Werkzeuge unter der
+ ABI laufen). Dies bedeutet auch,
+ dass Linux-Bin&auml;rdateien FreeBSD-Bin&auml;rdateien
+ laden und ausf&uuml;hren k&ouml;nnen, wenn keine passenden
+ Linux-Bin&auml;rdateien vorhanden sind. Ein in
+ <filename>/compat/linux</filename> plaziertes &man.uname.1; kann
+ damit Linux-Programmen vorgaukeln, dass sie auf einem Linux-System
+ laufen.</para>
+
+ <para>Im Endeffekt gibt es einen Linux-Kernel innerhalb des
+ FreeBSD-Kernels. Die Sprungtabellen f&uuml;r Linux-
+ beziehungsweise FreeBSD-Systemaufrufe verweisen allerdings auf
+ dieselben Funktionen, die Kerneldienste wie Dateisystemoperationen,
+ Operationen f&uuml;r den virtuellen Speicher,
+ Signal&uuml;bermittlung und System&nbsp;V&nbsp;IPC bereitstellen,
+ Der einzige Unterschied ist, dass Bin&auml;rdateien unter FreeBSD
+ FreeBSD-<emphasis>glue</emphasis>-Funktionen verwenden.
+ Linux-Bin&auml;rdateien hingegen verwenden die
+ Linux-<emphasis>glue</emphasis>-Funktionen. Die meisten
+ &auml;lteren Betriebssysteme hatten ihre eigenen
+ <emphasis>glue</emphasis>-Funktionen: Funktionsadressen
+ in einem globalen, statischen <literal>sysent[]</literal>
+ Strukturfeld an Stelle von Funktionsadressen, die durch
+ einen dynamisch initialisierten Zeiger aus der
+ <literal>proc</literal> Struktur, die den Aufruf gemacht hatte,
+ dereferenziert wurden.</para>
+
+ <para>Welche ist die echte FreeBSD ABI? Das spielt keine Rolle.
+ Grunds&auml;tzlich ist der einzige Unterschied (d.h. zurzeit; dies
+ k&ouml;nnte sich in zuk&uuml;nftigen Versionen leicht &auml;ndern
+ und wird sich wahrscheinlich auch &auml;ndern), dass die
+ FreeBSD-<emphasis>glue</emphasis>-Funktionen statisch in
+ den Kernel gelinkt sind, und dass die Linux-<emphasis>glue</emphasis>-Funktionen
+ statisch gelinkt oder &uuml;ber ein Modul eingebunden werden
+ k&ouml;nnen.</para>
+
+ <para>Ja, aber ist das wirkliche eine Emulation? Nein. Es ist eine ABI
+ Implementation, keine Emulation. Es ist kein Emulator (oder
+ Simulator, um der n&auml;chsten Frage zuvorzukommen.)
+ beteiligt.</para>
+
+ <para>Warum wird es manchmal <quote>Linux-Emulation</quote> genannt?
+ Um es schwerer zu machen, FreeBSD zu verkaufen. Wirklich, das kommt
+ daher, weil die historische Implementation zu einer Zeit
+ durchgef&uuml;hrt wurde, in der es kein anderes Wort
+ (als Emulation) gab, das beschrieb, was vor sich ging.
+ Wenn der Kernel nicht entsprechend konfiguriert wurde oder das
+ Modul geladen wurde, war es falsch zu behaupten, FreeBSD w&uuml;rde
+ Linux-Bin&auml;rprogramme ausf&uuml;hren. Man ben&ouml;tigte
+ ein Wort, das beschrieb, was da geladen
+ wurde &mdash; daher <quote>Der Linux-Emulator</quote>.</para>
+ </sect2>
</sect1>
</chapter>
@@ -3264,5 +3412,3 @@ options SHMMAXPGS=393216
sgml-parent-document: ("../book.sgml" "part" "chapter")
End:
-->
-
-