Some questions about pager
BERTRAND Joel
joel.bertrand at systella.fr
Mon Nov 22 15:53:12 CET 2010
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_pagefault.c
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
More information about the l4-hackers
mailing list