![]() |
L4Re Operating System Framework
Interface and Usage Documentation
|
L4SHM provides a shared memory infrastructure that establishes a shared memory area between multiple parties and uses a fast notification mechanism. More...
Topics | |
| Chunks | |
| Signals | |
Functions | |
| L4_BEGIN_DECLS long | l4shmc_create (char const *shmc_name) |
| Create a shared memory area. | |
| long | l4shmc_attach (char const *shmc_name, l4shmc_area_t *shmarea) |
| Attach to a shared memory area. | |
| long | l4shmc_get_client_nr (l4shmc_area_t const *shmarea) |
| Determine the client number of the shared memory region. | |
| long | l4shmc_mark_client_initialized (l4shmc_area_t *shmarea) |
| Mark this shared memory client as 'initialized'. | |
| long | l4shmc_get_initialized_clients (l4shmc_area_t *shmarea, l4_umword_t *bitmask) |
| Fetch the _clients_init_done bitmask of the shared memory area. | |
| long | l4shmc_connect_chunk_signal (l4shmc_chunk_t *chunk, l4shmc_signal_t *signal) |
| Connect a signal with a chunk. | |
| long | l4shmc_area_size (l4shmc_area_t const *shmarea) |
| Get size of shared memory area. | |
| long | l4shmc_area_size_free (l4shmc_area_t const *shmarea) |
| Get free size of shared memory area. | |
| long | l4shmc_area_overhead (void) |
| Get memory overhead per area that is not available for chunks. | |
| long | l4shmc_chunk_overhead (void) |
| Get memory overhead required in addition to the chunk capacity for adding one chunk. | |
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.
A signal can be connected with a chunk or can be used independently (e.g. for multiple chunks).
| long l4shmc_area_overhead | ( | void | ) |
Get memory overhead per area that is not available for chunks.
References L4_CV.
| long l4shmc_area_size | ( | l4shmc_area_t const * | shmarea | ) |
Get size of shared memory area.
| shmarea | Shared memory area. |
| >0 | Size of the shared memory area. |
| <0 | Error. |
References L4_CV.
| 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().
| shmarea | Shared memory area. |
References L4_CV.
| long l4shmc_attach | ( | char const * | shmc_name, |
| l4shmc_area_t * | shmarea ) |
Attach to a shared memory area.
| 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:
| 0 | Success. |
| <0 | Error. |
References L4_CV.
| long l4shmc_chunk_overhead | ( | void | ) |
Get memory overhead required in addition to the chunk capacity for adding one chunk.
References L4_END_DECLS.
| long l4shmc_connect_chunk_signal | ( | l4shmc_chunk_t * | chunk, |
| l4shmc_signal_t * | signal ) |
Connect a signal with a chunk.
| chunk | Chunk to attach the signal to. |
| signal | Signal to attach. |
| 0 | Success. |
| <0 | Error. |
| L4_BEGIN_DECLS long l4shmc_create | ( | char const * | shmc_name | ) |
Create a shared memory area.
| shmc_name | Name of the shared memory area. |
| 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. |
References L4_CV.
| long l4shmc_get_client_nr | ( | l4shmc_area_t const * | shmarea | ) |
Determine the client number of the shared memory region.
| shmarea | The shared memory area. |
References L4_CV.
| long l4shmc_get_initialized_clients | ( | l4shmc_area_t * | shmarea, |
| l4_umword_t * | bitmask ) |
Fetch the _clients_init_done bitmask of the shared memory area.
| shmarea | The shared memory area. | |
| [out] | bitmask | The bitmask describing which clients are initialized. |
| 0 | Success. |
| <0 | Error. |
References L4_CV.
| long l4shmc_mark_client_initialized | ( | l4shmc_area_t * | shmarea | ) |
Mark this shared memory client as 'initialized'.
The corresponding bit is set in the _clients_init_done bitmask. The bitmask can be fetched with l4shmc_get_initialized_clients().
| shmarea | The shared memory area. |
| 0 | Success. |
| <0 | Error. |
References L4_CV.