/proc/iomem
indicates that significant address space is mapped to PCI devices, such as a video card on my box: e0000000-efffffff : 0000:01:00.0
which is 250MB if my math is correct. On a 64 bit desktop with only 16GB RAM I assume there is some trick that linux or all modern kernels can do to recover that part of physical memory, but how exactly?
A somewhat related question - if northbridge/memory controller routes memory/io accesses based on some programmable rule, such that for write access to memory mapped regions(for example, to pci devices), RAM does not even know about those writes since they are routed away, then there should be some sort of 'routing table'? And where does such a table live? How does linux kernel access this table?