Ci sono differenze nel modo in cui il DEP hardware è implementato su CPU di produttori diversi (Intel, AMD, nVidia, Texas, ...)?
Esistono differenze significative su come funziona il DEP hardware su x86 e ARM?
La CPU compatibile x86 ha un nome appropriato: sono compatibili l'una con l'altra. Ciò significa che lo stesso codice OS funzionerà su tutti loro. Quindi, dal punto di vista del codice che gira sul processore (che include il sistema operativo stesso), le cose non variano (molto) a seconda della marca. Le cose cambiano a seconda della generazione : i nuovi sistemi hanno il NX bit mentre i sistemi più vecchi devono affidarsi a trucchi con registri di segmento o complicate danze TLB / cache (vedi questa risposta per i dettagli).
Il concetto base è lo stesso per tutte le CPU moderne: lo spazio degli indirizzi è suddiviso in pagine a dimensione fissa (o, se sono supportate dimensioni di pagina diverse, le loro lunghezze sono tutte multiple di una data lunghezza atomica, normalmente 4 o 8 kB) . I diritti di accesso vengono applicati a granularità della pagina: un'intera pagina è leggibile e / o scrivibile e / o eseguibile.
Per quanto riguarda l'hardware, i dettagli sull'implementazione della MMU possono variare parecchio, ma all'interno di un quadro piuttosto generico : i diritti di accesso per ogni pagina sono memorizzati in tabelle (l'indirizzo di una tabella master viene registrato in uno specifico registro CPU) e memorizzati nella cache in una struttura dedicata (il TLB ) per un accesso più rapido. Ad ogni accesso alla memoria, i diritti per la pagina di destinazione vengono caricati dal TLB (il TLB viene riempito dalla RAM se necessario) e confrontati con il tipo di accesso. La CPU è ben consapevole del tipo di accesso alla memoria che sta facendo (sia che si tratti di esecuzione di codice o lettura di dati o scrittura di dati). La mancanza di supporto hardware per DEP nella vecchia MMU x86 è un'omissione dai progettisti Intel di quel periodo (circa 1982 per la 80386); probabilmente ha salvato uno strato di transistor da qualche parte. Il venerabile 68000 del 1979 non includeva una MMU ma era abbastanza intelligente da pubblicizzare il tipo di accesso sui suoi connettori per ogni accesso, e ha fatto distinguere l'esecuzione del codice dalle letture dei dati.
Sulla CPU ARM, sono in vigore gli stessi concetti (sono ancora i diritti di accesso alle pagine) ma il formato della tabella MMU è diverso da quello di x86.