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@reactos.com http://reactos.com:8080/mailman/listinfo/ros-dev