For example, there is no way that process 1 can access frame #5 (which is part of process 2's virtual memory) in the example, below:
On the other hand, both processes have access to frame #6. Note, though, that process 1 sees this shared frame as page #3, while process 2 sees it as page #4---it's mapped to a different location in their virtual address spaces.
Paging systems can be very flexible: generally they let any page in a particular process's virtual address space map to any frame in memory (or on disk).
We do have the problem, though, of internal fragmentation. The pages are all of the same fixed size, a power of two, typically between 512bytes and 4K. Say a process needs 65537 bytes to run in. Say the page size is 1K. The process would be allocated 65 pages (66560 bytes), leading to the last 1023 bytes of the last page being wasted.
This is an extreme example (with the process using only one byte of its last frame). At the other extreme, a process might use all of its last page, and no memory would be wasted due to internal fragmentation. In the average case, half a page is wasted per process (more correctly, per virtual segment), in a paged memory system.
Pages which are on disk rather than in memory are marked by the MMU as 'absent'.
When a process attempts to access an address in a page which is not mapped on to a frame, the memory access is bound to fail. The MMU notices that the page is marked as 'absent' and causes a page fault, which causes a trap to the OS (rather like an interrupt). The OS reads in a page from the disk into a frame in physical memory, and maps the process's page to the new frame, then restarts the process's thread exactly at the instruction which caused the fault. The process need not know that anything untoward happened.
Where the virtual memory is larger than the physical memory, pages must occasionally be evicted from memory, to make way for other pages being brought in. A 'page replacement algorithm', decides which pages will not be used for a while and should be swapped out.