User mode is an unprivileged mode, and has restricted access
to system resources. All other modes have full access to system
resources in the current security state, can change mode freely, and
execute software as privileged.
Applications that require task protection usually execute
in User mode. Some embedded applications might run entirely in any mode other
than User mode. An application that requires full access to system
resources usually executes in System mode.
Modes other than User mode are entered to service exceptions,
or to access privileged resources.
On an implementation that includes the Security Extensions, in all modes
except Monitor mode and Hyp mode, code can run in either a secure state or in a non-secure
state. In Monitor mode, code can only run in a secure state, and in Hyp mode, code can only
run in a non-secure state.