Yeah, you can reserve a whole range of virtual memory (like 0xC0000000 to 0xFFFFFFFF) for the kernel. Keep a global kernel pagedir up-to-date with your kernel memory allocations. Then, if a process pagefaults (while in kernel mode) with a memory access above 0xC0000000, you can check inside the global directory to see if it's a valid address. If it is, copy the entry or entries from the global directory to the current process's page directory.
That seems like a good idea except what happens if that area gets 'too full' and there is a large amount of page faults? I also don't want a large number of page tables.
As i'm typing this I've realised that i could keep one copy of each page table, and that those could easily be used in each address space directory, so actually i wouldn't be using any extra memory.
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Actually, after reading your post again, I really didn't understand it fully at first.
Thanx, I think you just help solve a huge collection of problems!
![Very Happy :D](./images/smilies/icon_biggrin.gif)