You have the first three steps correct, but lose it for step 4-6.
GolamMostafa:
1. The MCU is waiting in the loop() function.
2. Character arrives at the receiver of UART. (USART)
3. The MCU is interrupted and it goes to ISR due to USART_RX_vect. Here, the character is saved in the 64-byte wide FIFO.
4. From the ISR of Step-3, the MCU calls upon the serialEvent() SUR.
5. After finishing the serialEvent() SUR, the MCU goes back to ISR.
6. After finishing the ISR, the control goes back to loop() function.
I'm not sure what loop() contains for programming so the response may be a little incomplete.
Yes Step 3, interrupts the MCU to process ISR USART_RX_vect.
No Step 4, ISR USART does not call serialEvent() (see post #36)
Which makes step 5 irrelevent.
Step 6, OK.
If loop() contains an infinite loop (ie., while (1) {}) then serialEvent() is never called. because it is not called from ISR USART_RX_vect but from serialEventRun() which is executed after completing loop() which never completes due to the infinite loop.
If loop() contains normal programming that ends then serialEvent() is called from serialEventRun() after the executing statements in loop().
In neither case is serialEvent() executed from SR USART_RX_vect. The the programming listed in post #4 for HardwareSerial.cpp is very old, circa 2011 and does not represent how the Arduino and HardwareSerial is programmed today. If you compare the code from post #34 to the files on your computer or to the snippets in post #36, you will notice substantial differences. We must ignore post #34 as it is so far out of date (apologies to @oqibidipo).
GolamMostafa:
Question: Assume that the user is not doing any data processing in the serialEvent() SUR, that means that the user has not explicitly declared the serialEvent() SUR by the statement void serialEvent(){ //codes }; does the MCU still make a jump from ISR to the empty serialEvent() SUR?
No on many counts.
If the user does not define serialEvent(), then there is not serialEvent() subroutine, therefore nothing to jump to from serialEventRun().
Secondly, the ISR does not call/jump to serialEvent(). serialEvent() is called from serialEventRun() see post #36.