As a software engineer, most of the code you write will be run by an operating system. Therefore, it’s useful to understand the internals of operating systems.
An operating system (OS) is the “software that manages a computer’s resources for its users and their applications” [1, P. 4].
- Resource allocation
An OS is responsible for resource allocation. It must allocate finite memory and processors to running applications.
An OS must provide isolation. A bug in one program shouldn’t bring down the system, and users shouldn’t be able to access or change another user’s data [1, P. 9].
Sometimes isolated programs need to communicate with each other. An OS provides mechanisms for communication between running programs [1, P. 9].
-  T. Anderson and M. Dahlin, Operating Systems: Principles and Practice. 2012.