So già che il titolo di questo post sul blog di Appunti Digitali può sembrare provocatorio. Del resto quando si parla di sistemi operativi Microsoft, anche se in realtà tale discorso è applicabile a molti altri contesti, è molto facile farsi trascinare da ciò che potrebbe essere definito tifo, ma che io preferisco chiamare passione per l’informatica, e lanciarsi nei cosiddetti flames.
Windows 7 è alle porte, la RTM (Release To Manufacturing), cioè essenzialmente la versione finale, è attesa nel giro di pochi giorni o al più settimane, e l’idea che ho personalmente avvertito nel mare delle opinioni e delle discussioni che alimentano quotidianamente internet è che Windows 7 sia considerato migliore del suo predecessore Windows Vista.
In realtà molto è stato e ci sarebbe da discutere sulla cattiva nomea che quest’ultimo si è ritagliato in quanto diverse accuse risultano essere a mio modo di vedere ingiuste nei confronti di questo sistema operativo.
Indubbiamente Windows Vista, introducendo un kernel rinnovato, un nuovo driver model ed un diverso approccio alla sicurezza, ha rotto la compatibilità con moltissime applicazioni e dispositivi hardware al punto da costringere chi voleva fare l’update da Windows XP ad effettuare modifiche hardware e software, aspetto che non ha di certo fatto la felicità di tutti i consumatori, ma che era inevitabile.
Pensare, infatti, che da Windows XP in poi, datato 2001, non si sarebbe dovuto modificare niente delle componenti a basso livello di Windows in nome della retro compatibilità è bizzarro. Dal 2001 al 2006, infatti, di passi in avanti l’informatica ne ha compiuti parecchi: i processori a più core non esistevano, internet non era diffusa ed utilizzata come oggi, i video non avevano ancora abbracciato lo streaming e l’alta definizione e le applicazioni richiedevano quantitativi di memoria più modesti.
Windows XP, benché in termini di stabilità sia stato un immenso passo in avanti rispetto ai vecchi sistemi Windows 9x/ME, nel corso degli anni ha mostrato i limiti della sua anzianità e, in tal senso, le gravissime falle di sicurezza sfruttate dai worm Blaster e Sasser, così come l’incapacità di accelerare in hardware l’interfaccia grafica sfruttando le sempre più evolute GPU, ne sono solo alcuni esempi. In fin dei conti da sempre l’evoluzione dei personal computer ha portato a dover rinnovare il proprio hardware e software e, benché qualcuno possa essere stanco di questa prospettiva, non si può di certo pretendere l’immobilismo tecnologico in nome del risparmio economico.
Chiusa questa parentesi su Windows Vista, essendo questa la rubrica dedicata al “Multimedia e d’intorni”, è mia intenzione approfondire alcune novità di Windows 7 che lo renderanno effettivamente migliore di Windows Vista, almeno per quanto concerne la gestione dell’interfaccia grafica e della memoria.
Nel corso dello sviluppo di Windows 7, gli ingegneri di Microsoft hanno analizzato molti dei casi che portano Windows Vista e i suoi predecessori ad una gestione dell’interfaccia grafica non ottimale, al punto da compromettere la prontezza di risposta dell’interfaccia stessa. Quante volte vi sarà capitato di avere in esecuzione due o più applicazioni e che, a causa del blocco di una, l’intera interfaccia grafica del sistema operativo non risponda?
Naturalmente il blocco dell’applicazione non è imputabile a Windows, ma il fatto che l’interfaccia grafica smetta di rispondere sì, ed è proprio in questa direzione che è stato svolto un grosso lavoro di reingegnerizzazione dello stack GDI. Le GDI (Graphics Device Interface) sono le API di Windows che espongono tutte le funzionalità utili al disegno dell’interfaccia grafica e, se escludiamo casi particolari come la riproduzione video o l’accelerazione della grafica 3D, queste vengono utilizzate in tutte le applicazioni. Anche il browser attraverso il quale state leggendo questo post non fa altro che inviare al sistema operativo attraverso le GDI i dati necessari al rendering della pagina web.
Il problema riscontrato dagli sviluppatori di Microsoft è che nell’implementazione di Windows Vista e dei suoi predecessori, solo un’applicazione alla volta può effettuare chiamate all’API GDI per disegnare la propria interfaccia grafica.
Questo modo di gestire la condivisione e la sincronizzazione delle risorse grafiche del sistema operativo lo rende vulnerabile ad alcuni casi in cui un’applicazione acquisisce il diritto di chiamata alle GDI, ma non lo rilascia perché allo stesso tempo sta eseguendo un’altra lunga operazione (oppure si è bloccata).
In questo caso, nessun’altra applicazione potrà utilizzare le GDI fino a quando l’applicazione bloccante non ha completato le sue attività o, in caso di blocco, non viene terminata forzatamente. La soluzione a questo problema è stata la riscrittura del sistema di sincronizzazione delle chiamate all’API GDI che in Windows 7 permette a più applicazioni di condividerne le risorse. Particolare vantaggio, inoltre, ne potranno trarre i sistemi con processore multi-core perché in questo caso il sistema operativo potrà effettivamente gestire con maggiore efficienza più thread in parallelo che chiamano le GDI.
Il collo di bottiglia rappresentato dalla precedente gestione della concorrenza tra le chiamate GDI è stato, quindi, spostato dal sistema operativo allo scheduler della scheda video, il che consente a Windows 7 di essere limitato in questa particolare circostanza solo dall’implementazione hardware e software di quest’ultima.
Un altro elemento sul quale i programmatori Microsoft hanno posto particolare attenzione è l’occupazione della memoria dovuta all’interfaccia grafica. Windows Vista ha introdotto il Desktop Window Manager (DWM), la componente responsabile del disegno del desktop. Grazie a questa è stato possibile accelerare in hardware la gestione delle finestre dell’interfaccia grafica, funzionalità che ha reso possibili gli effetti di trasparenza e opacità tipiche del tema Windows Aero.
Ciò che tuttavia Windows Vista non può fare è accelerare in hardware il rendering dell’interfaccia grafica delle singole finestre, perché queste il più delle volte sono disegnate attraverso le GDI, API che, come abbiamo visto in precedenza, sono gestite interamente dalla CPU. Quando un’applicazione disegna la propria interfaccia grafica attraverso le GDI, la CPU esegue tutte le operazioni sulla memoria RAM di sistema.
Trattandosi di informazioni che devono essere utilizzate dalla scheda video per il rendering dell’interfaccia, una copia di questi dati viene copiata anche nella memoria video. Il risultato è che per ogni finestra visualizzata sul monitor, Windows Vista ne conserva una copia in memoria RAM ed una copia nella memoria della scheda video, comportando un impatto sull’occupazione complessiva della memoria che può diventare rilevante se il monitor ha una risoluzione elevata e/o se il computer è dotato di più monitor.
La soluzione a questo spreco di memoria è stata implementata in Windows 7 con l’ausilio di un nuovo driver model per le schede video: il Windows Display Driver 1.1 (WDDM 1.1). Rispetto alla versione 1.0 presente in Windows Vista, questo driver model accelera in hardware tutte le più comuni operazioni delle GDI, riuscendo quindi a scrivere direttamente nella memoria della scheda video, senza richiedere la copia delle stesse informazioni nella memoria RAM di sistema.
Alcuni test condotti internamente da Microsoft dimostrano che contrariamente al comportamento che si ottiene con la versione 1.0, il WDDM 1.1 mantiene costante l’occupazione della memoria di sistema all’aumentare del numero di finestre aperte.
Naturalmente per poter beneficiare di questa nuova funzionalità è necessario ottenere dal produttore del processore grafico della propria scheda video, driver compatibili con il driver model WDDM 1.1. In caso contrario il comportamento di Windows 7 sarà analogo a quello di Windows Vista.