jgordeev at dir.bg
Sat Jan 23 13:45:33 PST 2010
I've been working on the 64-bit vkernel for some time now.
Current status is: the vkernel begins executing /etc/rc and then panics
at unpredictable time.
There's a certain peculiarity that makes life difficult for the
vkernel's pmap module and I'd like to discuss it.
The vkernel must manage its own kernel address space and the address
spaces of its user processes. However, the "hardware" that maps virtual
to physical addresses treats the kernel differently to user processes -
it sees kernel virtual addresses offset with a certain amount that isn't
known until run-time. So the vkernel needs to deal with virtual
addresses as seen by the kernel, virtual addresses as seen by the
"hardware" and physical addresses. The greatest inconvenience is that
you cannot treat the kernel pmap and user pmaps in a uniform way.
I'd like to propose the following:
When servicing VM faults in ranges governed by virtual page tables, the
actual virtual address to be used for the vpagetable translation, and
not the offset from the beginning of the range.
This change will remove the two classes of virtual addresses that now
exist, but it breaks the assumption that faults are serviced based on VM
object and page index within the object. This only matters to the
vkernel, because it is the only kind of process that uses
Do you have any thoughts on what I propose?
More information about the Kernel