tags:

views:

48

answers:

3

hi all,

How is the process address space(4GB) allocated between usermode and kernel mode modules in windows

when i checked explorer.exe in process explorer the lower 2GB is occupied by user mode dlls and upper 3-4GB address range of system process is loaded by drivers (*.sys files)

So my question is will all these 3-4GB address range of each process is shared or they get duplicated for each process?

A: 

The upper gigabyte is where the OS kernel lives, as well as all the drivers and additional modules, as well as I/O buffers and other kernel-only data memory. That are is shared by all processes, and indeed has to be for the kernel to work at all. The page tables live in a region called hyperspace which is at the 3 GB boundary and is the only section of memory above 2 GB that is not shared between processes. The 3rd gigabyte is used by the kernel by default, but if you build your programs to have 3GB of usermode memory, then this area will belong to the process.

That's all off the top of my head, so feel free to correct me.

siride
yaa what you said is correct. but will every 3-4GB(assume we built programs to take 2GB of kernel space) range of address spaces of all processes is used for OS kernel??
Vineel Kumar Reddy
It's not "every 3-4 GB" as in there is 1 GB of memory used for every process. There's only one 1 GB range and all processes have that mapped into their address space.
siride
A: 

To provide a short answer:
The (virtual) memory layout depends on your OS. Of course, there are differences between 32 bit and 64 bit versions of windows, but also between the different versions.

See here (MSDN) and here (MS blogger).

Hope this helps.

DyP
A: 

By default up to XP 2 GB were used by the kernel, and the other 2 GB were available for all programs. When starting XP with the /3GB command line witch, programs linked with /LARGEADDRESSAWARE flag can use up to 3 GB of virtual address space.

That means each application can mange up to 3 GB. 32 Bit windows can swap memory out to a pagefile and this may well become larger than 4 GB. Thereby its possible that 2 Applications together may allocate much more than 3GB in total.

I just tested this on a 4 GB XP 32 Bit machine. I started 3 applications each allocating 2 GB using VirtualAlloc and filling it using memset. The task manager shows that the total amount of virtual allocated memory is 7 GB. This of course is not very practical. If two of these applications try to use all their memory simultaneously, the machine will slow down up to the perception as a system hang

RED SOFT ADAIR