Originally posted by: itachi
ok.. you guys need to stop interchanging the alu width with the amount of memory that can be allocated, there is absolutely no correlation.
Your introductory statement here, I'm afraid I have to say, - I cannot agree with.
the max addressable memory is dependant on the width of the address bus.. and pentium 4's have a 36-bit address bus (enabled through physical address extensions). so pentium 4's can hold a max of 64gb of memory. and athlon 64's have a 40-bit physical address space, 1024gb is the max addressable space. however, you can't use it without one of the windows server editions.. other ones don't have pae support.
The rest of your information, while correct, is incomplete, in a way I would think would be misleading for anyone not already having good knowledge about these things.
as for why we're just starting to transition into 64-bits.. there's been no need. increasing from 32 to 64-bit shortens execution time for integer calculations and basic floating point calculations only when the additional accuracy is necessary. but at the same time it complicates the hell out of things for hardware based programmers and engineers needlessly. it'd be easier and cheaper to just increase the clock speed, modify the core, or come out with a new processor.
There is a need.
64-bit integer operations and registers have everything to do with how much memory can be addressed. You're missing the point. It's not directly about addressable physical ram, it's about the apps virtual space. At least 99% of the reason for 64-bit integer ISA, is for handling 64-bit pointers. Very close to 100% of the reason for 64 bit pointers, is using binary instructions with 64 bit long addresses. Again close to 100% of the reason for binary code with 64-bit address format, is indeed addressable memory.
But let's start from the beginning. Let's consider some serious Windows 32-bit applications, like Lightwave, Maya, Working Model, Tebis, Catia. It's quite possible, if you're ambitious, to run out of memory with these apps. When (rethorical) do we run out of memory, and why? - We will run out of memory somewhere at 1.5GB-1.8GB. Why? - In order to be able to allocate some memory to an app, that memory have to be mapped to the apps virtual space. That space is 2GB. The 32 bits of the virtual address are good for 4GB, but we also have to map in OS resources (1GB) and shared resources (1GB).
(Two notes here: It seems the use of paging, when mapping memory, have caused people to forget fragmentation. It's true you don't get fragmented physical memory any more, but we still get full fragmentation of the virtual space. Secondly, it's common to interject that a Windows boot option allows giving the shared space to the app instead, resulting in 3GB virtual space. This hardly qualifies to be called 'bandaid'. I wouldn't take the word "solution" in my mouth.)
So can anything be done to give the user more memory with an app like these?
- No! The application has to be ported to a different software platform!
Two options can be suggested. Go back to *essentially "16-bit" code*, that is, - segmented addressing. Like Oracle. Especially Intel have been doing a lot to pretend that this is viable. Not so much because they believe in it, they don't. But it helps keeping people complacent about buying 32-bit CPUs, when they hear all this pile of [censored at AT], about PAE and 36-bit physical addressbus. Perhaps they suffer the illusion their 32-bit apps are good for 4GB ram? Perhaps they suffer the illusion PAE is suddenly magically going to make more than 4 GB available?
I promise this will not happen. MS will not do any OS providing a PAE general program model. And even if they were, - noone is porting Windows32 apps to PAE-segments. And noone is doing a PAE-Linux. Noone wants this. It's as horrible as old Windows16 on '286. Awkward, bugprone and expensive in every sense.
Instead we have the much better option of porting to a 64-bit code format, by which we primarily mean that the instruction's address format is 64 bits long. That means we need a new CPU with a new instructionset, That's neat and easy. AMD provided it. MS Windows is doing the 64-bit, and Linux is too. And we can keep the essentially same linear software format, that the '386 introduced.
Finally, x86-64 provides for addressing 4 PetaBytes. Those 40 bits and 1 Terabyte is only a current hardware implementation. x86 ('386) only provides linear addressing for 4 GB. PAE and the 36-bit hardware address bus don't change that.