L’architettura x86 resta sempre protagonista nonostante il sempre più convinto utilizzo della piattaforma ARM anche in segmenti di mercato precedentemente non battuti e la recente consacrazione di RISC-V a soluzione più promettente in ottica futura.
È stata Intel nel 1978, con il lancio del suo storico processore 8086, a presentare l’architettura x86 sviluppandone nel corso del tempo nuove “generazioni”. Nel corso degli anni, l’architettura x86 si è evoluta fino ad arrivare alla “declinazione” x86-64, che supporta l’esecuzione di applicazioni a 64 bit. L’architettura x86-64 (x64) è nota anche come AMD64 perché fu proprio AMD che nel 2003 ha presentato la prima CPU (Opteron) con le estensioni a 64 bit: in un altro articolo abbiamo parlato delle origini dell’architettura x86 e del motivo per cui è rimasta feudo di Intel e AMD.
Il nome x86 deriva dalla convenzione di denominazione dei processori Intel. Originariamente, i processori Intel venivano battezzati utilizzando un numero a quattro cifre, si pensi ad esempio all’Intel 8086. Tuttavia, quando sono stati introdotti i successivi processori della famiglia, come l’Intel 80286, non fu possibile mantenere la convenzione dei numeri a quattro cifre. Quindi, Intel ha utilizzato la “x” come segnaposto per le cifre mancanti nella denominazione, dando appunto luogo al termine “x86“.
Dopo tanti anni dall’introduzione di x86-64, di recente è emerso che Intel ha intenzione di semplificare l’architettura x86. In un altro articolo abbiamo visto che gli ingegneri della società di Santa Clara stanno lavorando alla nuova architettura x86S che da un lato rende più facile la progettazione dei futuri processori, dall’altro migliora la fase di avvio di qualunque computer rimuovendo il supporto a 16 bit e, per larga parte, anche quello a 32 bit. Il risultato sarebbe una famiglia di processori “inedita”, capace di avviarsi direttamente in modalità x86-64.
Un white paper tecnico di Intel fornisce molti dettagli sui cambiamenti che l’azienda sta prendendo in considerazione. Alcune delle modifiche sono piuttosto radicali anche se all’atto pratico gli effetti sui modi con cui la maggior parte delle persone usa un computer oggi, sarebbero quasi irriconoscibili.
Perché semplificare l’architettura x86
Intel ha intenzione di semplificare l’architettura x86 per diversi motivi. Innanzi tutto, un’operazione del genere aiuta a migliorare significativamente l’efficienza dei processori Intel: riducendo la complessità dell’architettura si può anche migliorare la velocità di esecuzione delle istruzioni e la gestione delle risorse del processore. Un’architettura più snella, inoltre, può richiedere meno risorse e sforzi nella fase di sviluppo, consentendo a Intel di portare più rapidamente sul mercato nuovi prodotti e di ridurre i costi.
Semplificare l’architettura porta inoltre a rendere i processori x86 maggiormente adatti per l’utilizzo nei dispositivi con risorse limitate mantenendo al contempo un livello adeguato di prestazioni.
Il rovescio della medaglia è ovviamente il problema della retrocompatibilità: si tratta di un aspetto, questo, per cui Intel è famosa da decenni. Ma secondo gli ingegneri di Intel, sarebbe ormai giunta l’ora per rompere con il passato liberandosi della pesante eredità di implementazioni stratificatesi a livello di processore nel corso del tempo.
Cos’è la long mode del processore
Dall’introduzione dei processori x86-64, è stata aggiunta una modalità di funzionamento chiamata long mode: essa consiste fondamentalmente in due modalità secondarie che sono l’attuale modalità a 64 bit e la modalità di compatibilità (32 bit, solitamente indicata come IA32e nella documentazione di AMD64). La modalità a 64 bit è di fatto un “mondo nuovo” rispetto a ciò che esisteva prima, vuoi per l’aggiunta di una serie di nuovi registri (ne parliamo nell’articolo su come funziona un processore), vuoi per la sostanziale assenza della segmentazione utilizzata sui processori 8086. Altre caratteristiche variano in maniera significativa rispetto alla vecchia modalità a 32 bit, nota anche come modalità protetta.
Implementare un processore come x86S, significherebbe bypassare l’abituale serie di passaggi che avvengono all’avvio della CPU e che i chip sono obbligati a gestire all’avvio del sistema: dalla modalità reale a 16 bit alla modalità protetta a 32 bit alla modalità lunga a 64 bit; oppure dalla modalità a 16 bit direttamente alla modalità a 64 bit.
Addio a ring 1 e ring 2: cosa sono e a che cosa servono
Oltre ad avviare il processore direttamente nella modalità a 64 bit, Intel ha pianificato – come evidenziato nell’articolo citato in apertura – di eliminare anche il ring 0 a 32 bit oltre ai successivi ring 1 e ring 2. I ring sono livelli di privilegio presenti nelle CPU x86: sono progettati per separare il codice che deve funzionare con i privilegi più ampi (ad esempio il kernel) dal codice utente, consentendo un controllo granulare degli accessi e garantendo la sicurezza e l’affidabilità del sistema operativo.
Un ring più basso corrisponde a un livello di privilegio più elevato, mentre un ring più alto indica un livello di privilegio più basso. Il ring 0 ha accesso completo a tutte le risorse del sistema, inclusi i registri del processore, la memoria e i dispositivi hardware. I ring 1 e ring 2 sono livelli di privilegio intermedi utilizzati da componenti di sistema e driver che richiedono un livello di privilegio più elevato rispetto al codice utente ma inferiore rispetto al kernel. La maggior parte dei sistemi operativi moderni utilizzano solo il ring 0 e il ring 3, saltando i livelli intermedi per semplificare il modello di protezione.
Storicamente, solo due sistemi operativi mainstream per PC hanno effettivamente utilizzato anche ring 1 e ring 2: uno era IBM OS/2, l’altro è stato Novell Netware 4 e versioni successive.
Da ultimo, il ring 3 contraddistingue la cosiddetta user mode: a questo livello viene gestito ed eseguito il codice delle applicazioni utente, come programmi e processi applicativi. Ciò che viene eseguito in seno al ring 3, ha accesso solo a una parte limitata delle risorse del sistema e non può comunicare direttamente con l’hardware o eseguire istruzioni con privilegi elevati.
La “perdita” di ring 1 e ring 2, tuttavia, non creerà problemi a nessuno: qualunque sistema operativo che richiede l’avvio in modalità a 16 bit come il vecchio MS-DOS o Windows 9x, già non possono essere caricati su qualunque moderna macchina basata su BIOS UEFI. Quanto alla rimozione del ring 0 a 32 bit, gli utenti non sarebbero in grado di eseguire, ad esempio, un hypervisor x86-32 ma oggi chi ne sentirebbe la necessità quando le migliori soluzioni per la virtualizzazione lavorano a 64 bit godendo delle migliorie architetturali che derivano dalla possibilità di usare uno spazio di indirizzamento molto più ampio?
Inoltre, Intel (che come abbiamo sottolineato in precedenza, fa del concetto di retrocompatibilità il suo karma) permetterà comunque, anche con il lancio della nuova famiglia di processori x86S, il caricamento di codice a 32 bit. Lo si potrà fare, ad esempio, tramite una macchina virtuale utilizzata per installare e avviare un sistema guest a 32 bit (x86-32): l’hypervisor, infatti, si occuperà comunque di replicare in virtuale il firmware di sistema, la motherboard, le schede video, le schede di rete e così via.
Non solo. A livello di ring 3, x86S permetterà comunque di eseguire applicazioni a 32 bit purché il sistema operativo fornisca le librerie e le API appropriate, ovviamente. UEFI ha già eliminato in passato la possibilità di avviare sistemi operativi a 16 bit su bare metal e quasi nessuno se ne è accorto. Con l’espressione bare metal ci si riferisce all’avvio diretto di un sistema operativo senza il bisogno di un sistema operativo ospitante (host) né di un hypervisor. In pratica, significa avviare un sistema operativo direttamente sulla macchina fisica senza un layer di virtualizzazione o un ambiente ospitante. La stessa cosa è destinata a succedere anche con la modalità protetta a 32 bit: e anche in questo caso, i tempi sono ormai più che maturi.