CS 5965 - Advanced OS Implementation
cs5965 teaches advanced topics in operating systems through a hands-on engineering approach. As a student in this class you will build a small but functional operating system kernel. In contrast to cs6465 this is an implementation-heavy class (i.e., mostly working on the code).
We will use Rust (well, this is the language the industry will be using for building
new systems code) to boot into
main(), implement core pieces of the operating system: memory allocator, ELF
loader, page table and address spaces, processes and finally context switching
and scheduling. We will spend some time on learning the tools that are needed
for quick prototyping and debugging of a new kernel.
This class is for students who plan to stay in the systems field, not just building new OS kernels and hypervisors, but working on parts of modern cloud and datacenter infrastructure, be an expert in low-level systems security, be able to work on cycle-level code optimizations for warehouse scale AI and big data systems, etc. I.e., you will have a rare skill to work with the teams developing macOS and iOS kernels, XNU, Windows and Linux kernels, novel hypervisors like Amazon Nitro and Firecracker, etc. This is a rare and potentially well-compensated skill.
This class is different from cs6465 taught in 2024. In the future the idea is to have two versions of this class. This class (cs5965) focused on development and implementation and another cs6465 focused on research topics in the systems field.
Grading policy
Homework: 90%, in-class activities: 10%
- Instructor: Anton Burtsev (anton.burtsev@utah.edu)
- Time and place: Mon/Wed, 3:00pm - 4:20pm, JTB 120
- Canvas: link
- Piazza (questions): link
- Gradescope (homework assignments and quizzes): TBD
- Office hours: TBD Anton’s office, MEB 3424
Schedule
Aug 18
Aug 20
- Lecture 2 - Outline and Boot into Rust (video)
- Reading: Writing an OS in Rust. Philipp Oppermann’s blog (Edition 3). Minimal Kernel
- Source: Hello OS (our basic build system)
Aug 25
- Lecture 2 - Outline and Boot into Rust (video)
- Reading: Writing an OS in Rust. Philipp Oppermann’s blog (Edition 2). VGA Text Mode
Aug 27
- Lecture 3 - Boot-Time Page Table (video)
- Reading: Intel Developer Manual. Volume 3. Chapter 5. Paging
- Source: RedLeaf (boot.asm – setting boot time page table)
- Homework 1: Boot into Rust Due Friday Sept 5, 11:59pm.
Sept 1
- No class (Labor Day)
Sept 3
- Lecture 4 - Interrupts and exceptions (video)
- Reading: Intel Developer Manual. Volume 3. Chapter 7. Interrupt and Exception Handling
Sept 8
- Lecture 4 - Interrupts and exceptions (part 2) (video)
- Reading: Intel Developer Manual. Volume 3. Chapter 7. Interrupt and Exception Handling
Sept 10
- Lecture 4 - Interrupts and exceptions (part 3) (video)
- Reading: Intel Developer Manual. Volume 3. Chapter 7. Interrupt and Exception Handling
Sept 15
- Lecture 4 - Interrupts and exceptions (part 4) (video)
- Reading: Intel Developer Manual. Volume 3. Chapter 7. Interrupt and Exception Handling Sept 17
- No class (Anton at NSF)
Sept 22
- Lecture 4 - Interrupts and exceptions (part 5) (video)
- Reading: Intel Developer Manual. Volume 3. Chapter 7. Interrupt and Exception Handling
Sept 24
Sept 29
- Lecture 5 - Memory management (part 2) (video)
- Homework 2: Interrupts and exceptions Due Fri Oct 17, 11:59pm.
Oct 1
Oct 6
- No class (fall break)
Oct 8
- No class (fall break)
Oct 13
- No class (Anton at SOSP). Work on HW2
Oct 15
- No class (Anton at SOSP). Work on HW2
Oct 20
Oct 22
- Lecture 07 - Memory allocation and address spaces (video)
- Homework 3: Memory allocation Due Mon, Nov 3, 11:59pm.