Autore Topic: Windows 10 e 8.1 64bit non installabile su tutte le cpu 64bit datate  (Letto 36 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Singolarity

  • Eng2ita Staff
  • ***
  • Post: 1.088
  • Karma: -63595
Forse non vi siete mai imbattuti in tale problema nemmeno al tempo di windows 8.1 64bit, ma potrebbe capitarvi prima o poi e casomai il problema è risolvibile (non sempre).
Windows 10 a 64bit (e anche 8.1 64bit) hanno aggiunto requisiti cpu ulteriori rispetto alle versioni 32bit dei medesimi. Si sapeva già che per montare qualsiasi windows superiore alla 8.0 occorreva che la cpu supportasse il PAE (Physical Address Extension, una funzione che permetteva di gestire oltre i 4Gb di ram anche sui sistemi 32bit, MS implementò questa funzione solo in alcuni windows server enterprise a 32bit), il No-Execute Bit o eXecute Disable Bit (per AMD anche detto NX-bit e per Intel XD-bit, anche conosciuta come EVP: Enhanced Virus Protection) che si tratta di una forma di protezione dei dati in memoria e per finire la presenza delle SSE2 (istruzioni aggiunte fin dai primissimi Pentium4 nel 2000).
Molti nonostante la presenza effettiva delle istruzioni 64bit nelle proprie cpu (EM64T per Intel e AMD64 per AMD) si sono però ritrovati una brutta sorpresa durante la verifica compatibilità con Windows 10 e 8.1 64bit, un errore di non compatibilità appunto della cpu per mancanza o disabilitazione di nuove istruzioni che MS ha inserito come indispensabili e sono: CMPXCHG16b, PrefetchW e LAHF/SAHF.

Cosa sono CMPXCHG16b, PrefetchW e LAHF / SAHF
vediamole singolarmente:

- L'istruzione CMPXCHG16b (anche detta CompareExchange128) esegue un atomic compare-and-exchange su valori a 16 byte. La traduzione dall'inglese in italiano è pessima quando si tratta di tecnismi informatici e quindi ve la metto in originale "CMPXCHG16B allows for atomic operations on octa-words (128-bit values). This is useful for parallel algorithms that use compare-and-swap on data larger than the size of a pointer, common in lock-free and wait-free algorithms."
Si tratta di una istruzione estesa alle 64bit visto che in origine è una evoluzione della CMPXCHG8B presente fin dalle cpu post-486.
In caso di non presenza di tale istruzione il media creation tool o upgrade assistant dovrebbero rilasciare un errore del tipo "Non è possibile installare Windows 10 perché il processore non supporta CompareExchange128", questo anche quando a volte la cpu lo supporti effettivamente, in tale caso basta un update del bios per vedere se le ultime versioni o qualche versione beta (visto che di sicuro parliamo di vecchie piastre madri) lo abbia incluso in modo attivo.
È supportato su tutti i processori moderni x86-64, sebbene alcune prime CPU 64bit non lo supportassero.
Come ho sottolineato tale istruzione CMPXCHG16B non è presente sui primi Athlon64/Turion64 ma solo dalla Rev.F in pratica quelle che già supportavano le DDR2 e non più le DDR1 (in poche parole funziona solo dagli Athlon64/Sempron64 su socket AM2 e non quelli sui più vecchi socket 754 o 939, sarebbero esclusi anche alcuni primissimi Athlon64X2 e 64FX che ancora erano su socket 939 e 940). Invece intel le ha aggiunte fin da alcuni Pentium 4 Prescott (solo socket 775 e non tutti nemmeno questi) e Celeron D (non su tutti nemmeno questi).

- L'istruzione PREFETCHW permette una assegnazione dei dati nella cache per un recupero più rapido in attesa di scrittura. PrefetchW è simile a PrefetchCHh utilizzato dai processori Intel. Questa istruzione è stata introdotta in AMD 3DNow!. La si trova in tutti i processori AMD fin dal primo Athlon, a dire il vero le 3DNow! nascono già al tempo dei K6-2+ e III+. Ma la vera funzionalità ottimale venne aggiunta solo con l'arrivo delle SSE3 arrivate per intel con i Pentium 4 Prescott e AMD con gli Athlon64 (Rev.E) nel 2005. Tuttavia, questa istruzione potrebbe non essere supportata in alcuni processori Intel a 64 bit anche precedenti i core 2 duo.

- Le istruzioni LAHF e SAHF caricano e memorizzano il contenuto del registro AH nel registro flags. Alcuni processori Intel senza funzionalità di virtualizzazione dell'hardware (VT-x) non supportano questa istruzione quando sono in esecuzione a 64-bit long mode; questi sono per lo più limitati a determinati processori di fascia bassa precedenti i Core 2 Duo. Anche alcuni processori AMD64 molto vecchi mancano di questa funzionalità.
AMD introdusse queste istruzioni solo dagli Athlon64/Turion64 (Rev. E) del 2005, mentre intel solo da alcuni Pentium 4 Prescott (stepping G1) su socket 775 sempre verso fine 2005.


Da queste istruzioni che vuole Windows 10 e 8.1 64bit per essere installati restano fuori anche particolari cpu economiche di fascia bassa uscite sempre tra il 2005-2010 circa...tipo alcuni usati sui portatili di fascia bassa anche ultra low voltage come Celeron Mobile del medesimo periodo e da parte AMD alcuni Sempron64 mobile, in particolare proprio quelli usati sui portatili potrebbero nascondere qualche mancanza in tali istruzioni nonostante siano casomai a 64bit.
Quindi in generale se avete una cpu 64bit più vecchia del 2010 circa sappiate che non è detto che potrà supportare Windows 10 64bit. Però c'è da dire che in tutte queste vecchie cpu 64bit è comunque sempre possibile montare la versione a 32bit, considerando che si tratta di cpu molto vecchie spesso le loro piastre madri non andavano oltre i 4Gb di ram, era assai raro, di conseguenza avendo meno ram resta la possibilità di potergli montare appunto la versione a 32bit la quale non ha bisogno delle istruzioni aggiuntive che sono solo tipiche dei 64bit. Altrimenti una buona distro linux 64bit ha molte meno pretese ;) e va alla grande anche con un solo Gb di ram.

Come fare a sapere se queste istruzioni per Windows 10 64bit sono presenti o meno???
Ci sono vari sistemi, il primo in assoluto lo stesso tool media creation offerto da MS può farvi da test, nel senso che se provate a fare un upgrade casomai da Windows 7 64bit a Windows 10 64bit e avete appunto una cpu 64bit non conforme, MS stessa durante le "operazioni preliminari" vi avviserà che non può fare l'upgrade indicando proprio come motivo la cpu.
Un'altro modo è usare qualche tools per identificare meglio la cpu, vi consiglio coreinfo, un tool di Sysinternals che per altro è divenuta di MS, va lanciata da prompt dei comandi in quanto rilascia un output solo testuale, tra le varie istruzioni dovrete cercare CX16 (per la CMPXCHG16B), LAHF-SAHF e PREFETCHW a fianco di queste ci deve essere un * (asterisco) che appunto ne indica la presenza, se invece c'è un - (trattino) purtroppo ne indicherà la mancanza.

Come già detto la soluzione ottimale per fare una verifica ritengo che sia l'uso di coreinfo, ma se casomai non avete a portata di mano tale pc vi consiglio di "spulciarvi" l'ottimo sito cpu-world in cui per ogni cpu e modello hanno messo un elenco completo di tutte le istruzioni presenti oltre che comparazioni benchmark (se avete attivo un ads blocker mettete tale sito in whitelist altrimenti non vi rilascia i dettagli delle cpu).
« Ultima modifica: 26/07/2020, 17:23 da Singolarity »