Design Decisions# These pages explain the reasoning behind some key design decisions for CellulOS. Preventing Deadlocks with Async Messages Investigation Potential Solutions Existing Systems FUSE (File System in Userspace) QNX Hubris CellulOS Async Message Design Async Design Options Async Message Queue Uphill-only Chosen Design Implementation Example 1 Example 2 Cleanup Policy Design Metric-Based Cleanup Resource Deletion Policy Depth-based Resource Space Cleanup Policy PD Configuration Design PD Runtime Setup Conditions for setup method Passing Arguments to the PD Stack Layout for C runtime setup Stack Layout with TLS setup The Root Task’s Role in PD configuration pd_client_runtime_setup() ELF metadata Elevated CPUs TLS setup Unified PD Entry and Exit Point Three main setup pathways: main or entry function visible to the started PD C runtime library CellulOS PD Exit Point libc _start sel4utils processes CellulOS process-like PDs CellulOS thread-like PDs Guest-OS PD Entry Linux Guests Custom startup and shutdown policies