ASSUME,
VIRTUAL MEM: |---kernel code---|---kernel data---|----kernel HEAP----|----kernel stack---|---user stack---|---user heap---|----user data---|--user code---|
ADDRESS 4GB <----- 3GB -----> 0GB
1. Is above ranges valid? I think it is

2. 0-3 GB user space is no doubt individual for each process but 3 to 4 G range (1G) is mess which I want to understand, As per my understanding: kernel stack is per process area, kernel code and kernel data, heap is global across all processes.
now do we need to load new stack each time while context switch. Is it true that we have 1 GB to for housekeeping of all the processes?? If I assume kernel space is somehow managing its vm areas (I mean size of memory required to keep metadata to allocated or mapped regions) where USER space mmap information [metadata] is kept??
I think its unrealistic to keep it in global in kernel space!!
May be this is where U-AREA comes but How to manage dynamically expanding size of uarea per process? I mean for each alloc or mmap there will 2 possibilities that we need per process private area or we need a global area. so is it true that we need to mange all above[its virtual to physical mapping and page dir values]???
How linux do it? I did not found in-depth description on net.