Architektur: Unterschied zwischen den Versionen

Aus EINI
Wechseln zu: Navigation, Suche
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Unter einer (Rechner-)Architektur versteht man den Satz an Maschinenbefehlen, die ein Prozessor verstehen und ausführen kann. Dazu gehören unter anderem auch Dinge wie die Anzahl an verfügbaren Registern und die [https://de.wikipedia.org/wiki/Byte-Reihenfolge Byte-Reihenfolge].
+
Unter einer (Rechner-)'''Architektur''' versteht man den Satz an Maschinenbefehlen, die ein Prozessor verstehen und ausführen kann. Dazu gehören unter anderem auch Dinge wie die Anzahl an verfügbaren Registern und die [https://de.wikipedia.org/wiki/Byte-Reihenfolge Byte-Reihenfolge].
  
Da diese Eigenschaften eines Prozessors von Hersteller zu Hersteller unterschiedlich sind, muss ein Programm für jede Architektur, auf der es ausgeführt werden soll, neu geschrieben werden. Aus diesem Grund entwarf man Compiler, die ein in einer gegbenen Programmiersprache verfasstes Programm in unterschiedliche Programme in unterschiedlichen Maschinensprachen übersetzen können.
+
=Compiler=
  
Während zu Zeiten der 16- und 32-Bit (die Anzahl an Bits die ein einzelnes Speicherregister umfasst) Desktoparchitekturen eine gewisse Vielfalt herrschte, gibt es heute nurnoch hauptsächlich den sogenannten '''amd-x86_64''' Standard. Dieser wird von den beiden größten Herstellern --- Intel und AMD --- für Desktop CPUs eingehalten. Somit müssen die meisten Programme für 64-Bit Prozessoren nur einmal compiliert werden und funktionieren auf vielen verschiedenen Endgeräten. Bei den Herstellern von Microcontrollern mit 8- 16- und 32-Bit Architekturen existieren jedoch noch viele verschiedene Standards, die auch heute noch produziert werden und auf verschiedene Anwendungsfälle spezialisiert sind. Aus diesem Grund ist es immernoch häufig relevant, zu beachten auf welcher Architektur ein Programm compiliert wurde.
+
Da diese genannten Eigenschaften eines Prozessors von Hersteller zu Hersteller unterschiedlich sind, muss ein Programm für jede Architektur, auf der es ausgeführt werden soll, neu geschrieben werden. Aus diesem Grund wurden [[Compiler]] entworfen, die ein in einer gegebenen [[Programmiersprache]] verfasstes [[Programm]] in unterschiedliche [[Maschinensprache|Maschinensprachen]] übersetzen können.
  
Ebenso ist für die meisten Anwendungsprogramme das unterliegende Betriebssystem relevant. So gibt es für die meisten Programme z.B. eine win-x86_64 und eine linux-x86_64 Version. Dies hat mit der Art und Weise zu tun, wie Programme, die nativ (auf Maschinencode und nicht Bytecode) compiliert wurden mit Systemressourcen (z.B. Standard Ein und Ausgabe) umgehen müssen. Diese Ressourcen werden auf unterschiedlichen Betriebssystemen unterschiedlich bereitgestellt und können deswegen nicht mit dem gleichen Maschinencode behandelt werden.
+
=Standards=
  
Javaprogramme haben dieses Problem nicht, da sie zu Bytecode übersetzt werden und eine speziell für eine gegebene Architektur geschriebene virtuelle Maschine (Java Virtual Machine (JVM)) die finale Übersetzung von Java(-bytecode) zu Maschinencode übernimmt. Somit kann ein Javaprogramm auf jeder Architektur ausgeführt werden, für welche eine JVM exisitert.
+
Während zu Zeiten der 16- und 32-Bit- (die Anzahl an Bits, die ein einzelnes Speicherregister umfasst) Desktoparchitekturen eine gewisse Vielfalt herrschte, gibt es heute hauptsächlich nur noch den sogenannten '''amd-x86_64'''-Standard. Dieser wird von den beiden größten Herstellern --- Intel und AMD --- für Desktop-CPUs eingehalten. Somit müssen die meisten Programme für '''64-Bit-Prozessoren''' häufig nur einmal compiliert werden und funktionieren auf vielen verschiedenen Endgeräten.
 +
 
 +
Bei den Herstellern von '''Microcontrollern''' mit 8- 16- und 32-Bit-Architekturen existieren jedoch viele verschiedene Standards, anhand derer auch heute noch Prozessoren produziert werden, die auf verschiedene Anwendungsfälle spezialisiert sind. Aus diesem Grund ist es oftmals immer noch wichtig, zu beachten auf welcher Architektur ein Programm compiliert wurde.
 +
 
 +
=Betriebssysteme=
 +
 
 +
Ebenso ist für die meisten Anwendungsprogramme das unterliegende [[Betriebssystem]] relevant. So gibt es für die meisten Programme z.B. eine win-x86_64 und eine linux-x86_64 Version. Das hat mit der Art und Weise zu tun, wie Programme, die nativ (auf [[Maschinencode]] und nicht [[Bytecode]]) compiliert wurden, mit Systemressourcen (z.B. Standard Ein- und Ausgabe) umgehen. Diese Ressourcen werden auf verschiedenen Betriebssystemen unterschiedlich bereitgestellt und können deswegen nicht mit dem gleichen Maschinencode behandelt werden.
 +
 
 +
=Java=
 +
 
 +
Javaprogramme haben dieses Problem nicht, da sie zu Bytecode übersetzt werden und eine speziell für eine gegebene Architektur geschriebene [[Java Virtual Machine|virtuelle Maschine]] (JVM) die finale Übersetzung von Java(-bytecode) zu Maschinencode übernimmt. Somit kann ein Javaprogramm auf jeder Architektur ausgeführt werden, für welche eine JVM existiert.

Aktuelle Version vom 22. Februar 2016, 22:06 Uhr

Unter einer (Rechner-)Architektur versteht man den Satz an Maschinenbefehlen, die ein Prozessor verstehen und ausführen kann. Dazu gehören unter anderem auch Dinge wie die Anzahl an verfügbaren Registern und die Byte-Reihenfolge.

Compiler

Da diese genannten Eigenschaften eines Prozessors von Hersteller zu Hersteller unterschiedlich sind, muss ein Programm für jede Architektur, auf der es ausgeführt werden soll, neu geschrieben werden. Aus diesem Grund wurden Compiler entworfen, die ein in einer gegebenen Programmiersprache verfasstes Programm in unterschiedliche Maschinensprachen übersetzen können.

Standards

Während zu Zeiten der 16- und 32-Bit- (die Anzahl an Bits, die ein einzelnes Speicherregister umfasst) Desktoparchitekturen eine gewisse Vielfalt herrschte, gibt es heute hauptsächlich nur noch den sogenannten amd-x86_64-Standard. Dieser wird von den beiden größten Herstellern --- Intel und AMD --- für Desktop-CPUs eingehalten. Somit müssen die meisten Programme für 64-Bit-Prozessoren häufig nur einmal compiliert werden und funktionieren auf vielen verschiedenen Endgeräten.

Bei den Herstellern von Microcontrollern mit 8- 16- und 32-Bit-Architekturen existieren jedoch viele verschiedene Standards, anhand derer auch heute noch Prozessoren produziert werden, die auf verschiedene Anwendungsfälle spezialisiert sind. Aus diesem Grund ist es oftmals immer noch wichtig, zu beachten auf welcher Architektur ein Programm compiliert wurde.

Betriebssysteme

Ebenso ist für die meisten Anwendungsprogramme das unterliegende Betriebssystem relevant. So gibt es für die meisten Programme z.B. eine win-x86_64 und eine linux-x86_64 Version. Das hat mit der Art und Weise zu tun, wie Programme, die nativ (auf Maschinencode und nicht Bytecode) compiliert wurden, mit Systemressourcen (z.B. Standard Ein- und Ausgabe) umgehen. Diese Ressourcen werden auf verschiedenen Betriebssystemen unterschiedlich bereitgestellt und können deswegen nicht mit dem gleichen Maschinencode behandelt werden.

Java

Javaprogramme haben dieses Problem nicht, da sie zu Bytecode übersetzt werden und eine speziell für eine gegebene Architektur geschriebene virtuelle Maschine (JVM) die finale Übersetzung von Java(-bytecode) zu Maschinencode übernimmt. Somit kann ein Javaprogramm auf jeder Architektur ausgeführt werden, für welche eine JVM existiert.