From the above code, the compiler will generate 3 object files:
a.cpp -> a.o
b.cpp -> b.o
main.cpp -> main.o
The linker will create the executable from the object files.
Now, the main.cpp probably includes a.h and b.h (to know about those functions). Preprocessor essentially concatenates the headers with main.cpp. Compiler takes the result and computes the object file. This is one translation unit.
a.cpp with x.h, iostream, and a.h is another unit.
b.cpp with x.h, iostream, and b.h is another unit.
Translation units are independent of each other; you could compile them simultaneously, in parallel.
Translation units may (re)use same code (like the x.h and <iostream>).