A paging, or virtual memory, architecture allows the virtual address space (as seen by application software) to be separated from the physical address space (as seen by the hardware). This is conventionally done by mapping each virtual page to a physical address, and paging also allows for each page to be given a different level of protection. For example, the virtual address space might be split into user and kernel spaces; the kernel space would be inaccessible to user applications but both user and kernel spaces would be visible from the kernel.