I computer moderni hanno strati di software e hardware. Al livello più basso c'è l'hardware che elabora un sottoinsieme del set di istruzioni della CPU più qualsiasi istruzione che è solo firmware. Si noti che in alcune implementazioni, il firmware può avere un set di istruzioni completamente separato dalla CPU.
Successivamente c'è il firmware, che intercetta le operazioni che la CPU non può eseguire e le simula o fornisce un interrupt di "codice operativo non valido" al sistema operativo. A questo livello, il set di istruzioni pubblicato della CPU è completo.
Il sistema operativo è il livello successivo. Nella maggior parte delle implementazioni, gestisce gli interrupt dalla CPU/firmware e fornisce servizi ai programmi applicativi come l'allocazione della memoria e l'input/output. Il sistema operativo opera in "modalità privilegiata" dove ha accesso alla memoria e alle istruzioni che non sono disponibili al programma applicativo.
Il livello del programma applicativo funziona in "modalità applicazione" dove non può eseguire istruzioni privilegiate e non può accedere direttamente ai dispositivi. Usa i servizi del sistema operativo per richiedere cose al sistema operativo come I/O, allocazione della memoria, accesso al file system, ecc.
Alcune implementazioni possono avere più livelli di firmware e anche sistemi operativi. Alcune usano un computer esterno per controllare le CPU del sistema principale.