BSD daemon

NetBSD Dokumentation:

Binäremulation in NetBSD

Binäremulation


Binäremulation


Was ist Binäremulation? Warum gibt es sie ? (zurück)

Ein Großteil der Unix Software wird im Quellcode verbreitet. Das bedeutet, dass der Autor die Programmquellen anbietet, und während der Installation ein Compiler benutzt wird, um ein ausführbares Programm zu kreieren, welches auf der entsprechenden Maschine laufen kann. Sorgfältig geschriebene Programme und Installationshilfen machen es möglich, dass das selbe Programm auf Dutzenden Betriebssystemen kompiliert und angewandt werden kann.

Kommerzielle Softwareanbieter dagegen verbreiten ungern die Quellen ihrer Programme, da sie Geschäftsgeheimnisse enthalten können. Sie bieten normalerweise vorkompilierte Programme an, die direkt ausgeführt werden können. Sie kompilieren die Programme schon vor der Auslieferung, und verbreiten binäre Programme, die ihre Geschäftsgeheimnisse besser schützen.

Das Ergebnis dieser Praxis ist, dass der Softwareanbieter eine Entscheidung treffen muss, wieviel Geld er bereit ist auszugeben, um für die unterschiedlichen Betriebssysteme Support anzubieten, sowie ein solches System zu unterhalten, und jemanden für die Kompilierung und das Testen der Software auf dieser Plattform abzustellen.

Dies verbindet das Betriebssystem und den Satz von Anwendungen, den der Endanwender benutzen kann; man kann sich gegen eine bestimmte Software entscheiden, weil sie nicht für das eingesetzte Betriebssystem verfügbar ist, oder man muss sich eventuell für eine bestimmte Plattform entscheiden, da kritische Anwendungen nur für diese verfügbar sind.

Binäremulation bricht diesen Zwangsbund zwischen Anwendungen und Betriebssystemen auf.

Welche anderen Binärkompatibilitäten gibt es? (zurück)

Es gibt noch eine weiter Klasse von Binärkompatibilität, die man im Auge behalten sollte. NetBSD benutzt das gleiche binäre Dateiformat für NetBSD Maschinen mit derselben CPU. Das heisst, dass wenn Sie ein Programm auf Ihrer NetBSD sun3 kompilieren, dass sie dasselbe auch auf Ihrem NetBSD amiga, NetBSD mac68k, NetBSD mvme68k, NetBSD next68k usw. laufen lassen können, jedoch nicht auf Maschinen, die auf einem Intel Prozessor basieren.

Wie funktioniert sie ? (zurück)

Unix und Unix-ähnliche Systeme bestehen aus zwei primären Teilen, dem Kernel, und dem Rest. Der Kernel ist das Programm, welches die Devices, die Sicherheit, und die Programme, die auf die Resourcen der unterliegenden Hardware zugreifen wollen, verwaltet. Normalerweise bietet der Kernel diese Dienste durch sogenannte System Calls an. Wenn zum Beispiel ein Programm versucht eine Datei zu öffnen, ruft es die Kernel OPEN-Funktion mit passenden Parametern auf, und der Kernel antwortet auf diese Anfrage, je nachdem ob der Zugriff gestattet wird oder nicht, mit den passenden Daten, damit das Programm fortfahren kann.

Jedes Unix oder Unix-ähnliche System bietet einen sehr ähnlichen Satz von diesen Systemaufrufen an. (All jene haben z. B. einen Systemaufruf namens OPEN)
Von System zu System ist der Hauptunterschied zwischen diesen Systemaufrufen, dass das Format und evtl. die Anzahl der übergebenen Parameter sich unterscheiden. (NetBSDs OPEN erwartet z. B. einen Dateinamen, Flags und einen Modus)  Die Namen der Systemaufrufe können sich auch von System zu System unterscheiden. Wenn ein NetBSD System versucht ein für Linux kompiliertes Programm auszuführen, nimmt der Kernel eine Umleitung des Systemaufrufes auf den korrespondierenden NetBSD-Systemaufruf vor, und ändert die Parameter entsprechend, um den Erwartungen des NetBSD Systemaufrufs gerecht zu werden.

Ein weiterer wichtiger Punkt ist das Dateiformat der ausführbaren Dateien. Ungefähr jedes zweite Betriebssystem benutzt ein unterschiedliches Dateiformat in dem Programme gespeichert werden, mit unterschiedlichen Headers, Magic Cookies, Hunks usw. Das von NetBSD direkt unterstützte Dateiformat ist entweder a.out oder ELF (abhängig von der Architektur und der Version von NetBSD. NetBSD migriert zu ELF, wobei jeder Port seinem eigenen Zeitplan folgt). Andere bekannte Dateiformate sind z. B. b.out, COFF, ECOFF, ieee695, PE, SOM und XCOFF. NetBSD's Emulation weiss wie es diese Dateiformate handhaben muss.

Die verschiedenen Systeme greifen auf ihre Systemaufrufe in unterschiedlicher Weise zu, und ihre Parameter werden unterschiedlich von den Programmen an den Kernel und zurück gereicht. AmigaOS, zum Beispiel, einen benutzt Index einer Tabelle, welche Zeiger auf Funktionen, adressiert durch ein Adressregister, enthält, wobei ein zugehöriges Datenregister die Parameter enthält. Andere Systeme benutzen andere Modelle, Traps, Tabellen, Register, stacks, usw, und all dies wird von der Emulation berücksichtigt.

Die letzte wichtige Anforderung an die Emulation ist, dass sie auf derselben CPU stattfindet, für die auch das auszuführende Programm kompiliert wurde. Neben Systemaufrufen bestehen Programme aus "rohen" CPU Instruktionen. Deswegen können SCO Unix Binärprogramme (Intel 386 CPU) auf NetBSD i386 ausgeführt werden, aber nicht auf NetBSD Amiga (Motorola 680x0 CPU). Eine solche Emulation würde einen sehr viel aufwändigeren Mechanismus zur Übersetzung der Instruktionen erfordern, welches spürbare Auswirkungen auf die Performance hätte.

Welche Systeme kann ich emulieren? (zurück)

Verallgemeinernd kann gesagt werden, dass Sie Programme von anderen Unix Betriebssystemen ausführen können, die auf der selben Hardware laufen können wie Ihr NetBSD System. Eine Liste der unterstützten Binärformate, als auch Erfahrungsberichte, sind weiter unten auf dieser Seite, sortiert nach Plattformen, vorhanden.

Wie sieht es mit der Performance aus? (zurück)

Da der einzige Overhead vom Weiterleiten der Systemaufrufe auf die entsprechenden nativen Systemaufrufe von NetBSD, sowie vom Anpassen der Parameter her rührt, ist die Performance tatsächlich sehr gut. Einer groben Schätzung nach verliert man maximal 1-2% der Performance - falls Sie 2% tatsächlich einen merkbaren Unterschied nennen. Das kommt natürlich auf den Systemaufruf an, den das laufende Programm benutzt. Die meisten Transformationen der Systemaufrufe benötigen <1% der Zeit, die der entsprechende Systemaufruf zur Ausführung benötigt.

Was gibt es sonst zu beachten? (zurück)

Zusätzlich zu der Anforderung der Gleichheit der CPU, sowie der Transformation der Systemaufrufe, gibt es eine weitere Anforderung. Viele Unix Systeme unterstützen Shared Libraries. Das bedeutet, dass ein kompiliertes Programm nicht alle verwandten Funktionen beinhaltet (was das Programm kleiner macht), sondern auf externe Libraries aufbaut, die mit jenen identisch sein müssen, mit denen das Programm kompiliert wurde ("minor" Unterschiede beiseite gelassen). Falls Sie ein Programm mit Hilfe von binärer Emulation benutzen wollen, können Sie mit Hilfe des 'file' Kommandos überprüfen, ob das Programm statisch oder dynamisch gebunden wurde:

% file qwsv
qwsv: BSD/OS i386 compact demand paged executable

% file arp
arp: NetBSD/i386 demand paged dynamically linked executable

'dynamically linked' bedeutet ebendies, dass das Programm Shared Libraries benutzt, die Abwesenheit dieser Ausgabe bedeutet, dass das Programm statisch gebunden wurde. Für die meisten frei erhältlichen Unix Systeme sind diese dynamischen Libraries durch die pkgsrc-Paketsammlung (im compat Verzeichnis) erhältlich. Bitte beachten Sie, dass diese nich benötigt werden, um statisch gebundene Programme auszuführen.

Um kommerzielle Systeme zu emulieren kann es sein, dass Sie eigene Libraries benötigen. Überprüfen Sie man -k compat um eine Liste zu erhalten, und man compat_os (z. B. man compat_freebsd) für Installationsanweisungen.

% man -k compat
compat_freebsd (8) - setup procedure for running FreeBSD binaries
compat_linux (8) - setup procedure for running Linux binaries
compat_sunos (8) - setup procedure for m68k and sparc architectures
compat_svr4 (8) - setup procedure for running SVR4/iBCS2 binaries
compat_ultrix (8) - setup procedure for Ultrix compatibility on mips and vax

Welche Betriebssysteme kann ich auf meiner Maschine emulieren? (zurück)

NetBSD läuft auf vielen CPUs und Hardware Plattformen. Für genauere Informationen, konsultieren Sie den Eintrag Ihres Systems in folgender Liste. Falls Sie weitere Emulationen benutzen können, bitte lassen Sie es uns wissen.

alpha

amiga

arc

arm26

arm32

atari

bebox

cobalt

dreamcast

hp300

hpcmips

hpcsh

i386

luna68k

mac68k

macppc

mipsco

mvme68k

news68k

newsmips

next68k

ofppc

pc532

pmax

prep

sandpoint

sgimips

sh3

sparc

sparc64

sun3

vax

x68k

Von welchen Anwendungen wurde berichtet dass Sie auf meiner Maschine funktionieren? (zurück)

NetBSD läuft auf vielen CPUs und Hardware Plattformen. Für genauere Informationen, konsultieren Sie den Eintrag Ihres Systems in folgender Liste. Falls Sie weitere Anwendungen benutzen können, bitte lassen Sie es uns wissen.

alpha

amiga

arc

arm26

arm32

atari

bebox

cobalt

dreamcast

hp300

hpcmips

hpcsh

i386

luna68k

mac68k

macppc

mipsco

mvme68k

news68k

newsmips

next68k

ofppc

pc532

pmax

prep

sandpoint

sgimips

sh3

sparc

sparc64

sun3

vax

x68k

Von welchen Anwendungen wurde berichtet, dass Sie nicht auf meiner Maschine funktionieren? (zurück)

NetBSD läuft auf vielen CPUs und Hardware Plattformen. Für genauere Informationen, konsultieren Sie den Eintrag Ihres Systems in folgender Liste. Falls Sie weitere Anwendungen nicht benutzen können, bitte lassen Sie es uns wissen.

Manchmal benötigen Anwendungen Features die in der Emulationsschicht von NetBSD nicht angeboten werden können. Das passiert normalerweise, wenn das Fremdsystem neue Systemaufrufe implementiert, und die Programmautoren ihre Programme an diese neuen Gegebenheiten anpassen. Wenn eine Anwendung mit 'letzte nicht unterstützte Version' aufgelistet ist, können alle späteren NetBSD releases diese Anwendung ausführen.

alpha

amiga

arc

arm26

arm32

atari

bebox

cobalt

dreamcast

hp300

hpcmips

hpcsh

i386

luna68k

mac68k

macppc

mipsco

mvme68k

news68k

newsmips

next68k

ofppc

pc532

pmax

prep

sandpoint

sgimips

sh3

sparc

sparc64

sun3

vax

x68k


Home page
Zurück zu Dokumentation

(Ihre Meinung) $NetBSD: compat.html,v 1.18 2005/09/28 17:24:39 mishka Exp $
Copyright © 2000-2003 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.