Pourquoi Windows 7 ne peut-il pas être installé sur un système basé sur un processeur ARM?

12

Aujourd'hui, je lisais des nouvelles ( 1 , 2 , 3 , 4 ) sur Microsoft Windows 8 et j'ai vu que l'une des nouvelles fonctionnalités est qu'il peut fonctionner sur un système basé sur un processeur ARM . Cela me fait me demander les raisons pour lesquelles cela ne peut pas être fait avec la version actuelle de Windows (Seven).

Quelles sont les limites réelles de Windows 7 pour savoir comment l'installer sur un système basé sur un processeur ARM? Cela aurait à voir avec la version du noyau, les pilotes, l'architecture ou même un mélange de ces facteurs?

Jusqu'à ce que je sache, je peux installer Linux sur un ARM, donc je ne peux même pas installer Windows Seven sous une machine virtuelle VMWare sur un ARM?

Diogo
la source
1
Notez que Windows 8 devrait s'exécuter sur ARM. windows8news.com/2011/01/05/…
JSB
1
Vous pouvez installer Windows 7 sur une machine virtuelle exécutée dans un système d'exploitation ARM. Il vous suffit de trouver un programme de machine virtuelle qui s'exécute sur ARM et est capable d'exécuter un invité x86.
Percée

Réponses:

30

Pour que les binaires s'exécutent sur un processeur ARM, ils doivent être compilés spécifiquement pour ce processeur ou être exécutés dans un émulateur.

Étant donné que les systèmes Linux sont open source, les utilisateurs peuvent les compiler spécifiquement pour les systèmes ARM et réécrire tout code spécifique x86. Étant donné que la source pour Windows est fermée, à moins que Microsoft ne publie une version ARM, elle ne peut pas être recompilée et exécutée dessus.

Il y a d'autres problèmes avec le passage aux systèmes ARM, mais c'est probablement le plus gros.

Pour autant que je sache, VMware n'émulera pas un x86. Je pense que qemu peut le faire, mais je ne l'ai pas utilisé auparavant pour émuler ARM x86, juste pour émuler ARM x86. Il y aura un impact significatif sur les performances si cela fonctionne.

Alors que tout programme doit être compilé pour l'architecture sur laquelle il est destiné, un système d'exploitation doit souvent être beaucoup plus personnalisé en fonction de l'architecture spécifique. Les systèmes d'exploitation sont responsables de choses comme la planification et le changement de tâche, qui fonctionnent avec le processeur à des niveaux très profonds.

jhulst
la source
8
Notez que vous pouvez généraliser la première phrase en supprimant le mot "ARM" et avoir toujours une vraie déclaration - en règle générale, les binaires doivent toujours être compilés pour l'architecture sur laquelle ils s'exécutent, ou bien avoir une couche d'émulateur ou d'interprète .
Shinrai
4
@jhulst J'ai utilisé qemu pour émuler x86 sur PowerPC, et, oui, c'est incroyablement lent.
Cajunluke
Soi-disant VPC (que MS a acheté) a fait x86 sur PPC décemment avec une recompilation dynamique. Certes, c'était il y a longtemps, et je ne l'ai jamais essayé moi-même. QEMU est horrible à part sa portabilité IMO. Il fait très bien certaines choses (comme ne pas avoir besoin de crochets du noyau) mais c'est inefficace.
Journeyman Geek
Ce port QEMU vers la plate - forme hôte ARM ne semble pas très courant et je n'en ai pas trouvé d'autres.
RedGrittyBrick
Les pilotes de périphériques seraient également un problème, en particulier pour tout ce qui est limité aux systèmes ARM.
CarlF
8

La réponse simple est "MS n'a pas publié de port" (bien que Windows 8 soit censé être porté sur ARM), simplement parce que cela n'avait aucun sens commercial à l'époque. Si vous voulez entrer, si la SEP pouvait ...

Eh bien, historiquement, la famille NT a fonctionné sur une gamme de processeurs - NT fonctionnait sur Alpha, PPC et MIPS, et il y avait des ports prévus pour les architectures Clipper et SPARC. Cela est possible car Windows NT a résumé les parties du code dépendant du matériel (la couche HAL ) et la réécriture de cette section et la recompilation de tout le reste devraient faire l'affaire (bien qu'en théorie, les logiciels basés sur .NET soient censés être indépendants du matériel).

Contrairement à Linux, qui, si je me souviens bien, a des branches de noyau séparées pour chaque architecture, soi-disant SEULE la HAL est spécifique au matériel, et le reste est commun - je crois qu'une fois qu'une HAL pour la plate-forme ARM en question a été créée, elle devrait être relativement trivial, et pas différent du codage pour divers bits de matériel, surtout si le système était par ailleurs conventionnel, par exemple, en utilisant PCI-E et d'autres interfaces standard de l'industrie.

En supposant que Microsoft a publié un port ARM de Windows 7, tout logiciel non interprété ou fonctionnant sur une machine virtuelle comme JVM, LLVM ou CLR devrait être recompilé ou exécuté sur une couche de traduction, comme Rosetta ou l'ancienne compatibilité 68K couche sur les anciens macs , qui connaît le code spécifique x86 (et l'exécute en émulation de manière transparente), et il y a suffisamment de puissance de processeur pour la traduction.

Compagnon Geek
la source
Le logiciel .NET peut fonctionner sur presque toutes les architectures majeures à l'aide de Mono, qui est un compilateur / runtime Open Source pour les programmes .NET qui s'exécute sous la plupart des principaux systèmes d'exploitation. Bien sûr, cela ne concerne pas directement la question d'origine.
CarlF
Et bien non. Il est pertinent pour la partie où «le logiciel devrait être recompilé». Je crois que CLR est potentiellement indépendant de la plate-forme et / ou le code .net est optimisé / compilé lors de l'installation. J'ai totalement oublié le mono, malheureusement, c'est l'une de ces choses qui fonctionne tranquillement en arrière-plan; p
Journeyman Geek
@CarlF la mise en garde est que vous ne pouvez pas utiliser P / Invoke pour accéder aux binaires win32. Au moment où vous devez le faire, vous perdez votre support multiplateforme. Il s'agit moins d'un problème que de la croissance du cadre .Net; mais si votre application a besoin de s'interfacer étroitement avec des dépendances de systèmes tiers, le code natif devient assez courant.
Dan est en train de jouer par Firelight
2

Vous ne pouvez pas exécuter de fichiers binaires sur des processeurs dont l'architecture est différente de celle à laquelle les fichiers binaires ont été compilés.

Vous ne pouvez pas exécuter un AMD64 Linux sur ARM, tout comme vous ne pouvez pas exécuter AMD64 linux sur un processeur i386 (32 bits). Vos seules options sont d'émuler un processeur entier (voir qemu ) puis de faire de votre mieux.

VMware / VirtualBox ne sont pas des émulateurs de processeur, vous n'avez donc pas de chance là-bas également.

akira
la source