I am wondering how disk addresses are accessed from a program. From my understanding, the two main facilities are programmed I/O (instructions) and memory-mapped I/O (simply loads and stores). The second is usually just loads and stores into a specific part of memory that maps into the device.
- Is it common for memory-mapped I/O to encompass the whole disk address space or just specific device registers? Can the locations of these memory addresses overlap with valid RAM addresses?
- How does the disk expose the "block interface" to the kernel and at what level of memory management is this handled?
- How do you address these blocks and how does this all work?