The lazy switch defines six receiver states, and their state transitions are as follows: |<--->READY<----> WAIT <----> CALL ----> LAZY_SWITCH ---> KERNEL_RET | | | RUNNING <----------------------------------------|---------------| The receiver thread initially starts in the RUNNING state and can transition to the WAIT state voluntarily. The READY state is a temporary state before entering WAIT state. For a receiver in the WAIT state, it must be in the TASK_INTERRUPTIBLE state. If the receiver thread is woken up, the WAIT state can transition to the RUNNING state. Once the receiver is in the WAIT state, the sender thread can initiate an RPAL call, causing the receiver to enter the CALL state. A receiver thread in the CALL state cannot be awakened until a lazy switch occurs or its state changes. The call state carries additional service_id and sender_id information. If the sender completes executing the receiver's code without entering the kernel after issuing the RPAL call, the receiver transitions back from the CALL state to the WAIT state. Conversely, if the sender enters the kernel during the RPAL call, the receiver's state changes to LAZY_SWITCH.