Hay dos razones: (a) la seguridad no era una prioridad fuerte, y (b) las diferencias en las arquitecturas de 32 bits frente a las de 64 bits.
El bit NX solo se admite en arquitecturas de 64 bits. El bit NX proporciona permisos de ejecución a nivel de página, por lo que el sistema operativo puede marcar algunas páginas como no ejecutables. El bit NX es la forma estándar de hacer que algunas páginas no sean ejecutables y, por lo tanto, es la forma estándar y más limpia de implementar DEP. Sin embargo, las arquitecturas de 64 bits tardaron un poco en ganar popularidad, por lo que la implementación del soporte en el sistema operativo para DEP basado en NX bits solo se convirtió en un beneficio significativo para la seguridad una vez que muchas personas comenzaron a usar arquitecturas de 64 bits.
Por lo tanto, la implementación de DEP se ralentizó en parte por la lenta adopción de arquitecturas de 64 bits. (Si las plataformas Intel de 32 bits han admitido el bit NX, podríamos haber visto una implementación anterior de DEP, pero no fue así). DEP no se extendió hasta los chips Intel / AMD de 64 bits. se generalizó. Por lo tanto, es por eso que DEP tardó tanto en generalizarse.
Bien, ahora aquí es donde admito que lo anterior es una pequeña simplificación, aunque no demasiado. De hecho, hay una manera de implementar DEP en arquitecturas de 32 bits, pero es mucho más difícil y no encaja bien con la forma en que se construyen actualmente la mayoría de los sistemas operativos.
En las arquitecturas Intel de 32 bits, en realidad hay dos diferentes mecanismos de protección de memoria: protección a nivel de página y protección a nivel de segmento. La mayoría de los sistemas operativos se basan en el mecanismo de nivel de página (tablas de páginas y similares) para la protección de la memoria. El mecanismo de nivel de página es el más flexible, ya que cada página puede tener su propio nivel de protección (por ejemplo, solo lectura frente a lectura / escritura; accesible para el usuario frente al núcleo). Sin embargo, los procesadores Intel de 32 bits también admiten la protección de memoria basada en segmentos. Un segmento es una región consecutiva de la memoria, y puede tener algunos segmentos diferentes. Cada segmento puede recibir su propio acceso de protección. Debido a que la protección a nivel de página es más flexible, la mayoría de los sistemas operativos no usan la protección a nivel de segmento (tratan efectivamente la memoria como un segmento grande y dan vuelta a la segmentación).
Por alguna razón desconocida, en las arquitecturas de 32 bits, la protección a nivel de segmento permite marcar un segmento como no ejecutable, pero el mecanismo de protección a nivel de página no permite marcar una página como no ejecutable. (No sé por qué, probablemente solo sea un artefacto de la historia). Esto significa que es posible implementar DEP en una arquitectura de 32 bits, mediante el uso de las protecciones de nivel de segmento. Sin embargo, esto requiere todo tipo de contorsiones y cambios importantes en el sistema operativo. Hacerlo se vuelve un poco complicado y complicado, y también tiene algunas implicaciones de rendimiento. Por este motivo, muchos sistemas operativos eran reacios a implementar DEP en arquitecturas de 32 bits.
Por lo tanto, no es del todo exacto decir que DEP es imposible en arquitecturas de 32 bits y primero fue posible en arquitecturas de 64 bits, pero, para fines de ingeniería, es bastante cercano a la verdad.