-
Notifications
You must be signed in to change notification settings - Fork 2
Muen block session #65
Comments
Muen uses protocol identifiers to determine the channel protocol. As the channels are unidirectional there are two protocols, a request and a response. Furthermore the Linux module uses a distinct protocol identifier for each channel with the test that uses two channels resulting in the following values:
Running multiple channels with the same protocol identifier on different channels seems to work. |
As there is currently no convention we use the first protocol id for each protocol. Also since we can only supply one name per session but need two channels the channels will have a prefix and the supplied session name:
|
To allow session based channel detection each channel name will be further prefixed with a session name abbreviation:
|
The dispatching approach fits well with #50. Since it wouldn't make sense to implement a worse approach first that is already deprecated due to a planned feature I'll implement #50 first and continue the dispatcher afterwards. Explanation:
On both Genode and Muen the dispatcher generates the information for the |
The current block channel on Muen uses combined meta data and data inside the channel. While this reduces the implementation complexity it prevents the usage of larger requests or block sizes other than 4096. It also forces the reading end of each channel to either handle the blocks in order or cache them inside the application. Furthermore it requires at least one copy operation on each block. An alternative approach would consist of two meta data only channels and a third shared memory region for blocks. The meta data channels would be similar to the current channels used but without block data. The shared memory region would be used to exchange block data. To prevent race conditions the client is solely responsible for allocating and freeing blocks from this region. The client stores the region to be used by the server inside the request sent over the meta data channel. Tracking the allocation and deallocation of blocks in the shared memory region is up to the client and transparent to the server. The server will determine memory to be used for each request solely by the meta data. A meta data event could have the following elements:
The None request is an explicitly empty request that indicates an unused field in the shared memory channel. In case of a Read, Write and Sync request the next fields indicate the starting block number and the number of consecutive blocks that should be handled. In case of Read and Write the shared memory offset indicates the position inside the shared memory that should be used to read/write the data. The client needs to allocate enough consecutive memory for the complete request to fit. There are further 16 byte that are free to use for the client. |
No description provided.
The text was updated successfully, but these errors were encountered: