Kernel address space mappings with respect to virtual address space – a question based on text by Robert Love

virtual-memory

In Linux Kernel Development (LKD) 3rd edition, chapter 12 under Zones, Robert Love says:

In particular, Linux has to deal with two shortcomings of hardware with respect to memory addressing:

  1. Some hardware devices can perform DMA (direct memory access) to only certain
    memory addresses.

  2. Some architectures can physically addressing larger amounts of memory than they
    can virtually address. Consequently, some memory is not permanently mapped into
    the kernel address space.

My Questions:

  1. First is okay, what does he mean by 2?
  2. Does he mean to say: Some architectures can address larger amounts of physical memory than they can address virtual addresses?
  3. How's that possible? I thought virtual address space is larger than physical memory or at least (if any) equal to physical memory.
  4. Also, isn't it because VAS (virtual address space) is larger than physical memory, some memory is not permanently mapped into KAS (kernel address space).

But I'm guessing that only physical memory is mapped into KAS. Let me know what he means by point #2 above and what wrong assumption(s) I'm making here.

Best Answer

Physical Address Extension (PAE) sounds exactly like what he's referring to.

A 32-bit CPU can only map ~4gb of memory, even if the system has more. But with PAE, you can use >4gb, though only 4gb of it is mapped at any one time (a single process will never be able to use >4gb).

So basically when the kernel changes the actively running process, it re-maps the virtual memory to the physical memory which that process is currently using.

Related Question