class: middle, center ![rhizome](../public/images/rhizome.jpg) ## .subtitle[Wat is operating system?] --- class: middle, center # Nobody really can say ## .subtitle[Or rather, everyone can say?] --- class: middle, left # Three definitions [Modern Operating Systems](https://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X): > It is hard to pin down what an operating system is other than saying it is > the software that runs in kernel modeāand even that is not always true. Part > of the problem is that operating systems perform two basically unrelated > functions: providing application programmers a clean abstract set of > resources instead of the messy hardware ones and managing these hardware > resources. --- class: middle, left # Three definitions [Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/OSTEP/): 1. Virtualization 2. Concurrency 3. Persistence --- class: middle, left # Three definitions [Exterminate All Operating System Abstractions](https://people.eecs.berkeley.edu/~brewer/cs262b/hotos-exokernel.pdf): > "software that securely multiplexes and abstracts physical resources" But, uh... > We believe that this denition specifically its view of the OS as an > abstractor of hardware, is crippling and wrong. --- class: middle, center # abstractions --- class: middle, center ![program-hardware](../public/images/program_hardware.png) --- class: middle, center ![program-os-hardwares](../public/images/program_os_hardware.png) --- class: middle, center ![program-vm-oss-hardwares](../public/images/program_vm_os_hardware.png) --- class: middle, left ### We now have a pattern: - ## I have `A`. - ## `A` is written explicitly for `X`... - ## ... but I want to support `X` and `Y`, - ##
so I put .highlight[abstraction] `B` in the middle.
--- class: middle, center # isolation --- class: middle, left # "Kernel" vs. "Operating System" - This is also a bit fuzzy - "the software that runs in kernel mode", "even that is not always true" - The kernel is the core of the operating system. --- class: middle, left # Kinds of kernels - monolithic kernel - microkernel - exokernel - unikernel --- class: middle, left # Common abstractions These are some common abstractions provided by an operating system and/or kernel: - address spaces - memory protection - processes - files - input/output devices --- class: middle, left # Some quick history Another way to divide up kinds of kernels is through a sort of history: - no OS - batch OS - single user - multi user Each of these changes caused new features to be required. --- # Some quick history ![core war](../public/images/corewar.png)