Share exist memory over IPC with L4Re
alexander.fratzer at gmail.com
Mon May 15 15:17:57 CEST 2017
I have a very simple problem but I can't find the solution in the
L4Re-Doc and examples so far. I wrote a very simple Unix-Like Shell with
a Filesystem-Server and a Loader-Server and I implemented some
Posix-Call as an abstraction for the communication with the
Filesystem-Server (virtual). Now I have a problem of double copies for a
read-Operation. I want a complete abstraction from the L4Re mechanisms
and the underlying Client-Server architecture for the usage of this
interface. The (bad) mechanism is as follow:
Function (client side):
ssize_t read(int fd, void *buf, size_t count)
1. Allocate Dataspace with size of count.
2. Send Cap of Dataspace to the Filesystem-Server.
3. Copy content of Dataspace to buf.
Function (server side):
long VFSSrv::op_file_read(VFS::Rights, TaskRegistry::TaskId task,
TaskRegistry::FileDescriptor fd, size_t size, L4::Ipc::Snd_fpage& flexp,
1. Get Dataspace-Cap from Ipc-fpage.
2. Reserve area with Region-Manager.
3. Attach Dataspace to the area.
4. Copy content of the file to the attached area.
This was my first working solution without focus on runtime but
the creation of a new task from an ELF-File of 1.4 MB size takes
20 seconds on Cortex A8. This suxx so I have to optimize.
Therefor I need a way to share the content of my file (virtual, heap
allocated memory) without copying to the client but i don't find a way
to share exist memory over IPC. I think I'm using the
Dataspace-mechanism in a wrong way but maybe a Dataspace isn't the right
choice in my case. A simple solution would be a new Filesystem which is
based on Dataspaces but I don't want to do this. Have anybody a better idea?
Thanks for help.
Best regards Alex.
More information about the l4-hackers