One of my areas of research is Operating System Development. It's something I'm quite passionate about, and a lot of fun. It's very rewarding to be working with the core of what a computer is.
## What is an Operating System?
An operating system can be simply defined as software that controls access to the hardware of a computer. This can be done in many ways, some of them quite specialized.
Generally, the *kernel* is the closest layer to the hardware. It gates access to hardware devices, controls memory mapping, and creates abstractions to hardware via it's *hardware abstraction layer (HAL)*.
Commonly, the concept of a *process* or *thread* is in the kernel, which has a *scheduler* designed to multiplex access to the most important resource on the computer -- the *CPU*.
On top of the kernel, system services, device drivers, and system libraries need to be created to provide adequate operating-system level services to user programs (if the OS has user programs, of course). This information usually needs to be loaded in a structured way to memory, so a *virtual file system* is created, with files being loaded from some source.
Essentially, an operating system is the entire collection of software written to make a complete software platform.
>[!example] explorer.exe is a program running under the NT kernel on Windows. explorer.exe is included with the operating system, and serves a function as part of the "package". So, it's part of the operating system.
>[!example] Google Chrome, an aftermarket software package, uses operating system services, but was not included, so it's not part of the OS.
## The Kernel
The kernel multiplexes hardware to entities usually called *processes*, *jobs* or *threads*. These are separate execution contexts. The kernel's purpose is to provide:
* Security
* Stability
* Fairness
* Reactivity
for these processes.
## References