This article is an introduction to a new series about computer operating systems.
Lately I’ve been reading a book – ‘Modern Operating Systems’ by Andrew S. Tanenbaum. I’m not done with reading yet but I’ve already come up with an idea for the new series of articles for my blog. Therefore, I would like to cover topics like processes and threads, memory management and file systems. At later stages we will find out how it relates to the Android. In the meantime I plan to write my own bootloader so you should expect some article about it as well.
I believe that this series may be very educational and horizons broadening.
1. What is an Operating System?
Operating system is a piece of software that fulfils two purposes:
- managing the hardware (down-top approach)
- providing clean and abstract set of resources to programmers and their applications (top-down approach)
2. Hardware management
In a nutshell, computer is a bunch of devices put together – processor, memory, disk etc.
The role of the operating system is to provide controlled access to these devices for all programs wanting them. In modern operating systems resource management is based on multiplexing.
Intuition: multiplexing is related to sharing resources
We distinguish multiplexing
- in time
- i.e. if there is only one processor and multiple computer programs that want to use the processor, operating system allocates the CPU to one program, then to the second one and so on
- in space
- i.e. main memory (RAM) is divided into parts so that multiple programs can live simultaneously, not only one at time
3. Clean and abstract set of resources for programmers
Good example of abstraction is a file. It easier to save your data as a file instead of having to deal with details of a disk interface so data management would become almost impossible.
The role of the operating system is to provide a set of abstractions so that programmers can use them to implement programs without bothering hardware details.
Until next time:)