![]() Modern processors have larger (4G or larger) address spaces so that this is no longer an issue. Very old processors often included I/O mapped device support because the memory address space was so small (often 65,536 bytes or less) that I/O addressing provided a way to preserve memory address space for actual memory. The x86 for example is (on some level) compatible all the way back to the 8008. The memory map, as it is often called, is essentially the bridge between the hardware and software projects the hardware team allocating each of the various memory and peripheral devices their own chunk of the processors address space, the software team then writing their code to access the memory and peripherals at the given locations. Support for special I/O mapping is generally a legacy issue. ![]() This typically gives the compiler a better shot at creating better code (ignoring the whole RISC/CISC debate for now). Memory Mapped I/O is a technique that allows to use the same address space to address both memory and I/O devices. Special I/O mode instructions are generally limited to load/store. With memory, load/store instructions are supplemented with various monodic (inc/dec/etc) and dyadic (add/sub/etc) operators. Flexibility: Almost without exception, the processor instructions available for memory are more varied and versatile than those for I/O mapped.Generally, I/O instructions are "wide open" in privileged modes allowing a driver to access any I/O mapped device, even those that it should not. Security: As memory addressed devices, memory management hardware can be used to control access to those devices.These map well into high level languages allowing device drivers to manipulate devices without the need to drop down into assembly language to use special I/O instructions. Access: Memory mapped devices use the same instructions/addressing modes as regular memory.There are many advantages to memory mapped I/O
0 Comments
Leave a Reply. |