<div dir="ltr">Hello Adam,<div><br></div><div>In order to be sure that I correctly understand how Dataspace and Memory Allocator work, I tried an example where Dataspace are created using the "L4Re::Mem_alloc::Continuous and L4Re::Mem_alloc::Pinned" flags. This will ensure that the allocated physical memory is contiguous and can not be moved, right?</div><div><br></div><div>My second question concerns the way how an L4 task is loaded into memory. Do you think that it is possible to make all segments of an L4 user program to be adjacent in physical memory. As an example, given one L4 user program we would like to have the following configuration: </div><div><br></div><div>Physical memory      </div><div><br></div><div>0x000000       0MB<br></div><div><br></div><div>0x100000       1MB <br></div><div>                                  text</div><div>0x200000       2MB</div><div>                                  data<br></div><div>0x300000       3MB </div><div>                                  stack<br></div><div>0x400000       4MB</div><div>                                  heap<font color="#000000"><span style="white-space:pre-wrap"><br></span></font></div><div>0x500000       5MB</div><div><br></div><div>(the memory addresses are given here for illustration purpose)<br></div><div><br></div><div>From my tracing of Moe, L4re and libloader using Moe::Dataspace::phys( ) function,  I saw that some areas were adjacent and other were not. Could you please give an explanation of how Moe and l4re load a user program from a disk into memory.</div><div><br></div><div>Thank you very much in advance.</div><div><br></div><div>kind regards,</div><div>Mahdi<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Sep 28, 2015 at 10:44 AM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div><pre style="white-space:pre-wrap;color:rgb(0,0,0)">> An application is typically composed of multiple memory regions in
> virtual memory. Do you mean you want all those regions to be physically
> contiguous, such as text-segment, bss and stacks? This should be
> possible by using a memory allocator that makes sure this is the case.
> However, currently, there is only the possibility to have dataspaces
> physicall contiguous.</pre></div><div><div><span style="color:rgb(0,0,0);white-space:pre-wrap">This exactly what I mean, t</span><span style="color:rgb(0,0,0);white-space:pre-wrap">hat is, text-segment, bss, data, stack, and heap regions have to be contiguously allocated for Fiasco kernel, sigma0, moe, L4Linux, and for each created L4 task.</span></div><div><span style="color:rgb(0,0,0);white-space:pre-wrap">My use case requires that each created L4 task has to be provided with a static fixed physical memory segment, and cannot exceed its allocated memory segment.</span></div><div><span style="color:rgb(0,0,0);white-space:pre-wrap"><br></span></div><div><span style="color:rgb(0,0,0);white-space:pre-wrap">Currently the memory allocator is present in moe package, right?</span><br></div><div><font color="#000000"><span style="white-space:pre-wrap">Thus, a new memory allocator should to be added to that package I guess, right?</span></font></div><div><font color="#000000"><span style="white-space:pre-wrap">If not, could you please suggest a place in the code base where a new memory allocator has to be added.</span></font></div><div><br></div><div><font color="#000000"><span style="white-space:pre-wrap">I would like to implement a mechanism that allow to know for each created L4 task which physical frame a virtual page is mapped to. The functionality provided by such a service are similar to </span></font></div><div><font color="#000000"><span style="white-space:pre-wrap">pagemap [1] service in Linux kernel.</span></font></div><div><font color="#000000"><span style="white-space:pre-wrap"><br></span></font></div><div><font color="#000000"><span style="white-space:pre-wrap">Is such a service could be implemented at userspace in L4re?</span></font></div><div><span style="white-space:pre-wrap;color:rgb(0,0,0)">Does Fiasco O.C provide the necessary mechanism to implement it?</span><br></div><div><span style="color:rgb(0,0,0);white-space:pre-wrap">If yes, could you please suggest a set functions that should be used.</span><span style="white-space:pre-wrap;color:rgb(0,0,0)"><br></span></div><span class=""><div><font color="#000000"><span style="white-space:pre-wrap"><br></span></font></div><div>Thank you very much for your answer.</div><div>Best regards,<br></div><div><br></div><div>Mahdi</div></span></div><div><br></div><div>[1] <a href="https://www.kernel.org/doc/Documentation/vm/pagemap.txt" target="_blank">https://www.kernel.org/doc/Documentation/vm/pagemap.txt</a></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 16, 2015 at 11:45 AM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div>I updated the schema of the memory mapping of L4Linux and Fiasco O.C according to your corrections.</div><div>Could you please take a look at it and tell me if everything is correct.<br></div><div><br></div><div>I have some questions about the way Fiasco O.C µ-kernel loads the L4 tasks into physical memory.</div><div><br></div><div>If I correctly understood, when Fiasco O.C creates a new L4 task it uses a copy-on-write</div><div>mechanism to allocate physical pages in memory, right?</div><div>That means, the physical memory region allocated to an L4 task might not be formed</div><div>by a contiguous set of physical pages.</div><div><br></div><div>Is it possible to make Fiasco O.C reserves a physical memory region composed by a </div><div>set of contiguous physical memory pages when creating an L4 task?</div><div><br></div><div>If the answer is yes, could you please suggest an example showing the way to do it.</div><div><br></div><div>My second question concerns the L4Linux tasks. Could you please tell me some</div><div>explanation about the way L4Linux and Fiasco O.C load into physical memory the L4Linux tasks,</div><div>and where can I find the code that is doing these operations.</div><span><div><br></div><div>Thank you very much in advance.</div><div><br></div><div>Best regards,</div><div><br></div><div>Mahdi</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div> </div></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 9, 2015 at 3:28 PM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div>In order to document my investigation of memory management in L4Linux,</div><div>I draw an abstract representation of the memory mapping of L4Linux's tasks</div><div>virtual memory into L4Linux "real" memory and into physical memory.</div><div><br></div><div>Could you please take a look at my schema and tell if it correctly represents</div><div>the memory mapping in L4Linux.</div><div><br></div><div>Any corrections and remarks are welcome.</div><div><br></div><div>Thank you very much in advance.</div><div><br></div><div>Best regards,</div><div><br></div><div>Mahdi</div><div><br></div><div><br></div><div><br></div><div><br></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 31, 2015 at 5:03 PM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div>Is it possible to know where a UTCB memory area is allocated in the physical memory space of a thread.</div><div>If the answer is yes, could you please suggest a way to do it.</div><span><div><br></div><div>Thank you very much for your answer.</div><div><br></div><div>Best regards,</div><div>Mahdi</div></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 28, 2015 at 4:10 PM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div>I have a question about the way Fiasco.OC handles IPC.</div><div><br></div><div>If we take a simple example of one thread in address space A that sends an array of characters to a second</div><div>thread located in an address space B.</div><div>Since such an array might be large and cannot be transferred using the registers. <br></div><div><br></div><div>How it is transferred to the second thread address space?<br></div><div><br></div><div>Is it at first allocated on the first thread stack, then copied by Fiasco kernel to</div><div>the second thread address space?</div><span><div> </div><div>Thank you very much for your answer.</div><div><br></div><div>Best regards,</div><div>Mahdi</div><div><br></div></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 24, 2015 at 9:12 AM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div>What I mean by accessing memory partition is: does Fiasco.OC accesses memory</div><div>reserved for L4Linux when handling system-call issued by L4Linux guest for example</div><div>or any other operation.</div><span><div><br></div><div>Thank you very much for your answer.</div><div><br></div><div>Best regards,</div><div>Mahdi</div><div><br></div></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 23, 2015 at 5:32 PM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div>I would like to know if Fiasco.OC kernel accesses memory partition allocated to an L4Linux guest?</div><div>And for what reasons it has to do it?</div><span><div><br></div><div>Thank you very much for your answer.</div><div><br></div><div>Best regards,</div><div>Mahdi<br></div><div><br></div><div><br></div><div><br></div></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 22, 2015 at 3:19 PM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div>According to Fiasco O.C/L4re documentation Sigma0 is the root pager,</div><div>that is, it is responsible of resolving page fault of user-level tasks, right?</div><div><br></div><div>Knowing that L4Linux is created as a user-level task, thus any memory page fault occurring</div><div>in L4Linux or its user processes logically has to be handled through Sigma0.</div><div><br></div><div>However, as you previously mentioned in one of your answers, a handling of</div><div>a page fault occurring in L4Linux does not involve any L4Re object including Sigma0.</div><div><br></div><div>My question is: what configuration and / or operations have been made</div><div>in order to force that a memory page fault in L4Linux has to be handled</div><div>only by Fiasco and L4Linux and not going through L4Re objects? </div><div>And where these operations are written in the source code.</div><span><div><br></div><div>Thank you very much for your answer.</div><div><br></div></span><div>Best regards.</div><span><font color="#888888"><div>Mahdi</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></font></span></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 21, 2015 at 4:06 PM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div>I would like to understand how L4 Fiasco manages the virtual memory of a L4Linux guest.</div><div><br></div><div>Does L4 Fiasco maintains a "shadow page table" in order to perform a two-level memory address translation:</div><div>guest virtual memory --> guest real memory --> host physical memory?</div><div><br></div><div>If the answer is yes, where the "shadow page table" is maintained? which L4 Fiasco object</div><div>is responsible of this operation?  </div><div><br></div><div>If we suppose that an L4Linux guest has for example a 64MB of fixed physical memory region, </div><div>in case a new L4Linux user task arrives and there is no available space to allocate</div><div>a new page for this task, an already used page has to be unmapped, right?</div><div><br></div><div>If the answer is yes, then where the dirty page will be swapped?</div><div><br></div><div>Thank you very much for your answer.</div><div><br></div><div>Best regards,</div><div>Mahdi</div><div><br></div><div><br></div><div><br></div><div><br></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 20, 2015 at 4:36 PM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div>If I correctly understood, and If we suppose that an L4Linux instance</div><div>is started for example with this command line options:</div><div><div>... earlyprintk=1 em=64M ...</div><div><br></div><div>This means that a 64MB of physical memory region composed of a set of contiguous physical frames is allocated to L4Linux, right?</div><div><br></div><div>L4Linux will use a part of this 64MB of physical memrory for its own kernel execution, and</div><div>the rest of physical memory space will be used by L4Linux to load user-level programs</div><div>and allocate physical memory for them, right?</div><div><br></div><div>If a user-level program on top of L4Linux generates a page-fault.</div><div>Are the L4 Fiasco kernel and L4re involved in the execution flow to handle the page-fault?</div><div><br></div><div>Thank you very much for your clarification.<br></div><div><br></div><div>Best regards,</div><div><br></div><div>Mahdi</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 17, 2015 at 10:36 AM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello Adam,<div><br></div><div><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">The memory regions are exclusive. Specifying exactly which physical<br>memory an L4Linux is getting is currently not possible but I guess<br>you're using the numbers just as an example?</blockquote><div><br></div><div>Yes, I am giving these numbers as an example.</div><div>However, is it possible to know what are the start address and the end address</div><div>of a physical memory partition allocated to a L4Linux instance? </div><br></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><blockquote style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex" class="gmail_quote">The memory is completely mapped initially, so no page fault should<br>happen. As probably nobody will take it away again it should also stay<br>like this.</blockquote></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)">Does this apply also to user-level programs executed on top of L4Linux.<br></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">You can put showpfexc=1 on the cmdline to see any in-kernel page fault.<br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">There shouldn't be any (except in the outside wrapper code as I see<br>which can be changed by launching L4Linux with the eager_map flag).</blockquote></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)">Could please give some explanation about what is the wrapper code? And Where to set<span style="font-family:arial,sans-serif"> the "eager_map flag" option? </span></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;white-space:normal">Thank you very much for your answer!</span><span style="font-family:arial,sans-serif"><br></span></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><span style="font-family:arial,sans-serif">Best regards,</span></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><span style="font-family:arial,sans-serif">Mahdi</span></pre><pre style="white-space:pre-wrap;color:rgb(0,0,0)"><br></pre></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 15, 2015 at 11:53 AM, Mahdi Aichouch <span dir="ltr"><<a href="mailto:foxmehdi@gmail.com" target="_blank">foxmehdi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div>I have some questions concerning memory management in Fiasco O.C  + L4re.</div><div><br></div><div>I would like to test two L4Linux instances, and for each L4Linux</div><div>instance I want to reserve one static fixed physical memory partition.</div><div><br></div><div>For instance, one 128MB for the first L4Linux and one 128MB for the second.</div><div><br></div><div>Knowing that Fiasco O.C. uses "on demand paging" to allocate pages for </div><div>user tasks, is it possible that each partition of L4Linux could be allocated</div><div>a static physical memory region composed of contiguous physical frames.</div><div><br></div><div>For instance, one memory region starting from 128MB to 256MB for the first L4Linux,</div><div>and second memory region from 256MB to 512MB for the second L4Linux. </div><div>Each memory region is allocated exclusively to one L4Linux instance.<br></div><div><br></div><div>I would like to know if it is possible to load all the code + data of a L4Linux instance</div><div>into its reserved memory partition, so no page fault will be encountered during runtime.</div><div><br></div><div>Is it possible to tell me if these above operations could be realized in Fiasco O.C and L4re?</div><div><br></div><div>If the answer is yes, is it possible to tell me what are the objects that should be used or</div><div>adapted in order to implement these?</div><div><br></div><div>What are the issues that I should pay attention to?</div><div><br></div><div>Many thanks in advance for your answer.</div><div><br></div><div>Best regards,</div><div><br></div><div>Mahdi</div><div><br></div><div><br></div><div><br></div><div><br></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>