What IPC mechanisms in Linux should an embedded engineer know, such as pipes, message queues, and shared memory?