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/