The Operating System is the basic level of system software on the platform. It handles access to hardware through drivers, scheduling of tasks, messaging between tasks, memory allocation and various other housekeeping functions.
There are many types of Operating Systems available. At the bottom end, a basic 'Hardware Abstration Layer' provides minimal functionality for setting up core parts of the system and for manipulating hardware components at a low level. Examples include ARM's uHAL.
Moving up from there, an fully-fledged OS adds features such as memory allocation, task switching, messaging and driver support. Examples include uC/OS and ThreadX.
The most capable (and complex) ARM Operating Systems take all of these features to another level. Many separate programs may run with network-based messaging between them. Full TCP/IP, USB, Bluetooth and filing systems stacks are supported. Drivers are available for many different chips and types of harware. Examples include Linux and SymbianOS.
In all cases the basic steps are the same. The main factor affecting the complexity of an ARM Operating System port is the number of hardware components which need to be supported.