To control the scheduling, loading and running of jobs.
To allocate memory space to programs and data.
To keep a log of programme that have been run and actions taken.
To maintain security by checking passwords.
To deal with errors when they occur and keep the system running despite them.
To efficiently control the selection and operation of peripherals.