Imagine how computer’s world would be if every time you want to run a program on your system you should also have to worry about: creating an executable image of the program and select a portion of the main memory where it will be loaded, instructing the CPU to actually executes your code from main memory, interacting with I/O peripherals, handling hardware signals, and so on and so forth.
I bet the market share of personal computer (PC) vendors would have never been born!
In fact, having an Operating System (OS) running within our computers is one of the main reason of the commercial growth of the PC market.
In a nutshell, an operating system is a suite of softwares “placed” between the bare physical machine (i.e., hardware) and the user applications (i.e., other softwares hosted within the system that run on behalf of the users). Specifically, the OS acts as a layer of abstraction, providing to user applications a common, simplified interface to all the computer hardware resources (i.e., a virtualization of the physical machine).
Operating systems can be found on almost any computing device, i.e., from small sensors, to smartphones and video game consoles up to supercomputers.
For our discussion, we therein consider OSs which are responsible for at least the following capabilities:
– Process Management
– Memory Management
– I/O Management
– File System