manage the hardware and software resources of the computer system, and provide a stable, consistent way for applications to deal with the hardware without having to know all the details of the hardware.