Menu

Windows e le CPU Multi-Core

L'inizio dell'era delle CPU Dual Core, per il mercato desktop, risale al 2005 con la comparsa degli Intel Pentium D e degli AMD Athlon 64 X2. In particolare, per Intel, si tratta della naturale evoluzione della tecnologia Hyper-Threading, introdotta sulle ultime generazioni di P4, che permetteva di avere una sorta di Core Virtuale aggiuntivo da utilizzare per migliorare le funzionalità multi-threading.

intel_quadcore

Il sistema operativo prevalente, in quel periodo, è Windows XP che supporta le nuove CPU con l'SP2 e solo nell'edizione Professional. Il supporto offerto è alquanto primitivo e limitato dall'architettura SMP (Symmetric Multiprocessing o Symmetric Multiprocessor) in cui le unità Core (o i vari processori) accedono ad uno spazio di memoria condiviso. Ciò comporta non pochi problemi di accesso concorrente e condivisione della memoria stessa.

Dal punto di vista operativo, XP fornisce la  funzionalità Process Affinity che identifica i Core come Core0 e Core1 e permette all'utente di decidere su quale di essi avviare ed eseguire l'applicazione.

In realtà la maggior parte delle applicazioni sfruttava il Core0, mentre solo alcune, particolarmente avare  dal punto di vista computazionale (vedi giochi), tentavano di utilizzare anche il secondo Core.

Con l'avvento di Vista, Microsoft rivede completamente la gestione delle unità Multi-Core, integrando nel Kernel funzionalità avanzate per il corretto accesso concorrente alla memoria. Comunque la tecnologia Core al momento dello sviluppo di Vista è ancora in fase di rodaggio e la realizzazione delle nuove feautures relative si rileva alquanto problematica.

Il grosso salto in avanti avviene con Windows 7. Orami la tecnologia Multi-Core è delineata (Intel con la serie i3/i5/i7 e AMD con la serie Phenom II) ed il nuovo Windows la supporta in pieno con l'architettura NUMA (Non-Uniform Memory Access ). NUMA permette di assegnare una porzione di memoria in modo esclusivo ad ogni Core (reale o virtuale HT),  ponendo i processi al riparo da problemi di condivisione. Ciò, però, rende più difficile lo switch tra un Core all'altro, spingendo Microsoft ad inserire delle funzionalità specifiche (scritte in C) per la copia della memoria relativa.

Un'ulteriore ottimizzazione del nuovo OS è un'Affininity evoluta, attraverso la quale si tenta di eseguire il nuovo thread dove è già stato eseguito l'ultimo dello stesso processo.

La nuova release di Windows rivede completamente i meccanismi interni di sincronizzazione dell' Engine Grafico (GDI+), in modo da renderne l'accesso non-esclusivo ed effettuare contemporaneamente più operazioni di rendering. Prima, infatti, l'accesso da parte di un thread inibiva qualsiasi altra attività, ponendo, di fatto, il sistema in uno stato di blocco apparente (freeze).

Questo era anche uno dei motivi principali della lentezza di Vista.

Nonostante tutte queste innovazioni siano direttamente apprezzabili dagli utilizzatori di Windows 7, c'è chi ritiene che sia giunta l'ora di rivedere completamente le architetture dei moderni sistemi operativi. Tra questi anche Dave Probert , Kernel Architect di Windows, che in un suo post ha ribadito la necessità di un nuovo approccio concettuale e realizzativo per i prossimi OS, in modo da poter sfruttare al meglio le nuove potenzialità delle CPU Multi-Core.

Va infine chiarito che, oltre all'OS, è necessario realizzare anche applicazioni in grado di sfruttare più Core, e quindi capaci di suddividere le proprie elaborazioni tra più unità parallele. Questo è quello che ha spinto Intel a rilasciare opportuni tool e la stessa Microsoft ad includere in dotNet 4 una versione P- (Parallel) di molte funzionalità tipiche del framework di sviluppo.