System boot (mandatory) Memory management: Storing location of the code and the data regarding the hardware resources and peripherals (mandatory) Interruptions handling (if any) Task scheduling, if the application can perform more than one task Peripherals management (if any) Error management, if wanted or needed