L4SHM provides a shared memory infrastructure that establishes a shared memory area between multiple parties and uses a fast notification mechanism.
More...
L4SHM provides a shared memory infrastructure that establishes a shared memory area between multiple parties and uses a fast notification mechanism.
A shared memory area consists of chunks and signals. A chunk is a defined chunk of memory within the memory area with a maximum size. A chunk is filled (written) by a producer and read by a consumer. When a producer has finished writing to the chunk it signals a data ready notification to the consumer.
A consumer attaches to a chunk and waits for the producer to fill the chunk. After reading out the chunk it marks the chunk free again.
A shared memory area can have multiple chunks.
The interface is divided in three roles.
- The master role, responsible for setting up a shared memory area.
- A producer, generating data into a chunk
- A consumer, receiving data.
A signal can be connected with a chunk or can be used independently (e.g. for multiple chunks).
◆ l4shmc_area_overhead()
long l4shmc_area_overhead |
( |
void |
| ) |
|
Get memory overhead per area that is not available for chunks.
- Returns
- Size of the overhead in bytes.
◆ l4shmc_area_size()
long l4shmc_area_size |
( |
l4shmc_area_t const * |
shmarea | ) |
|
Get size of shared memory area.
- Parameters
-
shmarea | Shared memory area. |
- Return values
-
>0 | Size of the shared memory area. |
<0 | Error. |
◆ l4shmc_area_size_free()
long l4shmc_area_size_free |
( |
l4shmc_area_t const * |
shmarea | ) |
|
Get free size of shared memory area.
To get the max size to pass to l4shmc_add_chunk, subtract l4shmc_chunk_overhead().
- Parameters
-
shmarea | Shared memory area. |
- Returns
- Size of the shared memory area.
◆ l4shmc_attach()
long l4shmc_attach |
( |
char const * |
shmc_name, |
|
|
l4shmc_area_t * |
shmarea |
|
) |
| |
Attach to a shared memory area.
- Parameters
-
| shmc_name | Name of the shared memory area. |
[out] | shmarea | Pointer to shared memory area descriptor to be filled with information for the shared memory area. |
On success, the data in 'shmarea' contains a client number which can be used to mutual agree about client initialization:
- Return values
-
- Examples
- examples/libs/shmc/prodcons.c.
◆ l4shmc_chunk_overhead()
long l4shmc_chunk_overhead |
( |
void |
| ) |
|
Get memory overhead required in addition to the chunk capacity for adding one chunk.
- Returns
- Size of the overhead in bytes.
◆ l4shmc_connect_chunk_signal()
long l4shmc_connect_chunk_signal |
( |
l4shmc_chunk_t * |
chunk, |
|
|
l4shmc_signal_t * |
signal |
|
) |
| |
Connect a signal with a chunk.
- Parameters
-
chunk | Chunk to attach the signal to. |
signal | Signal to attach. |
- Return values
-
- Examples
- examples/libs/shmc/prodcons.c.
◆ l4shmc_create()
long l4shmc_create |
( |
char const * |
shmc_name | ) |
|
Create a shared memory area.
- Parameters
-
shmc_name | Name of the shared memory area. |
- Return values
-
0 | Success. |
-L4_ENOMEM | The requested size is too big. |
-L4_ENOENT | No valid capability with the name of the shared memory area found. |
<0 | Errors from l4re_rm_attach or l4re_ns_register_obj_srv. |
- Examples
- examples/libs/shmc/prodcons.c.
◆ l4shmc_get_client_nr()
long l4shmc_get_client_nr |
( |
l4shmc_area_t const * |
shmarea | ) |
|
Determine the client number of the shared memory region.
- Parameters
-
shmarea | The shared memory area. |
- Returns
- client number.
◆ l4shmc_get_initialized_clients()
long l4shmc_get_initialized_clients |
( |
l4shmc_area_t * |
shmarea, |
|
|
l4_umword_t * |
bitmask |
|
) |
| |
◆ l4shmc_mark_client_initialized()
long l4shmc_mark_client_initialized |
( |
l4shmc_area_t * |
shmarea | ) |
|