
Bei Computern befindet sich der Kernel zwischen der Anwendung und der Hardware (CPU) und ermöglicht der Software die Interaktion mit der Hardware.
Warum können Entwickler ihre Anwendungen also nicht vom x86-Windows auf das Microsoft Surface X (SQ1- und SQ2-Prozessor) übertragen? Beispielsweise Chrome, Firefox, einige Benchmark-Tools und Spiele … Ich dachte, Microsoft müsste nur seinen x86-64-Kernel durch die ARM-Version ersetzen, und die meisten Anwendungen würden problemlos funktionieren.
Das Gleiche gilt für Linux.
Antwort1
In diesem Fall tut der Kernel weniger, als Sie erwarten. Insbesondere übersetzt/analysiert/interpretiert/verändert der Kernel den Maschinencode, aus dem eine kompilierte Binärdatei besteht, nicht.
wenn jemandkompiliertQuellcode in eine Binärdatei, was sie tun, ist, diesen Quellcode tatsächlich zu übersetzen inMaschinencode-Anweisungendie die CPU versteht.
Eines der Dinge, diex86eine Plattform, ist eine gemeinsameBefehlssatzauf aller kompatiblen Hardware. Auf diese Weise kann ein Compiler davon ausgehen, dass jede x86-CPU die Anweisung versteht PUSH
und das Erwartete tut, wenn Sie sie über einen Thread ausführen.
ARMverwendet einen anderen Befehlssatz. In diesem Fall muss der Quellcode in Anweisungen kompiliert (übersetzt) werden, die eine ARM-CPU verstehen kann (Anweisungen, die in ihrem Befehlssatz definiert sind).
Nicht alle Programme verwenden „native“ Binärdateien (Binärdateien, die ausschließlich aus wohlgeformten Anweisungen bestehen, die vom Befehlssatz der CPUs implementiert werden). Sprachen wie Java und C# werden in eine virtuelle Assemblersprache kompiliert und zur Laufzeit JIT-kompiliert, um native Anweisungen zu erhalten. Andere verwenden Interpreter, die für eine bestimmte Plattform angepasst wurden.
Zusammenfassend lässt sich also sagen, dass ARM-CPUs die Sprache, die von x86-kompilierten Programmen verwendet wird, nicht erkennen und umgekehrt. Während der Kernel Dinge wie den Hardwarezugriff und die CPU-Planung steuert, ändert er nicht die Anweisungen der auf dem System ausgeführten Programme. Er erstellt lediglich den Prozess, startet die Ausführung und gewährt der CPU Ausführungszeit, sodass viele Prozesse diese halbgleichzeitig gemeinsam nutzen können.