In the priviledged (supervisory) mode of execution, three
address spaces are accessible: kernel space, user space and I/O space. Note
that user space and I/O space accesses are supposed to be performed
through various macros, not by direct (e.g., *cp) reference. Only the kernel
space should be referenced directly.
In the non-priviledged (user) mode of execution, only one address
space is accessible, user space, and it may always be referenced directly
(e.g., by a *cp reference). This includes temporary mappings to I/O device
control registers that may be set up through the /dev/kmem device
and the mmap() system call.
Note that the C language does not differentiate between these. Inappropriate
coding can lead to bugs that show up in the customer's hands weeks or months
after testing was thought to be complete. RyteTyme can
show you how to structure your code and avoid these problems.