Ci sono due ragioni: (a) la sicurezza non era una priorità strong e (b) le differenze nelle architetture a 32-bit vs 64-bit.
Il bit NX è supportato solo su architetture a 64 bit. Il bit NX fornisce autorizzazioni di esecuzione a livello di pagina, pertanto il sistema operativo può contrassegnare alcune pagine come non eseguibili. Il bit NX è il modo standard per rendere certe pagine non eseguibili e quindi è il modo standard e più pulito per implementare il DEP. Tuttavia, le architetture a 64 bit hanno richiesto un po 'di tempo per guadagnare popolarità, quindi implementare il supporto nel sistema operativo per DEP basato su NX bit è diventato un significativo vantaggio per la sicurezza una volta che molte persone hanno iniziato a utilizzare architetture a 64 bit.
Pertanto, l'implementazione del DEP è stata in parte rallentata dall'adozione lenta delle architetture a 64 bit. (Se le piattaforme Intel a 32 bit hanno supportato il bit NX, potremmo aver visto una precedente distribuzione di DEP, ma non è così, quindi non è stato così.) Il DEP non si è diffuso fino ai chip Intel / AMD a 64 bit divenne molto diffuso Quindi, è per questo che ci è voluto così tanto tempo prima che la DEP si diffondesse.
OK, ora è qui che ammetto che quanto sopra è un po 'troppo semplicistico, anche se non troppo. In effetti, esiste un modo per implementare il DEP su architetture a 32 bit, ma è molto più difficile e non si adatta bene al modo in cui la maggior parte dei sistemi operativi sono attualmente costruiti.
Nelle architetture Intel a 32 bit, esistono in realtà due diversi meccanismi di protezione della memoria: protezione a livello di pagina e protezione a livello di segmento. La maggior parte dei sistemi operativi si basa sul meccanismo a livello di pagina (tabelle di pagina e così via) per la protezione della memoria. Il meccanismo a livello di pagina è il più flessibile, poiché ogni pagina può avere il proprio livello di protezione (ad es., Sola lettura vs lettura / scrittura, accessibile dall'utente e solo kernel). Tuttavia, i processori Intel a 32 bit supportano anche la protezione della memoria basata su segmenti. Un segmento è una regione di memoria consecutiva e puoi avere alcuni segmenti diversi. Ogni segmento può ricevere il proprio accesso di protezione. Poiché la protezione a livello di pagina è più flessibile, la maggior parte dei sistemi operativi non utilizza la protezione a livello di segmento (trattano in modo efficace la memoria come un unico grande segmento e l'inizio della segmentazione).
Per alcune ragioni sconosciute, su architetture a 32 bit, la protezione a livello di segmento consente di contrassegnare un segmento come non eseguibile, ma il meccanismo di protezione a livello di pagina non consente di contrassegnare una pagina come non eseguibile. (Non so perché, probabilmente è solo un artefatto della storia.) Ciò significa che è possibile implementare DEP su un'architettura a 32 bit, utilizzando le protezioni a livello di segmento. Tuttavia, questo richiede tutti i tipi di contorsioni e le principali modifiche al sistema operativo. In questo modo diventa piuttosto complicato e complicato, e ha anche alcune implicazioni sulle prestazioni. Per questo motivo, molti sistemi operativi erano riluttanti ad implementare DEP su architetture a 32 bit.
Quindi non è abbastanza preciso dire che DEP è impossibile su architetture a 32 bit e prima è diventato possibile su architetture a 64 bit, ma, per scopi ingegneristici, è abbastanza vicino alla verità.