Answer: D
Correct answer: the address generated by the CPU, before translation
A logical or virtual address is the one the CPU generates while a program runs. A physical address is what the memory unit finally sees. The memory management unit performs the translation between them at run time. The distinction is what makes modern operating systems possible. Each process has its own logical address space beginning at zero, and can neither name nor reach any address outside it, so isolation comes for free. Processes can be moved in physical memory without their addresses changing, which is what allows swapping, compaction and paging. The set of all logical addresses a process can generate is its logical address space; the corresponding physical addresses form its physical address space. The two are the same only when binding happens at compile or load time, which no general-purpose system now does. The user program never sees a physical address at all - it deals entirely in logical ones, and the mapping is invisible to it.