Ok, that title is a bit off, but I'll try to be more spot on.
In different printed circuit boards, or motherboards, the hardware engineers, I'm assuming, map certain memory in the processor's address space so it can write to it, and then successfully move it through the chipset to the device.
This is the basis of memory mapped I/O.
I am assuming that certain memory is mapped for certain devices, so if you write to that memory it goes to that device, for example, video memory in Intel x86 based processors and chipsets.
Since this designates where what address is written to and what it must do based on some ... I don't know ... address/logic circuitry, all motherboards come by default with mapped memory in range, or no?
If one didn't, how would one set this up? I'm just curious in this, and I'm hoping to develop for a team that is trying to compete against Microsoft. :D
Memory mapped I/O is a software concept, not hardware. It is just a kind of an API. The OS is responsible for managing the mapping between the memory and devices. How it is done - depends on the OS and hardware capabilities. For File I/O usually DMA channels are used to transfer the data in both directions directly between memory and drive, without bothering CPU too much.
I am assuming that certain memory is mapped for certain devices, so if you write to that memory it goes to that device
Nope, memory mapped data are kept in RAM, not in device memory. If you write to that memory it does not go to the device until you call a special command like fsync.
@rapidcoder, I don't know much, but something's amiss. Video memory a 0xB8000 is not set up by the OS (by BIOS, maybe?) and does not need any flushing.
@rapidcoder
That's a different thing entirely; you're talking about memory mapped file I/O, this topic is about hardware I/O being mapped to memory addresses, like hamsterman's example of video memory being mapped to 0xB8000 (in colour text mode anyway).
When the CPU accesses memory it goes through the memory controller. Devices can monitor the memory controller for access and intercept it, so if you access 0xB8000, the GPU intercepts the access (assuming it's in the appropriate mode, like I said, it's only in colour text mode that it uses 0xB8000; in graphical modes it uses 0xA0000 and in monochrome text mode it uses 0xB0000).