It handles input and output process It sends messages to each application or interactive user about the status of operation and any errors It can off load the management of what are called batch jobs so that the initiating application is freed from this work (i.e. print spool) It can manage how to divide the program (in parallel processing)