Some troubles with an hand-made pager
BERTRAND Joel <[email protected]> Tue, 16 Nov 2010 20:37:55 +0100
| Newsgroups | gmane.comp.micro-kernel.l4.l4ka.general |
|---|---|
| Message-ID | <[email protected]> |
Hello, I'm trying to write a pager and I'm not sure that I have understand how L4 works. When my pager receives a pagefault IPC, it tries to find a free physical memsection and uses sigma0 protocol to map virtual memory into physical one. I have added some outputs to check variables. When first thread that uses my pager is launched, pager received a pagefault IPC : vms$pagefault(addr:1001730, size:8000) [priv=4] memsection 1000000 100cc66 VIRT=1000000 PHYS=8000 <- these values seem to be good s0: got msg from 0x0000003a00000001, (0xffffffffffa0, 0x00000000000080f7, 0x0000000000000000) s0: allocate_page (tid: 0x3a00000001, addr: 8000, log2size: 15) s0: got msg from 0x0000003a00000001, (0xffffffffffe4, 0x0000000000000000, 0x0000000001002e50) s0: allocate_page (tid: 0x3a00000001, addr: 0, log2size: 12) <- ????? s0: got msg from 0x0000003a00000001, (0xffffffffffe4, 0x0000000000036dd4, 0x0000000001002e54) s0: allocate_page (tid: 0x3a00000001, addr: 36dd4, log2size: 12) and kernel enters in a deadlock... I don't understand why sigma0 receives three IPC from my pager. I have read all documentation I have found and I haven't found any explanation. I have uploaded a disk image with current roottask at http://www.systella.fr/~bertrand/freevms.img.bz2 (3,6 MB) and sources are available with git clone git://rayleigh.systella.fr/FreeVMS.git. Disk image runs with qemu (with a 64 bits CPU). Any explanations are welcome. Thanks in advance. Regards, JKB