Hi,
On Wed Nov 17, 2010 at 11:50:29 +0100, BERTRAND Joel wrote:
It's my first post on this mailing list. A long time ago, I have started to write a VMS-clone (http://www.freevms.net). This opensourced project was sleeping for a long time because monolithic kernel isn't good enough to write a clone of this system.
Thus, I have restarted this project with a L4 microkernel (exactly pistachio L4/X2). Now, I have written a roottask that tries to launch VMS$INIT, first thread required to boot all system. I have reuse some works done for iguana project (and fixed some bugs).
When VMS$INIT is started, this thread sends two IPC to its pager :
vms$pagefault(addr:1001730, s:8000) [priv=4] -> default addresse is $1001730 (start address of VMS$INIT thread) ... vms$pagefault(addr:47fe8, s:2000) [priv=4]
I'm not sure that I have understand how should work a pager. I have uploaded my pager here :
http://www.freevms.net/trac/browser/sources/freevms/vm/vm_pagefault.c
All sources are available with :
git clone git://rayleigh.systella.fr/FreeVMS.git
and I have uploaded a disk image that runs with qemu (with a x86/64) :
http://www.systella.fr/~bertrand/freevms.img.bz2
My pager tries to find a physical free page to map virtual memory. I think that memory is correctly mapped and I don't understand why pager receives other request with same virtual address. I suppose I have done a mistake.
Given that the first mapping on the code is ok I'd guess the mapping s0->roottask doesn't work and thus no map to the app (check by touching the memory in roottask). I'm not an expert on x2 but maybe you could check whether the mapitem after the sigma0 map call makes sense.
Adam