alamanos opened this issue on Jan 29, 2007 · 127 posts
Talain posted Thu, 01 February 2007 at 9:21 AM
In order to run 32 bit code (under a 64 bit operating system), you have to actually switch the processor into 32 bit mode while that process is running. Windows (XP-64 and Vista 64 bit) handle this automatically, switching to the proper processor mode when switching to another process and then switching back.
It's the same thing with running 16 bit processes under 32 bit windows; the operating system handles all the necessary mode switches automatically. Probably the main reason that 64 bit windows can't handle 16 bit code is probably because the added complexity it would entail isn't worth it, considering that 16 bit is about as obsolete as it gets.
The advantage to 64 bits over 32 bits is the greatly increased address space. Under 32 bits, a process is limited to 2 GB of memory (3GB with the proper kernel switches and the application relinked to work with it), no matter how much RAM you have installed. It doesn't even matter how much swap space you have or are willing to use, you can only address 4GB with a 32 bit pointer, and the kernel takes up 2GB of that.
The x86-64 also adds an additional 8 registers (available only in 64 bit mode) to an architecture that is sorely lacking in registers. (Which even so still only gives it half the architectural registers that most RISC architectures have).