title: How does the linux kernel manage less than 1GB physical memory?
body: <p>I'm learning the linux kernel internals and while reading "Understanding Linux Kernel", quite a few memory related questions struck me. One of them is, how the Linux kernel handles the memory mapping if the physical memory of say only 512 MB is installed on my system. </p>
  
  <p>As I read, kernel maps <strong>0(or 16) MB-896MB</strong> physical RAM into 0xC0000000 linear address and can directly address it. So, in the above described case where I only have 512 MB:</p>
  
  <ul>
  <li><p>How can the kernel map 896 MB from only 512 MB ? In the scheme described, the kernel set things up so that every process's page tables mapped virtual addresses from 0xC0000000 to 0xFFFFFFFF (1GB) directly to physical addresses from 0x00000000 to 0x3FFFFFFF (1GB). But when I have only 512 MB physical RAM, how can I map, virtual addresses from 0xC0000000-0xFFFFFFFF to physical 0x00000000-0x3FFFFFFF ? Point is I have a physical range of only  0x00000000-0x20000000.</p></li>
  <li><p>What about user mode processes in this situation? </p></li>
  <li><p>Every article explains only the situation, when you've installed 4 GB of memory and the kernel maps the 1 GB into kernel space and user processes uses the remaining amount of RAM.</p></li>
  </ul>
  
  <p>I would appreciate any help in improving my understanding.</p>
  
  <p>Thanks..!</p>