I've read some blogs about MMIO, they say that through MMIO, I can access IO device just as I access normal physical memory. For example, I can read some data from a device by reading a specified physical address, and the CPU will know that I'll access a device instead of real memory and it will go to read data from the device.
I'm wondering how can CPU tell whether it's a MMIO access or a normal memory access?
I guess that there is a specified physical address space that used for MMIO, but I can't find related official document. (Actually I don't even know what keywords to search for some related documents)