Just to help clarify the technical explanation of the problem, I'll
explain in other words:
cr3 points to the page table directory. The page table directory points
to several page tables. The page tables point to the physical pages (
if any ) and access mask. Each process gets its own page table
directory. Right now every process also gets it's own page tables, so
the kernel has to be careful to make sure and fix up each process's page
tables to point to the correct shared kernel memory before it can access
that memory. The way it should work is every page table directory
should point to a single shared page table for kernel memory, so that an
update to the kernel memory map in one process is reflected immediately
in all.
Alex Ionescu wrote:
Hi Hartmut & Mm Experts,
It seems that on ROS, every process has its own Page Table for the
Kernel Area/System Table. This needs to be updated with
MmUpdatePageDir all the time, and creates a bunch of annoyances in the
Context Switching code too (for example, I can't check the trap frame
for VM_MASK because at that time the Page Directory hasn't been
changed yet. I could change it before but that would screw up the
optimizations. Philip Susi and I have researched this and arrived to
the common conclusion that every new Process's Page Table should share
the same System Page Table. I'm not an expert so maybe I'm not
explaining it properly, but the System Page Table shouldn't have to be
"inserted/mapped" into every Process's Page Table, it should already
be there, shared amongst all processes.
I hope that made sense...if not, maybe Philip can fix up my explenation.
Is it possible for any of the Mm guys to implement this properly?
Thanks a lot..
Best regards,
Alex Ionescu
_______________________________________________
Ros-dev mailing list
Ros-dev(a)reactos.com
http://reactos.com:8080/mailman/listinfo/ros-dev