diff options
author | Martin Heinen <mheinen@FreeBSD.org> | 2002-12-23 12:50:21 +0000 |
---|---|---|
committer | Martin Heinen <mheinen@FreeBSD.org> | 2002-12-23 12:50:21 +0000 |
commit | 98bfe8e4c6b379d551061f22a58f831a8409e6e9 (patch) | |
tree | 5e6e8cf1b4657b21a2843c6d51bfd6b32e97aa2d /de_DE.ISO8859-1 | |
parent | dc2e41ebb2188aa04efd0481b487fca028d75f3e (diff) | |
download | doc-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.sgml | 178 |
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ärkompatibilität zu verschiedenen - anderen Unix-artigen Betriebssystemen, darunter auch Linux. Nun + anderen &unix; Betriebssystemen, darunter auch Linux. Nun könnten Sie sich fragen, warum FreeBSD in der Lage sein muss, Linux-Binärprogramme auszufü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ührende Themen</title> <para>Wenn Sie sich fragen, wie die Linux-Binärkompatibilität - unter FreeBSD realisiert wurde, sollten Sie diesen (englischen) - Abschnitt lesen. Der Groß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><199906020108.SAA07001@usr09.primenet.com></literal>). - </para> - - <para>Dieser Abschnitt ist noch nicht ü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ß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><199906020108.SAA07001@usr09.primenet.com></literal>).</para> + + <sect2> + <title>Wie funktioniert es?</title> + <indexterm><primary>execution class loader</primary></indexterm> + + <para>FreeBSD verfügt ü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ügt über eine Liste von Ladern, anstelle + eines einzigen, auf <literal>#!</literal> + zurückgreifenden Laders, um Shell-Interpreter oder Shell-Skripte + auszuführen.</para> + + <para>Historisch gesehen untersuchte der einzige, auf + UNIX-Plattformen vorhandene Lader die "magische Zahl" + (in der Regel die ersten 4 oder 8 Bytes der Datei), um + festzustellen, ob der Binärtyp dem System bekannt war. + War dies der Fall, wurde der Binärlader aufgerufen.</para> + + <para>Wenn es sich nicht um den zum System gehörigen Binärtyp + handelte, gab &man.execve.2; einen Fehler zurück, + und die Shell versuchte stattdessen, die Datei als Shell-Befehl + auszuführen.</para> + + <para>Dabei wurde als Standardeinstellung <quote>was auch immer die + aktuelle Shell ist</quote> festgelegt.</para> + + <para>Später wurde ein Hack in &man.sh.1; eingefü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ür Interpreter befindet. Der + auszuführende Interpreter wird im ersten, durch + Leerzeichen getrennten Feld, der <literal>#!</literal>-Zeile + angegeben. Läßt sich der Interpreter nicht ermitteln, + wird auf <filename>/bin/sh</filename> zurückgegriffen.</para> + + <indexterm><primary>ELF</primary></indexterm> + + <para>Für die Linux ABI-Unterstützung erkennt FreeBSD + die magische Zahl als ELF-Binärdatei (Zu diesem Zeitpunkt wird + nicht zwischen FreeBSD, Solaris, Linux oder anderen Systemen + unterschieden, die über ELF-Binärdateien + verfü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ärdateien nicht vorhanden ist.</para> + + <para>Damit Linux-Binärdateien (unter FreeBSD) funktionieren, + mü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äre das ein + <literal>sysent[]</literal>-Strukturfeld, das die Systemaufrufe + enthält). Der Prozess wird weiterhin speziell gekennzeichnet, + so dass der Trap-vector im Signal-trampoline-code eine spezielle + Behandlung erfährt und das Linux-Kernelmodul verschiedene + kleinere Korrekturen vornehmen kann.</para> + + <para>Der Linux-Systemaufrufvektor enthält neben anderen + Dingen eine Liste der <literal>sysent[]</literal>-Einträge, + deren Adressen sich im Kernelmodul befinden.</para> + + <para>Wenn ein Linux-Programm einen Systemaufruf ausführt, + dereferenziert die Trap-Behandlungsroutine den Zeiger auf die + Eintrittspunkte für die Systemaufrufe und erhält damit die + Linux-Eintrittspunkte und nicht die FreeBSD-Eintrittspunkte.</para> + + <para>Zusätzlich <emphasis>verä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ägt, wird im + (FreeBSD)-<filename>/<replaceable>Originalpfad</replaceable></filename> + -Verzeichnis gesucht. Dadurch wird sichergestellt, dass + Binärdateien, die zur Ausführung andere + Binärdateien benötigen, ausgeführt + werden können (so dass alle Linux-Werkzeuge unter der + ABI laufen). Dies bedeutet auch, + dass Linux-Binärdateien FreeBSD-Binärdateien + laden und ausführen können, wenn keine passenden + Linux-Binä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ür Linux- + beziehungsweise FreeBSD-Systemaufrufe verweisen allerdings auf + dieselben Funktionen, die Kerneldienste wie Dateisystemoperationen, + Operationen für den virtuellen Speicher, + Signalübermittlung und System V IPC bereitstellen, + Der einzige Unterschied ist, dass Binärdateien unter FreeBSD + FreeBSD-<emphasis>glue</emphasis>-Funktionen verwenden. + Linux-Binärdateien hingegen verwenden die + Linux-<emphasis>glue</emphasis>-Funktionen. Die meisten + ä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ätzlich ist der einzige Unterschied (d.h. zurzeit; dies + könnte sich in zukünftigen Versionen leicht ändern + und wird sich wahrscheinlich auch ä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 über ein Modul eingebunden werden + kö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ä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ü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ürde + Linux-Binärprogramme ausführen. Man benötigte + ein Wort, das beschrieb, was da geladen + wurde — 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: --> - - |