Vista 32bit conveniently fools users by displaying that it can use 4GB of installed RAM in the system properties, whereas it cant use use more than 3GB
dude this has been discussed many times till date. wether it shows 3 or 4 GB, a 32 bit computer cannot address more than 4GB of memory space.
now, why 3GB then?
Since 32bit machines can address only 4GB of memory (32 bit address bus) and in pre-xp era ram used to be very less; The OS used to divide 4GB of space into two parts. 2GB for User space and 2GB for kernel space. but after the xp era, computers started having more ram; so they tweaked this logic so that 3GB can be addressed by the userspace and 1GB by kernel. This is known as PAE or physical address extention. thats why the systems used to show 3GB of memory since user space cannot see the kernel memory.
Now, in vista they addressed the problem of “incorrect calculation” of memory as 3GB.
On the other hand, linux does not have any concept of paging in kernel space. so linux doesnt reserve any memory for kernel. but if there is any app that allocates more than 2GB in kernel space, then you will see only 2GB available to userspace. (i.e., physical memory-kernel memory=user memory)
bottomline: if you have 4GB of memory, 1GB is exclusive to kernel and 3GB is for userspace.
BTW, the linux kernel has a 3/1 split. The split refers to the virtual address, not physical.
Don’t confuse physical and virtual memory.
32 bit computers used to have only a 32 bit physical address space. Which would theoretically allow for 4GB of physical memory. Practically however, a lot of that space is used by devices (memory mapped I/O). Later, x86 procs had PAE added to them. This allowed a 36 bit address space which allowed for more than 4GB of physical address space. This means that you can address 4 GB of physical memory (and more) plus the memory mapped I/O too.
Only issue? A lot of 32 bit drivers wouldn’t be able to handle the extra address space (even though some would appear to do so, they would silently fail). So Microsoft decided that if you wanted the extra memory, you could use a 64 bit OS. Hence they only reported the amount of memory they mapped into the physical address space (which was less than 4GB). However this was a bad UI decision - everyone looks at it and starts freaking out (“oh no! One of my DIMMs has gone bad! Must contact Dell NOW!”). So in Vista SP1 they fixed it to show the memory present in the system.
Where did i say about the normal GFX cards? I just spoke about the onboard ones.
The reasoning given by kingkrool is correct. But on my PC, with 2 GB RAM, and 256MB shared memory with the onboard GFX, the amount of RAM shown is 1790 MB. Prior to SP1, even System properties would display only 1790MB. But post SP1, microsoft changed it, to display the amount of RAM in the system, not the amound of RAM available.
I am not at all talking about the 3GB limitation of the 32bit architecture.
PAE, 4-gigabyte tuning (4GT), and Address Windowing Extensions (AWE) serve different purposes and can be used independently of each other:
[ul]
[li]PAE allows the operating system to access and use more than 4 GB of physical memory.[/li]
[li]4GT extends the 32-bit user virtual address space from 2 GB to up to 3 GB.[/li]
[li]AWE is a set of APIs that allows a process to allocate nonpaged physical memory and then dynamically map portions of this memory into the virtual address space of the process.[/li]
[/ul]
When neither 4GT nor AWE are being used, the amount of physical memory that a single 32-bit process can use is limited by the size of its address space (2 GB). In this case, a PAE-enabled system can still make use of more than 4 GB of RAM to run multiple processes at the same time or to cache file data in memory.
4GT can be used with or without PAE. However, some versions of Windows limit the maximum amount of physical memory that can be supported when 4GT is used. On such systems, booting with 4GT enabled causes the operating system to ignore any memory in excess of the limit. For details, see Memory Limits for Windows Releases.
AWE does not require PAE or 4GT but is often used together with PAE to allocate more than 4 GB of physical memory from a single 32-bit process.
okay, I was confused between PAE and 4GT. but again, 1GB is locked to the kernel. I knew only the /PAE switch to the boot.ini it seems they seperated these things to PAE 4GB and AWE.
1 GB of Virtual address space (and not 1 GB of physical address space) is locked to the kernel.
@praka: Who should check his facts? Me? I’ve had enough of your obnoxiousness. Unlike you, I’ve programmed for the Linux kernel (and Windows kernel too, for that matter).
The Linux kernel has a 3GB/1GB virtual address split (by default) on x86 procs. Physical memory support beyond 4GB is possible in Linux by using PAE (on x86 that is). You can do that in Windows too - they just don’t support it for non server systems since too many drivers are flaky on client systems.
Oh, by the way Praka, a little factoid for you: the Linux kernel does not allow kernel mode code to be paged out. It cannot handle that situation. The Windows kernel does allow a lot of kernel mode code to be paged out if necessary. How is that memory management for you?
I’ve said it a hundred times before - there are lots of things each of these kernels has right and a lot of things they don’t. But stop your foolishness and discuss the issue rather than act as a fanboi who parrots stuff without knowing what the hell he is saying.
The Linux page allocator, from mm/page_alloc.c, is the main memory allocation mechanism in the Linux kernel. It has to deal with allocations from many parts of the Linux kernel, under many different circumstances. Consequently the Linux page allocator is fairly complex, and easiest to understand in the context of its environment. Because of this, this wiki article begins with an explanation of exactly what the page allocator needs to do, before going into the details of how things are done.
The term paging is overloaded. Booo was right when he talked of no paging in kernel mode in that dynamically allocated kernel data (using kmalloc, vmalloc) is not swapped out (nor is code). The kernel can swap out user mode code and data quite easily. There are some disadvantages to this, but many people claim there are not… I don’t agree with them, but to each his own.
As far as i know guys, Vista 32 bit uses 3325MB memory out of the 4GB. So, the limit for a 32 bit OS should be 3325MB. The rest of the memory is wasted , to use which we need a 64 bit OS, so that even those ~675MB of memory can be used. Am i right in these simple words?
And Visa does not fool people. It just displays the total amount of RAM in the system properties. Dat’s it. If it would have shown 4GB as 3GB, that would be a bug, not this.
^ Windows follows flat-adressing. so 32bit windows cannot address(cannot count, cannot see) more than 4GB. so Windows 32bit userspace (applications) cannot address(cannot see) more than 3GB.
32bit means not more than 4GB.
64bit means not more than 2^64 ~= 16TB
Some OT: earlier 16bit computers could not address more than 640kb of mem. intel engineers tweaked that (memory segmentation) to bring it upto 1MB. I am talking about very old computers that used to run on unix and DOS. thats why Yashwant Kanetkar’s TSRs book talks about segments and offsets. which is totally archaic shit and thats why I hate yaswant kanetkar’s books.