Operating Systems
Fall 2024
Documents
- Syllabus and Schedule - revised September 1, 2024
- History and Advice
- About Laptops and Phones in Class
- Course Policies
- General Academic Calendar
- Academic Honesty
- School of Computer Science and Mathematics Department of Computing Technology Goals
- Writing Center
- Counseling Services
- Title IX at Marist
- Title IX Student Bill of Rights and IX Reporting Options
- Academic Learning Center for tutoring and more
Books and Articles
- OS Concepts - Our text
- Operating Systems and Middleware - by Max Hailperin
- Linux Insides by 0xAX (Alex)
- Operating Systems: Three Easy Pieces by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
- Project Oberon by Niklaus Wirth
- Think OS by Allen B. Downey
- Little Book About OS Development a practical guide to writing your own x86 operating system - by Erik Helin and Adam Renberg
- The Evolution of Operating Systems by P. Brinch Hansen
- Chapter Two of The Design and Implementation of the 4.4BSD Operating System
- All About the Windows Kernel
- HaLVM - the Haskell Lightweight Virtual Machine
- Unix History - An Illustrated Memoir video by Rob Pike
- Unix History Chapter from The Art of Unix Programming
- The Unix-Haters Handbook
- Command Line Interface Guidelines
- Apple's macOS
- BE an OS - The nerdiest game ever?
- The Evolution of Operating Systems by the great Per Brinch Hansen
Projects and Labs
- Embrace scholarship and write your labs with LaTeX. Overleaf is probably the easiest way to do this. I've written a template you can use. There are more LaTeX resources below. All of the labs feed into the major projects.
- Here is iProject0, the baseline TypeScript source code, to get you started. Go to the 2024 version of the source code to download a zip file or clone it so you can make a private GitHub repository of your own. You can see the (very similar) 2019 version running as an example too.
- Finally, here is advice about the project from a former student.
- Getting Started
-
iProject 1
- Lab 1 Activity: Adding shell commands
- Lab 2 Activity: Manipulating the Canvas
-
iProject 2
- Lab 3 Activity: Implementing CPU op codes
- Lab 4 Activity: Executing one program
-
iProject 3 (and a diagram)
- Lab 5 Activity: Implementing a scheduler and context switches
- Lab 6 Activity: Memory protection with base and limit tracking
- Lab 7 Activity: Executing many programs in memory
-
Final Project
- Lab 8 Activity: Simulating disk hardware
- Lab 9 Activity: Implementing a disk subsystem
- Lab A Activity: Executing many programs in memory and from disk
- Project and Lab Resources
- Intelli J IDE - Register for a free student license. Here's the Intelli J help page for TypeScript.
- JavaScript Keyboard Key Codes
- JavaScript Keyboard Event Maddness
- Instruction Set for iProjects
- Canvas Rendering function: putImageData() - You're going to need this.
-
Thomas's and Alan's memory-filling and bounds-testing program:
A9 A9 A2 01 EC 13 00 AC 0B 00 8D F0 00 EE 0B 00 D0 F5 00 00
-
Lots of loops
A9 00 8D EC 00 A9 00 8D EC 00 A9 00 8D ED 00 A9 00 8D ED 00 A9 00 8D EE 00 A9 00 8D EF 00 AD ED 00 8D FF 00 AE FF 00 A9 00 8D FF 00 EC FF 00 D0 BA AD EC 00 8D FF 00 A9 01 6D FF 00 8D EC 00 AD EC 00 8D FF 00 AE FF 00 A9 03 8D FF 00 EC FF 00 D0 05 A9 01 8D ED 00 A9 00 8D EE 00 A9 00 8D EF 00 AD EF 00 8D FF 00 AE FF 00 A9 00 8D FF 00 EC FF 00 D0 49 AD EE 00 8D FF 00 A9 01 6D FF 00 8D EE 00 AD EE 00 8D FF 00 AE FF 00 A9 02 8D FF 00 EC FF 00 D0 05 A9 01 8D EF 00 A9 F8 8D FF 00 A2 02 AC FF 00 FF AD EE 00 A2 01 8D FF 00 AC FF 00 FF A9 00 8D FF 00 A2 01 EC FF 00 D0 A4 A9 F1 8D FF 00 A2 02 AC FF 00 FF AD EC 00 A2 01 8D FF 00 AC FF 00 FF A9 EE 8D FF 00 A2 02 AC FF 00 FF A9 00 8D FF 00 A2 01 EC FF 00 D0 33 00 00 00 20 20 00 20 6F 75 74 65 72 00 20 69 6E 6E 65 72 00 00
Resources
- LaTeX
- Comprehensive TEX Archive Network
- Overleaf (formerly ShareLaTeX)
- LaTeX Tutorial from Overleaf
- TeX Stack Exchange
- TikZ package tutorial (for drawing DFAs and NFAs)
- TypeScript
- Welcome to TypeScript
- The TypeScript Handbook
- Typescript in 5 Minutes
- The TypeScript tag at Stack Overflow
- Static code analyzer for TypeScript from SonarSource
-
Videos of Anders Hejlsberg on TypeScript:
- at BUILD 2014
- Inside TypeScript from BUILD 2012
- The Typescript Compiler Explained
- HTML5
- Introduction to HTML
- Some Cool HTML 5 Features
- W3C HTML Validator
- Mozilla Canvas Tutorial
- HTML5 Web Storage Specification
- Dive into HTML5 Local Storage
- HTML 5 Local Storage Overview
- Introduction to HTML5 Web Storage
- The HTML tags at Stack Overflow
- The HTML5 and Database tags at Stack Overflow
- The HTML tag at Pro Webmasters Stack Exchange
- JavaScript
- JavaScript is Good, Actually - Well... modern JavaScript is.
- A Re-introduction to JavaScript
- JavaScript Style Guides
- The jQuery JavaScript Style Guide
- Some JavaScript code conventions - from Doug Crockford
- More JavaScript code conventions - from many people, managed via Git
- JavaScript: The Good Parts - by Doug Crockford
- The JavaScript tag at Stack Overflow
- The JavaScript tag at Pro Webmasters Stack Exchange
- JavaScript Keyboard Events Madness
- Treant.js - a JavaScipt library for tree diagram visualizations
- Write Tetris in JavaScript
- Git
- GitHub Desktop
- A Gentle Introduction to Git and GitHub from Alan
- Git from the Bottom up by John Wiegley
- Git Basics
- Try Github
- GitHub Guides
- Advanced: Git From the Inside Out
- Visualizing Git Concepts
- How to Write a Git Commit Message - pretty good advice
- The Issues Feature on GitHub
- Dangers of GitHub and Amazon
- 6502 Assembly Language
- Instruction Set for Our Projects
- How To Write 6502 Assembly Language from Easy 6502
- Why the 6502? Because The 6502 CPU Powered a Whole Generation! from The 8-Bit Guy
- Visual 6502
- Virtual 6502 assembler and disassembler
- In-depth 6502 Op Code Analysis (With "illegal" op codes too.)
- 6502 / 6510 / 8502 Opcode List, with details - from Nybbles and Bytes
- 6502 Circuit Diagram
- Commodore History Part One - The PET - video from from The 8-Bit Guy
- From BitSavers' Software Archive:
- From AtariArchives:
- T-800 Heads-up Display from The Terminator, 1984
- Learn 6502 Assembly Language by hacking Mario World
- Software Development
- Software Engineering at Google a book by Abseil
- Ideas about Software Development - 6 years later
- Software Development Developments at Microsoft
- Exploding Software Engineering Myths - more from Microsoft Research
- A Microsoft Code Review - with Marist alum Jon Miller
- A big list of naughty strings - Great for testing
- Comments on Comments
-
Great books about writing software
- Code Complete by Steve McConnell
- Beautiful Code by Andy Oram & Greg Wilson
- Coders at Work by Peter Seibel
- Algorithms
- Algorithm Visualizations - VisuAlgo, from Dr. Steven Halim and some of his students from the National University of Singapore
- Visualizing Algorithms by Mike Bostock, creator of d3
- Sorting Algorithm Animations - Visual demos by David R. Martin
- The Sound of Sorting - Sorting Algorithm Audibilization and Visualization, by Timo Bingmann
- Data Structure Visualization Tool from David Galles
- Alan's Algorithms Course
Notes
- Chapter One
- Chapter Two
- Chapter Three
- Chapter Four
- Chapter Five
- Chapters Six and Seven
- Chapter Eight, part 1
- Chapter Eight, part 2
- Chapter Nine
- Chapter Ten
- Chapter Eleven
- Chapter Twelve
Further Reading (and listening)
- UNIX
- From the AT&T Archives: The UNIX Operating System - a video of Kernighan, Ritchie, Thompson, Aho, Johnson, and other seminal figures at Bell Labs explaining why they invented Unix.
- Ken Thompson interviewed by Brian Kernighan - video
- Overview - Bell Labs
- Creation - Bell Labs
- The UNIX Time Sharing System - Dennis Ritchie and Ken Thompson
- Early history and Evolution - Dennis Ritchie
- BSD Unix Family Tree
- How Unix erases things when you type a backspace
- Linux Kernel Map
- Inside the Linux Boot Process by M. Tim Jones
- A Fast File System for UNIX - by Marshall Kirk McKusick, William N. Joy, Samuel J. Leffler, Robert S. Fabry
- Windows NT vs. Unix: A design comparison - by Julio Merino
- Windows
- The Mind Behind Windows: Dave Cutler - October 2023 interview
- Introduction to Windows Kernel Security Development from Matasano Security
- Windows NT and VMS: The Rest of the Story by Mark Russinovich
- Mark Russinovich's History with Microsoft from WIRED
- Windows Sysinternals
- Mark Russinovich's Blog
- A Brief History of Windows from NT to 2000
- Writing Device Drivers for Windows in 1994
- macOS / OS X
- Virtual Memory and Memory Pressure in 10.9 Mavericks by Jonathan Levin
- Understanding and Debugging Kernel Panics
- Example OS X crash dump
- About APFS - Apple's Next-gen file system
- XNU kernel - The XNU kernel is part of the Darwin operating system for use in OS X and iOS operating systems. XNU is a hybrid kernel combining the Mach kernel developed at Carnegie Mellon University with components from FreeBSD and the C++ API.
- File Systems
- De-frag -- The Game
- All about Disk Drives
- The BeOS file system
- Practical File System Design: The Be File System by Dominic Giampaolo
- File System Perils It's amazing it ever works.
- An Inside Look at MS-DOS From Tim Paterson of Seattle Computer Products, the original author who sold it to Bill Gates.
- 50 years in filesystems by Kristian Köhntopp
- Enterprise Computing Insights
- Batch Processing
- Transaction Systems
- Enterprise Servers
-
Software Engineering Radio
The podcast for professional developers
I really like these folks. Highly recommended. Here are a few episodes to get you started:- Bruce Momjian on the Postgres Query Planner
- Eric Brewer: The CAP Theorem, Then and Now
- Michael Stonebraker on database systems today
- Graph Databases
- Moshe Vardi on P versus NP
- Dynamic Languages for Static Minds
- Type Systems
- Monica Beckwith on Java Garbage Collection
- Introduction to Aspect-oriented Programming (AOP)
- Aspect-oriented Programming with Aspect J and Spring AOP
- Leslie Lamport on Distributed Systems
- Kyle Kingsbury on Consensus in Distributed Systems
- Concurrency Part One
- Concurrency Part Two
- Concurrency Part Three
- More about Concurrency
- Dick Gabriel on the origins of LISP
- Phillip Carter on F#
- Joe Armstrong on Erlang
- Martin Odersky on Scala
- Martin Ordersky on Scala Update
- Simon Peyton Jones on Functional Programming and Haskell
- Interview with Anders Hejlsberg - Turbo Pascal, Delphi, C#
- Morgan Wilde on LLVM
- The Singularity Research OS
- Garbage Collection and Transactional Memory
- Other
- C library System Calls (libc)
- Turing Award winner Leslie Lamport on Critical Sections, the Bakery Algorithm, and Distributed Systems - Communications of the ACM, September 2022
- Translation Lookaside Buffers in x86 processors
- Threads in the Netflix Android app
- Apollo 11: Mission Out of Control from WiReD
- The EDSAC turned 70 in 2019 - Early computing from Cambridge and here's an even earlier (1951) film about it
- Deadlock Empire - a cool deadlock game
- Meltdown and Spectre - At least it's not SPECTRE
- Memory usage in Java
- Examining Core Memory in a vintage IBM 1401
- Concurrency vs Multi-threading vs Asynchronous Programming
- Real life 6502 on the KIM-1 - Written by hand!
- File Systems: The Next Generation - Atomic COWs!
- What Every Programmer Should Know About Memory from LWN.net
- VxWorks RTOS
- Gustavo Duarte's Software Illustrated - Lots of good OS/hardware explanations
- CPU Scheduling Algorithm Simulation
- OSDev.org Wiki
- A History of Branch Prediction
- 6502 Interrupts Primer
- A JVM Does That? by Cliff Click
Past Project Hall of Fame
- 2023
- BrenDOS by Brendan Gibbons
- LegOS by Alex Hanys
- MarshMan by Ian March
- LuchiOS by Luciano Mattoli
- 2022
- chaOS by Shannon Brady
- KeeDOS (GLaDOS enabled) by Kyle DePace
- jOSh by Josh Seligman
- 2021
- SamOS by Sam Alcosser
- rhinOS by Joe McDonough
- 2020
- AxiOS by Alex Badia
- AxiOS with Nightingale Compiler by Alex Badia
- YiOS by Yi Lin
- 2019
- TalOS by Eric Stenton
- ThanOS by Robert Liskin
- TEMPOS by Daniel Grossman
- NASOS by Will Wainscott
- 2018
- CyberCore by Kevin Mirsky
- 2017
- TienminatOS by Tien Liengtiraphan
- KaiOS by Kai Wong
- EXZOS by Zack Recolan
- ChaOS by Jack Grzechowiak
- 2016
- The Oppy by Brendon Boldt
- Krat-OS by Sami Ellougani
- Uranus OS (GLaDOS enabled) by Kyle Bradshaw
- HAXOS (GLaDOS enabled) by Liam Harwood (run in Chrome)
- 2015
- PhazonOS by Chris Barnett
- WesterOS by Zack Meath
- NathanOS by Nathan Fahrner
- Joe/S by Joe Archer
- ChellOS by Nikol Pettine
- 2014
- ctOS by Anthony Barranco
- MysteriOS Bloop by Rebecca Murphy
- 2013
- SvegOS by Justin Svegliato
- MS-BOS by Robert Nisco
- Charon by Daniel Rogers
- ChronOS in OmniChron by Chris Cordisco
- 2012
- ChronOS by Chris Cordisco
- J(OS)EPH by Joey Cabibbo
- 1978
- Apple DOS from the Computer History Museum
I reserve the copyright for all parts of my courses.
Commercial reproduction of any course material, including lecture notes
taken by students, without my EXPRESS WRITTEN consent, is prohibited.
Seriously.