Linux address mapping

Bjorn Wesen (bjorn@sparta.lu.se)
Fri, 4 Jun 1999 15:45:54 +0200 (MET DST)


I'm researching the MMU part of a Linux port, and am possibly slightly
confused on what the memory map of Linux is supposed to look like.

The i386 version links the kernel to 0xc0000000 (well, plus some 100000
for some reason). I assume this is to enable process page maps to keep the
kernels image in the vmem mapping, so that a MMU context switch is not
required upon systemcalls/irq's (or using weird segment registers like
fs) (linux 2.0 had the kernel at 0 or ?)

So as seen from any process, the process itself has its own virtual memory
between 0 and 0xc0000000 ?

However I also understand the kernel can do allocate its own virtual
memory using vmalloc. Where in the memory space is this placed, and are
there any particular restrictions/requirements for placing this ? I had
trouble finding this info while browsing the arch/i386 files. I might just
be stupid.

Another thing I was thinking about, is if the kernel is mapped into every
process page table, is this done on a page-by-page basis, i.e a 600 kb
kernel is mapped using for example 600/4 PTE's linearily, but maybe
processes can share the second level page table for the kernel mapping so
each process don't need its own kernel PTE map set.

I wonder if there is an "ideal" MMU for Linux, i.e. one that maximizes
performance and minimizes the porting work :)

brgds,
/Bjorn

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/