Hello,
I understand that R/W accesses to physical space are made through the RM session. Is this sequence of events correct?
1. Create a Dataspace_capability. 2. Allocate a dataspace as env()->ram_session->alloc(size) which returns a dataspace_capability to the aforementioned DS. 3. Attach the dataspace as env()->rm_session()->attach(ds) which returns a void pointer having the virtual address pointing to the starting address of the dataspace.
So if one were to write to this virtual address, it goes through the RM_session and eventually writes to the physical address. My question is, calling attach(ds) in one process and the same attach(ds) in another is going to return different virtual addresses. Will writing to these different (virtual) addresses give the same result?
Is there a function that can be called to print what physical address is mapped to where? And can the contents of Dataspace_capability be printed in a readable form?
Thanks and regards Aditya
Hello Aditya,
On 03/21/2014 11:11 AM, Aditya Kousik wrote:
Hello,
I understand that R/W accesses to physical space are made through the RM session. Is this sequence of events correct?
- Create a Dataspace_capability.
- Allocate a dataspace as env()->ram_session->alloc(size) which returns a
dataspace_capability to the aforementioned DS. 3. Attach the dataspace as env()->rm_session()->attach(ds) which returns a void pointer having the virtual address pointing to the starting address of the dataspace.
that is correct.
So if one were to write to this virtual address, it goes through the RM_session and eventually writes to the physical address.
Well, "it goes through the RM_session" isn't described correctly. Attaching a dataspace results in: the page-fault handler of that thread will be able to resolve page-faults related to the corresponding virtual memory area. Therefore, writes to the virtual memory area will in fact write to the physical memory area - not eventually (not considering cache effects that should be transparent to the user).
My question is, calling attach(ds) in one process and the same attach(ds) in another is going to return different virtual addresses. Will writing to these different (virtual) addresses give the same result?
Yes, of course.
Is there a function that can be called to print what physical address is mapped to where?
The dataspace session interface allows to request the physical address of the dataspace. Assuming you've a capability called "cap" referencing the dataspace in question, you can do the following:
Dataspace_client ds_cli(cap); PINF("phys address of dataspace %p", (void*) ds_cli.phys_addr());
And can the contents of Dataspace_capability be printed in a readable form?
I assume you mean the contents of the dataspace, and not of the dataspace capability, it's important to not confuse them. The contents of a dataspace can only be printed by attaching it, and then e.g. printing it byte-wise.
Regards Stefan
Thanks and regards Aditya
Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. Written by three acclaimed leaders in the field, this first edition is now available. Download your free book today! http://p.sf.net/sfu/13534_NeoTech
Genode-main mailing list Genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main