how kernel manages virtual memory

I just wanted to know how kernel actually deny proccess from access another memory region for example if IP register is set to 0x41414141 isnt that direct cpu instruction how can the kernel deny the cpu from accessing that address in the physical memory

another question:

when debugging an application the addresses we see and libc and shared lib addesses are in the virtual memory, how then cpu access a memory that is not exist ? or how actually kernel tell the cpu the location of the region in the physical memory at runtime

Also another question, in x86_32 arch syscalls issues by int 0x80 how kernel preserve a software interrupt number for itself how that happens