What does the Kernel Virtual Memory of each process contain?
When say 3 programs (executables) are loaded into memory the layout might look something like this:
alt text http://img97.imageshack.us/img97/3460/processesm.jpg
I've following questions:
-
Is the concept of Virtual Memory limited to user processes? Because, I am wondering where does the Operating System Kernel, Drivers live? How is its memory layout? I want to know more about kernel side memory. I know its operating system specific make your choice (windows/linux).
-
Is the concept of Virtual Memory per process basis? I mean is it correct for me to say 4GB of process1 + 4GB of process2 + 4GB of process3 = 12GB of virtual memory (for all processes). This does't sound right. Or from a total of 4GB space 1GB is taken by kernel & rest 3GB is shared b/w all processes.
-
They say, on a 32 bit machine in a 4GB address space. Half of it (or more recently 1GB) is occupied by kernel. I can see in this diagram that "Kernel Virtual memory" is occupying 0xc0000000 - 0xffffffff (= 1 GB). Are they talking about this? or is it something else? Just want to confirm.
-
What exactly does the
Kernel Virtual Memory
of each of these processes contain? What is its layout? -
When we do IPC we talk about shared memory. I don't see any memory shared between these processes. Where does it live?
-
Resources (files, registries in windows) are global to all processes. So, the resource/file handle table must be in some global space. Which area would that be in?
-
Where can I know more about this kernel side stuff.