On 17.Aug 2003 - 08:44:06, Rene Drießel wrote:
> Am So, 2003-08-17 um 04.23 schrieb Seth:
> > Ich hab da eine Verständnisfrage.
> > [...]
> > Auf einer Seite die ich hier auch gepostet habe, habe ich gelesen das es 
> > Kernel-Code und, uhm, naja, nicht-Kernel-Code gibt. ;)
> > 
> > Somit wären die Libs wiederum Kernelabhängig.
> 
> Ich bin zwar kein Kernel Hacker - programmiere aber von Zeit zu Zeit ein
> wenig. Ich versuche es mal so zu erklären wie ich es mit denke. Ein
> Compiler macht nichts anderes als Quelltext in Maschinencode umzusetzen.
> Die folgende Zeile:
> 
> $a = 1;
> 
> würde also so aussehen (nur ungefähr meine Assemblerkenntnisse sind
> schon sehr eingerostet).
> 
> mov DH, Speicheraddresse von $a
> mov [DH], 2
> 
> Jetzt ist es allerdings so so das es verschiedene Strategien der
> Umsetzung von Codekonstrukten gibt. Hierzu sollte man in einem Buch über
> Kompilerbau mal nachlesen. Durch diese Verschiedenen Strategien kommen
> bei unterschiedlichen Compilern auch unterschiedliche Binärdateien raus.

Nicht zwangsläufig. So sind z.B. die GNU C-Compiler alle miteinander
binär kompatibel. Das liegt denke ich auch daran, dass bei C viel mehr
international standadisiert ist als z.B. bei C++. Bei letzterem gabs
mittlerweile 3 Wechsel der sog. ABI (Application Binary Interface)
zwischen den Versionen 2.95, 3.0, 3.1 und 3.2. Welche alle zueinander
inkompatible Binaries erzeuge. Dagegen ist die ABI zwischen 3.3 und 3.2
gleich geblieben.

> Bei einem Aufruf von Funktionen gibt es ebenfalls verschiedene
> Strategien (wie die Parameter übergeben werden - von links nach rechts,
> rechts nach links usw.). 
> 
> Aus diesen Gründen ist es wichtig das derselbe Compiler verwendet wird -
> da sonst irgendwas inkonsistent sein kann. 

Ich bin mir nicht ganz sicher warum beim Bauen des NVidia-Kernel-Moduls
unbedingt derselbe Compiler benutzt werden muss. Aber z.B. der Aufruf
von Funktionen ist AFAIK beim gcc festgelegt und für C hat sich das
schon lange nicht mehr geändert.

> Bei Bibliotheken bzw. Ausführbaren Programmen ist das eine andere Sache
> (zumindest theoretisch). Hier sollte der Compiler keine Rolle spielen,
> da die Schnittstellen der Kernel vorgibt.

Doch grade da spielt er eine Rolle, da wie oben beschrieben der Compiler
das Binäre Interface für Bibliotheken festlegt und Programme die eine
Bibliothek benutzen wollen müssen natürlich das Binärinterface
verstehen.

> Durch das ELF Format ist die
> Struktur einer ausführbaren Datei ziemlich strikt vorgeschrieben. Diese
> Vorgaben kommen vom Kernel. Deswegen kann man auch keine Microsoft
> Windows EXE-Dateien unter Linux ausführen. Erst mit Hilfe von Wine wird
> dieses Format verstanden. Hier würde mich allerdings mal interessieren
> wie die Registrierung beim Linux Kernel erfolgt (ein apt-get mono reicht
> zum Beispiel aus das .NET Dateien ausgeführt werden können  - das kann
> ja nicht über ein Kernelmodul gemacht werden).

Nun die machen gar nix mit dem Kernel. Es gibt im Kernel die Möglichkeit
Unterstützung in der Art einzubauen, dass entsprechende Programme
ausgeführt werden indem automatisch der passende Emulator geladen wird.
Für den DosEMU hab ich das schonmal gesehen. Aber man braucht das
natürlich nicht um Dos-Programme im DosEMU ausführen zu können. Ebenso
ist es mit wine, wine setzt einfach nur die Windows-Systemrufe in
Linux-Systemrufe um, macht also nicht viel mehr als Parsen der Eingabe
und erzeugen einer passenden (Linux)Ausgabe. .NET läuft wie Java völlig
unabhängig vom darunterliegenden BS. Es gibt den Interpreter, der
BS-abhängig ist, aber die eigentlichen Programme sind dann in einer
Zwischensprache die vom Interpreter umgesetzt wird in jeweilige
Systemrufe. Deswegen installierst du mondo und der führt dann die .Net
Programme aus.

Andreas

-- 
Welcher Unterschied, ob wir mit dem abgenommenen Hute einen Halbzirkel
beschreiben oder ihn senkrecht bis zur Brust herunternehmen.
                -- Jean Paul


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

Antwort per Email an