41eaff2cc6
This is an interim fix for issue #112. This patch extends the 'Capability_allocator' class with the ability to register the global ID of a Genode capability so that the ID gets associated with a process-local kernel capability. Whenever a Genode capability gets unmarshalled from an IPC message, the capability-allocator is asked, with the global ID as key, whether the kernel-cap already exists. This significantly reduces the waste of kernel-capability slots. To circumvent problems of having one and the same ID for different kernel objects, the following problems had to be solved: * Replace pseudo IDs with unique ones from core's badge allocator * When freeing a session object, free the global ID _after_ unmapping the kernel object, otherwise the global ID might get re-used in some process and the registry will find a valid but wrong capability for the ID Because core aggregates all capabilities of all different processes, its capability registry needs much more memory compared to a regular process. By parametrizing capability allocators differently for core and non-core processes, the global memory overhead for capability registries is kept at a reasonable level. |
||
---|---|---|
.. | ||
arm | ||
include | ||
x86 | ||
cap_session_component.cc | ||
cpu_session_extension.cc | ||
io_mem_session_support.cc | ||
irq_session_component.cc | ||
pd_session_extension.cc | ||
platform_pd.cc | ||
platform_thread.cc | ||
platform.cc | ||
ram_session_support.cc | ||
rm_session_support.cc | ||
signal_source_component.cc | ||
target.inc | ||
thread_start.cc |