I'm aware that modern OS, say win10, uses Memory Management Unit,?
I dont think so. Physical addresses are so far abstracted as to be invisible to in a modern OS. Even with simple contiguous memory allocation, the same program could be loaded into a different starting address using only relative addresses internally. Virtual memory allows the same data item to change physical addresses as the page swaps in and out. So even a physical address isnt permanent. And, for very good reasons, that is invisible to the programmer. If you are doing low level assembly w/o an OS memory manager then getting physical addresses is straight forward. But once the memory manager is in place, all addresses a programmer gets are fake.