Adam Lackorzynski a écrit :
On Thu Nov 18, 2010 at 19:04:15 +0100, BERTRAND Joel wrote:
I have check in http://hg.l4ka.org/l4ka-pistachio-ref/l4-x2.pdf, and I think that mapitem makes sense.
When a pagefault occurs, I obtain :
vms$pagefault(addr:47fe8, s:2000) [priv=4] memsection 46000 47fff 1 0 V=46000 P=9c000 s0: got msg from 0x0000003a00000001, (0xffffffffc170, 0x0000000000000001, 0x0000000000989680) s0: got msg from 0x0000003a00000001, (0xffffffffffa0, 0x000000000009c0d7, 0x0000000000000000) s0: allocate_page (tid: 0x3a00000001, addr: 9c000, log2size: 13) %MEM-I-ACCMAP, accepting mapping %MEM-I-ACCMAP, virtual $0000000000046000 - $0000000000047FFF %MEM-I-ACCMAP, physical $000000000009C000 - $000000000009DFFF After vms$sigma0_map
Thus, virtual region 46000-47FFF is mapped in 9C000-9DFFF memory (and mapping is accepted). Mapitem seems to be required.
3 parties are involved. The faulting program, roottask, and sigma0. As far as I (quickly) read the code: roottask is requesting sigma0 to map memory to 46000 within its own virtual address space. Is this memory accessible by roottask, i.e. can roottask read/write from/to 46000? This is required so that roottask can map it further to other tasks. Also 'virt' seems to be the fpage for the faulting task but is also used for the sigma0 call, i.e. the memory is mapped there in roottask. Might this clash with the roottask virtual memory?
Thanks for your answer. I think I have found one of my problem, but I don't have a running pager. My mistake should be between physical and virtual addresses.
I suppose that faulty address in pagefault protocol is a virtual address. A thread tries to access to a unmapped memory.
In this pagefault function, I have to find a free memory page. Thus, my function looks for small aligned page that contains requested address. It looks for a free physical page, and sends a mapitem message to faulty thread. My new code is available at:
http://www.freevms.net/gitweb/?p=FreeVMS.git;a=blob;f=sources/freevms/vm/vm_...
I understand why faulty task sends a pagefault signal. I think my mapitem answer is correct. But I don't understand how assign physical page to virtual one.
Regards,
JKB