Process virtual address space and kernel address space? How?
<p>I am very new to kernel or system programming,</p>

<p>I have couple of questions related to virtual memory. Mostly related to static vs run time, [i.e. ELF and loading/Linking etc], Specific to linux-x86. </p>

<p>My understandings might be completely wrong...</p>

<p>I am aware of virtual memory and it's split 1G/3G. where process can not access address above PAGE_OFFSET in user mode - PAGE_OFFSET is virtual address.</p>

<p>At Static time ELF defines process Virtual space?</p>

<ol>
<li><p>If ELF defines virtual address space then does ELF also defines kernel virtual address space? How?
[ I assume kernel virtual address space is dynamically mapped at run time?]</p></li>
<li><p>If kernel address space is mapped to process address space then why doesn't process size(virtual) includes kernel size also?</p>

<ul>
<li>When and How this kernel address space is mapped/linked?
Like , In case of shared library the particular file is pointed by vm struct etc..</li>
<li>Is it when code flow hits system call? For example.</li>
</ul></li>
<li><p>Does executable size determines process size (virtual) completely? in what context sizes differ or they are completely different.</p></li>
</ol>

<p>Any article that explains overall flow?</p>

<p>Compile --> link/load --> virtual memory structure (kernel address space/shared objects etc) </p>

<p>I know its very vast but explanation on overall flow will work.</p>