knowledge-kitchen
/
course-notes
class: center, middle # Operating Systems the software we never know exists --- # Agenda 1. [What is an Operating System?](#overview) 1. [What's in an OS?](#included) 1. [Desktop Operating Systems](#common) 1. [Mobile Operating Systems](#common-mobile) 1. [Interacting With The OS](#interaction) 1. [Conclusions](#conclusions) --- name: overview # What is an Operating System? -- ## Overview An operating system is the invisible software that most users don't even realize is present and running on their computers. It is the low-level software that allows application software to function on the given computer's hardware. --- template: overview ## Overview (continued) We often speak of computers as being composed of _hardware_ and _software_. -- - **Hardware** describes the physical components of the computer that you could touch, e.g. the processors, memory chips, circuit boards, storage devices, wires, microphones, speakers, trackpads, monitors, keyboards, etc. -- - **Software** describes the programs, i.e. instructions for sequences of operations that the hardware will perform. --- template: overview ## Hardware In order for hardware devices to be controlled by and integrated with software, _device drivers_ are required. Drivers are software parts of the operating system that ensure that electronic signals emitted by the software are formatted correctly for the hardware, and that electronic signals emitted by the hardware are formatted correctly for the software. -- - For example, a _printer driver_ is software that allows a processor running a program to send signals to a printer and have that printer correctly interpret the data so it can print a document. -- - The same concept applies to all hardware devices. --- template: overview ## Software Software can be further divided into _application_ software and _system_ software. -- - **System software** is the software that manages the hardware and provides a consistent platform for running application software. The _operating system_ is a coherent bundle of many different pieces of system software that are designed to work together to support application software. -- - **Application software**, a.k.a. "apps" is the software that users typically interact with directly to perform tasks. For example, web browsers, games, messenger apps, social media apps, camera apps, spreadsheet software, word processing software. --- template: overview ## System software The most fundamental system software in an operating system is called the _kernel_. -- - The kernel [incorporates any device drivers](https://stackoverflow.com/questions/3663897/how-do-drivers-become-a-part-of-the-kernel) to control and organize the hardware with no other layers of software between it and the hardware. -- - The kernel controls and organizes the hardware, [sends/receives messages to/from the hardware](https://www.reddit.com/r/C_Programming/comments/sag4c4/how_does_the_kernel_interacts_with_the_hardware/), passes messages between programs, and allocates available resources (memory, processor time, network bandwidth, etc). -- All other system software depends upon the kernel. --- template: overview ## Application software Application programs require certain common operations, such as access to the input and output devices, access to the processor, random-access memory (RAM), storage devices, and other hardware. -- - The operating system provides a consistent set of basic services that all applications can depend upon. -- - Since each type of operating system provides a specific set of services that must be accessed in a specific way, application software is typically designed to work on only one type of operating system. -- - On most personal computers, the operating system includes a _windowing system_ that allows applications to graphically display their output in consistently-designed windows on the screen. --- template: overview ## Software begets software While it's technically possible to write programs directly to a computer's memory without using application software to help, the tools used by almost all software developers to create software, such as code editors and [compilers](/content/courses/intro-to-computer-science/slides/java-paradigm#compiling)/[interpreters](/content/courses/intro-to-computer-science/slides/java-paradigm#interpreting) are themselves application software. -- - As _machine learning_ and _artificial intelligence_ become more prevalent and useful, we might reasonably expect more software to be created autonomously by existing software without human intervention. -- - Humans have experimented with self-propagating and self-modifying software for many decades, even prior to the recent popularization of machine learning. For example, with [genetic algorithms](https://en.wikipedia.org/wiki/Genetic_algorithm) and [neural networks](https://en.wikipedia.org/wiki/Neural_network_%28machine_learning%29). --- template: overview ## Embedded systems software While users interact with application software, some software serves users' needs but is designed to run without direct user interaction. -- - For example, applications that run within thermostats, spy cameras, drones, refrigerators, cars, industrial robotics, etc. -- - Popular "hobbyist" electronics platforms like the [Raspberry Pi](https://www.raspberrypi.org/) and [Arduino](https://www.arduino.cc/) are designed to be easily programmed by users to run embedded systems software and easily integrate with a wide variety of hardware sensors and actuators. --- name: included # What's In An OS --- template: included ## Overview Operating systems are software. They typically include: - File system - Hardware interfacing - Resource management - Some basic application software - Command line interface -- Additionally, operating systems often include: - Graphical User Interface (GUI) --- template: included ## File system A file system where data is stored using the [paper paradigm](/web/20211208030429/https://knowledge.kitchen/Basic_computer_concepts#The_paper_paradigm_and_the_desktop_metaphor "Basic computer concepts") and metaphor of a filing cabinet: - files - folders - shortcuts - applications that allow you to easily browse the file system - Mac Finder - Windows Explorer - any GUIs for UNIX/Linux will come with their own file system browsing application --- template: included ## Graphical User Interface Graphical user interfaces (GUIs) based on the [metaphor of a desktop](/content/courses/intro-to-computer-science/basic-computer-concepts#The_paper_paradigm_and_the_desktop_metaphor) - the monitor is the top of your desk (i.e. your desktop) - documents and folders sit on top of your desk (i.e. files and folders) - documents can be opened up on your desk (i.e. windows) - typical office accessories can be placed on your desk (i.e. application shortcuts) - the desktop metaphor falls apart: - a trash can sits on top of the desk (i.e. trash and recycling bin) - filing cabinets sit on top of your desk (i.e. hard drives, networked drives, etc) - menus, task bars, and most applications don't really fit into the desktop metaphor very well. - UNIX/Linux do not generally include a GUI - users can choose which GUI to install or use - X Windows is the most popular Linux GUI framework with multiple implementations available --- template: included ## Hardware interfacing OS's take care of the most common computing tasks Interfacing with hardware - monitors - mice - trackpads - keyboards - cameras - microphones - speakers - network connections - any plugged-in external devices --- template: included ## Resource management Process management - multitasking - keeping track of all running applications - scheduling applications so they share the processor nicely -- Memory management - storing data in the computer's memory - caching data - making sure the computer doesn't run out of memory - retrieving data from hard drives --- name: common # Desktop Operating Systems --- template: common ## Overview Popular operating systems for desktop/laptop computers: - Microsoft Windows - Mac OS X - UNIX - GNU/Linux - ChromeOS --- template: common ## Windows ![Original Microsoft logo, circa 1975](../assets/operating-systems/microsoft-logo-original.png) - owned by Microsoft, Inc. - not "[free software](https://www.gnu.org/philosophy/free-sw.html)" - closed source --- template: common ## OS X ![Original Apple logo, circa 1977](../assets/operating-systems/apple-logo-original.png) - owned by Apple, Inc. - based on the [UNIX](https://en.wikipedia.org/wiki/Unix) operating system - not "free software" - closed source --- template: common ## UNIX - the first 'modern' operating system - multiple user accounts, multiple concurrent processes, simple command line interface, etc - begun by AT&T [in the 1960's](https://web.archive.org/web/20211208030429/https://en.wikipedia.org/wiki/Unix#History) - was until recently completely proprietary closed-source software... now some variants are open source and "free software" - learn [basic UNIX/Linux commands](/content/courses/intro-to-computer-science/slides/unix-intro) before it's too late --- template: common name: gnu-linux ## GNU/Linux ![Tux, the Linux mascot, circa 1996](../assets/operating-systems/linux-mascot.png) - began as a free clone of UNIX for [people who wanted free software and freedom from closed-source code](../../copyright_copyleft) - the kernel is called **Linux**, after its creator, [Linus Torvalds](https://en.wikipedia.org/wiki/Linus_Torvalds). The rest of the operating system is more properly called **GNU**, as it is the product of the [GNU project](https://www.gnu.org/home.en.html). - not owned by anybody in the traditional sense - "free software" - [open source](https://www.gnu.org/philosophy/open-source-misses-the-point.en.html) --- template: common ## ChromeOS ![Original Google logo, circa 1997](../assets/operating-systems/google-logo-original.gif) - a distribution of Linux - owned by Google, Inc. - not "free software" - partially open source, partially closed source --- name: common-mobile # Mobile Operating Systems -- ## Overview Popular operating systems for mobile/tablet computers: - iOS - Android --- template: common-mobile ## iOS - owned by Apple, Inc. - the mobile version of OS X - based on UNIX - closed source - not "free software" --- template: common-mobile ## Android - owned by Google, Inc. - based on GNU/Linux - [nominally open source](https://www.gnu.org/philosophy/android-and-users-freedom.html) - several critical parts are closed source - not "free software" --- template: common-mobile ## GNU/Linux While there are some "free software" open source GNU/Linux distributions targeted for mobile devices, none at the time of this writing are in common use - this is due, in part, to mobile phone device manufacturers blocking independent developers and not wanting to release the source code for their device drivers - the [Librem 5](https://puri.sm/products/librem-5/) and [PinePhone](https://pine64.org) are valiant attempts at hardware phones designed explicitly to run GNU/Linux. However, they do not offer the same level of user-friendliness and reliability required by "regular" people. --- name: interaction # Interacting With the Operating System --- template: interaction ## Command line ![A classic DEC VT100 terminal, circa 1978](../assets/operating-systems/terminal-dec-vt100.jpg) --- template: interaction ## Command line (continued) The [command line](https://en.wikipedia.org/wiki/Command-line_interface) is a text-based system that allows a user to interact with a computer. Command line interfaces today are generally modeled after the [computer terminals of yesteryear](https://en.wikipedia.org/wiki/Computer_terminal "wikipedia:Computer terminal") - devices that allowed input into a computer and displayed output from a computer via a keyboard and monitor, but were separate from the computer itself, which was often very large and located elsewhere. - [MS DOS prompt](https://en.wikipedia.org/wiki/Dos_prompt) in Windows - [Terminal](https://en.wikipedia.org/wiki/Terminal_%28Mac_OS_X%29) in Mac OS - a variety of [shell programs](https://en.wikipedia.org/wiki/Linux_shell) in UNIX and GNU/Linux --- template: interaction ## Graphical User Interface The [Graphical User Interface](https://web.archive.org/web/20211208030429/http://en.wikipedia.org/wiki/Graphical_user_interface) (GUI) is a visual display of options and controls that allows a user to interact with a computer. This is how most "normal" people interact with a computer. - most (but not all) GUIs are based on the concept of the [desktop metaphor](/content/courses/intro-to-computer-science/basic-computer-concepts#The_paper_paradigm_and_the_desktop_metaphor). --- template: interaction ## Graphical User Interface (continued) The most popular operating systems for personal computers each come with a GUI included: - Microsoft Windows - Apple OS X - Google ChromeOS --- template: interaction ## Graphical User Interface (continued again) UNIX & GNU/Linux operating systems can sometimes be bundled with GUIs, although many distributions do not come with any at all. -- Some popular GUIs for UNIX/Linux include: - [X Windows](https://web.archive.org/web/20211208030429/https://en.wikipedia.org/wiki/X_Window_System "wikipedia:X Window System") - the most popular "windowing framework" for UNIX-like operating systems, providing the primitives from which a variety of GUIs can be made - [GNOME](https://www.gnome.org/) - A user-friendly desktop GUI environment built on top of the X Windows framework. - [XFCE](https://xfce.org/) - A lightweight and fast desktop GUI environment designed for low resource usage while maintaining a visually appealing interface. - [KDE Plasma](https://kde.org/plasma-desktop) - A powerful and flexible desktop GUI environment known for its configurability and extensive features. --- template: interaction ## Graphical User Interface (continued once more) Operating systems for mobile devices usually come with a GUI included: - Google Android - Apple iOS --- name: conclusions # Conclusions -- You now are somewhat familiar with what an operating system and what's included. - Thank you. Bye.