Microsoft Drops Next-Generation Security Project [updated]
IANACPUExpert, but my understanding is that x86 has had a distinction between code and data pages since at least the 80386.
Neither am I, but I believe that the old feature in the 386 only allows you to mark very large segments of memory non-executable.
SPARC, PA-RISC, Alpha, and presumably the new x86 chips with "NX" allow you to do this to individual pages.
I'm surprised *BSD (particularly) FreeBSD hasn't.
OpenBSD does. They call it W^X. It was enabled on the sparc, sparc64, hppa, and alpha ports in 3.3 and on the i386 and macppc ports in 3.4.