VirtualBox e l’errore CompareExchange128

Domanda: Ho apprezzato molto l’articolo su VirtualBox pubblicato su PC Professionale. Seguendo le indicazioni riportate, ho installato VirtualBox in versione portable sulla partizione E:\ del mio computer. La macchina ospite è basata sulla scheda madre AsRock N68C-GS FX, processore AMD FX-6100 a 3,4 GHz, scheda grafica Nvidia GeForce GT620, 8 Gbyte di Ram, disco Serial Ata da 1 Tbyte, due partizioni con Windows 7 SP1 a 64 bit e Windows XP Professional. Per VirtualBox portable ho utilizzato la versione 4.1.4-6.4.5. Per VirtualBox ho installato la versione 4.3.2-90405 e l’Extension Pack 4.3.2-90405. VirtualBox è stato installato su una specifica partizione con un disco virtuale da 30 Gbyte allocato dinamicamente. In questa configurazione ho creato senza problemi una macchina con Windows 8 Professional a 64 bit con regolare licenza. Il sistema virtuale è stato poi aggiornato con Windows Update. I problemi sono cominciati quando ho tentato di passare a Windows 8.1. Con la procedura prevista da Microsoft, l’aggiornamento si è bloccato mostrando il messaggio d’errore “Impossibile installare Windows 8.1 perché il processore in uso non supporta CompareExchange128”. Ho provato a utilizzare l’Assistente Aggiornamento sulla partizione Windows 7 per verificare se fossero soddisfatti i requisiti per Windows 8.1. L’assistente non ha dato segnalazioni particolari e mi ha proposto l’acquisto di Windows 8.1. A questo punto ritengo che sia un problema di VirtualBox. In Rete ho trovato che simili blocchi si riscontravano con l’installazione su macchina virtuale di Windows 8.1 Preview, ma con VirtualBox 4.2.14 o 4.2.16 (che prevedeva l’installazione sulla stessa partizione del sistema operativo della macchina fisica). Il problema avrebbe dovuto essere risolto con la versione 4.2.18. Esiste una soluzione per installare Windows 8.1 su VirtualBox portable?


oracle-virtualbox-vm-softwareRisposta
: L’impossibilità  di completare l’aggiornamento a Windows 8.1 all’interno della macchina virtuale è dovuta al fatto che questo sistema operativo ha aggiunto nuovi requisiti hardware rispetto alla versione precedente. In particolare, l’istruzione Cmpxchg16b (CompareExchange128) è un’estensione della Cmpxchg8b già  disponibile nella maggior parte dei processori derivati dall’Intel 80486 per eseguire operazioni atomiche su parole ottali. È utilizzata principalmente per gli algoritmi paralleli che hanno bisogno di puntatori in grado di indirizzare maggiori quantità  di dati da “confrontare e scambiare”, condizione che è abbastanza comune in algoritmi lock-free e wait-free. In mancanza dell’istruzione Cmpxchg16b, il programmatore dovrebbe scrivere del codice alternativo per gestire la stessa situazione. Per esempio, l’assenza di questa istruzione non consente alle versioni a 64 bit di Windows di accedere a una quantità  di memoria superiore a 8 Tbyte in modalità  utente. È per questo motivo che la presenza di questa istruzione è obbligatoria con Windows 8.1.

Le istruzioni Lahf (Load AH from flags) e Sahf (Store AH from flags) sono utilizzate per caricare o archiviare istruzioni relative ad alcune flag e sono necessarie per gestire alcune condizioni che possono verificarsi durante il calcolo in virgola mobile o per la gestione delle macchine virtuali.

Infine, la funzione PrefetchW è utilizzata per richiedere al processore di caricare una linea di almeno 32 byte all’interno della memoria cache di primo livello. Un utilizzo accorto di questa istruzione può comportare notevoli benefici in termini di prestazioni per le configurazioni hardware che la supportano.

Per il caso specifico del lettore, ricordiamo che all’interno della macchina virtuale il processore stesso è emulato dal software virtualizzazione. Per questo motivo è possibile che la Cpu virtuale non abbia alcune delle prerogative che sono altrimenti presenti nel processore “hardware” del computer host. Le versioni di VirtualBox 4.2.18 e successive supportano ufficialmente il sistema operativo Windows 8.1 e mettono a disposizione le prerogative sopra descritte. È quindi sufficiente entrare nelle impostazioni di VirtualBox e, nella sezione General, selezionare Windows 8.1 nel campo relativo al sistema operativo. Con questa operazione saranno attivate tutte le funzioni necessarie al suo funzionamento. Con le versioni precedenti di VirtualBox è ancora possibile attivare il supporto per la funzione Cmpxchg16b, ma questo parametro deve essere fornito da linea di comando tramite l’utilità  VBoxManage. Considerata la disponibilità  della versione successiva, consigliamo al lettore di aggiornare il software per la gestione della macchina virtuale e di risolvere il problema utilizzando le impostazioni predefinite dagli sviluppatori.

Nessun Articolo da visualizzare