Processore multicore: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 65:
Le prime implementazioni nei sistemi Microsoft si ha con la versione SP2 professional di Windows XP, con un supporto limitato all'architettura hardware SMP ([[Symmetric multiprocessing]] o [[Symmetric multiprocessor]]) dove i core o processori accedono ad uno spazio di memoria condiviso, mentre dal punto di vista software viene usata la funzionalità processor affinity che identifica i core come Core0 e Core1, consentendo all'utente di decidere su quale di essi avviare ed eseguire l'applicazione, successivamente l'approccio venne rivisto prima con Windows Vista poi con Windows 7, quest'ultimo supporta soluzioni hardware NUMA ([[Non-Uniform Memory Access]])<ref>[http://www.storiainformatica.it/windows/44-sistemi-operativi/windows/22-windows-e-le-cpu-multi-core Windows e le CPU Multi-Core]</ref>.
 
Nei sistemi Apple [[macOS]] con la versione 10,.6 c'è l'introduzione del [[Grand Central Dispatch]] per implementare il [[parallelismo a livello di thread]], migliorando il supporto ai multicore.
 
Nei sistemi basati su kernel Linux, si ha il primo supporto all'hardware SMP con la versione 2 del kernel, che comprendeva un big kernel lock (BKL) per la gestione degli interrupt, successivamente con la versione 2.2 i gestori d'interrupt avevano [[spinlock]] differenziati, alcune distribuzioni e ottimizzazioni inclusero il codice di supporto per sistemi NUMA. Nella versione 2.4 sempre più sottosistemi vennero gestiti al di fuori del BKL, grazie all'introduzione di nuovi database lock, ma presenta ancora spinlocks che coprono interi sottosistemi, questo permise di migliorare la scalabilità, che migliorò ulteriormente con la versione 2.5 del kernel, che ottimizzò la cache della pagina dei lock di conversione da un singolo blocco di codice a più blocchi di dati.<br />Con la versione 2.6 il BKL venne relegato ad una piccola parte del codice del kernel, in quanto la maggior parte del BKL venne convertito in database lock con elevata sintonizzazione e scalabilità per eliminare il ripetersi della linea di cache condivisa, mentre nei sottosistemi critici c'è un certo uso di approcci di lock meno avanzati, quali [[Read-Copy-Update|Read-Copy-Update (RCU)]], venne introdotto un nuovo programmatore multi CPU di coda, risolvendo le contese sulle code di esecuzione globali condivise da più CPU, riducendo il sovraccarico dei processi di pianificazione in parallelo. Questo scheduler venne introdotto anche su alcuni kernel 2.4 delle ultime distribuzioni.<ref>[http://halobates.de/lk09-scalability.pdf Linux multi-core scalability]</ref><ref>[http://www.tuxradar.com/answers/501 How well does Linux support multi-core CPUs?]</ref>