Q:

Difference between logical and virtual addresses

Today I heard that a:

DMA-controller is mapping/converting logical addresses (from I/O-Mapping) to physical addresses
MMU-controller is mapping/converting virtual addresses to physical addresses

So now I'm really confused! What is the difference between logical and virtual addresses? Why do we need that new type of address (logical address)?

A:

Logical address: the address as the CPU instruction set is using. Note that there can be many more such addresses than there is RAM (or other memory or IO) in the system.
Physical address: the address that is sent to the RAM (or ROM, or IO) for a read or write operation.
For a simple system, physical address = logical address. Larger systems are generally demand-paged virtual memory systems, where the MMU translates a logical address to a physical address, or alerts the OS to take action (to allocate a page, read a page from disk, or deny access to a page -> trap or fault).
"DMA-controller is mapping/converting logical addresses (from I/O-Mapping) to physical addresses"

I don't understand that sentence, maybe I am missing some context. In the cases I know, the DMA works on physical addresses. (A DMA working on logical addresses is possible, but less efficient because each DMA transfer would involve the MMU. But it would be easier to use.)

