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)