But all standard Unix kernels use only Kernel Mode and User Mode.
A program usually executes in User Mode and switches to Kernel Mode only when requesting a service provided by the kernel. When the kernel has satisfied the program's request, it puts the program back in User Mode.
To let the kernel manage processes, each process is represented by a process descriptor that includes information about the current state of the process.
When the kernel stops the execution of a process, it saves the current contents of several processor registers in the process descriptor. These include:
• The program counter (PC) and stack pointer (SP) registers
• The general purpose registers
• The floating point registers
• The processor control registers (Processor Status Word) containing information about the CPU state
• The memory management registers used to keep track of the RAM accessed by the process
All Unix kernels are reentrant. This means that several processes may be executing in Kernel Mode at the same time. Of course, on uniprocessor systems, only one process can progress, but many can be blocked in Kernel Mode when waiting for the CPU or the completion of some I/O operation. For instance, after issuing a read to a disk on behalf of a process, the kernel lets the disk controller handle it and resumes executing other processes. An interrupt notifies the kernel when the device has satisfied the read, so the former process can resume the execution.
One way to provide reentrancy is to write functions so that they modify only local variables and do not alter global data structures. Such functions are called reentrant functions . But a reentrant kernel is not limited only to such reentrant functions (although that is how some real-time kernels are implemented). Instead, the kernel can include nonreentrant functions and use locking mechanisms to ensure that only one process can execute a nonreentrant function at a time.
A kernel control path denotes the sequence of instructions executed by the kernel to handle a system call, an exception, or an interrupt.
Each process run in its own private address space. Process running in user mode and kernal mode have different memory allocated for stacks, data and code areas.
At times part of address space is shared among processes, like when opening an editor by several users. The instructions can be common and saved in memory for all the users but the data is not shared of course so it has different memory allocated.
http://www.johnchukwuma.com/training/UnderstandingTheLinuxKernel3rdEdition.pdf