I have been reading on memory management, protection, paging etc. and while I do get the gist of virtual memory, there is two things I'm still a bit fuzzy about.
Now when a user space process gets started, kernel setups the memory and paging table for it (as I understand it). Now after the program is started, how exactly does the memory access work? Does every single action that needs to read/write memory (so basically pretty much everything) need to go through the kernel for address translation, or can the process "directly" access the memory. Meaning is there a component (mainly mmu) that does the translation on-the-fly without any need to switch to kernel. for the translation.
tl;dr is there a physical component that does virtual-> physical address mapping, or is all of this handled by kernel.
p.s. if it does matter I'm talking about x86 cpu and linux.