Virtualization
Let us take the most basic of resources, the CPU. Assume there is one physical CPU in a system (though now there are often two or four or more). What virtualization does is take that single CPU and make it look like many virtual CPUs to the applications running on the system. Thus, while each application thinks it has its own CPU to use, there is really only one. And thus the OS has created a beautiful illusion: it has virtualized the CPU.
Concurrency
There are certain types of programs that we call multi-threaded applications; each thread is kind of like an independent agent running around in this program, doing things on the program’s behalf. But these threads access memory, If we don’t coordinate access to memory between threads, the program won’t work as expected. First, the OS must support multi-threaded applications with protection (such as locks and condition variables). Second, the OS itself was the first concurrent program — it must access its own memory very carefully or many strange and terrible things will happen.
Persistence
Making information survive computer crashes, disk failures, or power outages is a tough and interesting challenge and needs persistence
<aside> 💡 How to create process threads
⇒ Job of an API (Application program interface) in system calls for OS