In Linux there are various ways for inter process communication, for example, shared memory, (named) pipe, socket, message queue.
What are equivalent or similar ways in which Linux kernel and processes communicate? Are the following some of the ways?
- Processes making system calls to kernel,
- kernel sending signals to processes,
- processes uses files through which kernel exposes some functionalities, e.g. QEMU uses KVM via its /dev/kvm device node
- more ...?
Is it correct that interprocess communication can transfer arbitrary data between processes, while the forms of data which can be transferred between kernel and process are more limited (according to the ways that I list)?