Please make comments on the following...
The
Serial variable is an instance of the C++ class,
HardwareSerial. It handles the hardware registers directly, sometimes in an Interrupt Service Routine (ISR). I would never suggest direct registor manipulation, because it is not the same register name on all Arduino boards (it is not "portable").
You should read the HardwareSerial.H and CPP files, in the Arduino installation directory. They are in a subdirectory, probably something like
hardware/arduino/avr/cores/arduino.
The
HardwareSerial class copies each received character from the UART register to a RAM byte array (an input buffer).
Serial.available() simply returns the number of bytes in the array (up to its size, 64).
Serial.read() removes one byte from that array and reduces the count.