layout |
---|
course-single |
{{ site.description }}
Upon completing this course, our goal is for you to be able to:
- Describe how an operating system mediates interaction with:
- CPU and RAM by virtualizing those resources by means of the process abstraction.
- Persistent memory (hard disk, Flash memory) through the file system abstraction.
- The Internet through the TCP socket abstraction.
- Write useful programs that:
- Interact directly with the CPU, RAM, keyboard, and monitor on behalf of a user.
- Operate concurrently without errors.
- Empirically analyze the performance of operating system components.
- Address cybersecurity issues that arise in these contexts.
{% include resources.html content=site.resources %}
Date | Day | Topic/Activity | Reading | Assigned | Due |
---|---|---|---|---|---|
1/22 | Wed | Three Easy Pieces Command Line Files and Directories |
Introduction to Operating Systems | Survey Shell Commands, introduction |
|
1/24 | Fri | Processes Pipes I/O Redirection |
Processes | Shell Commands, complete | Shell Commands, introduction |
1/27 | Mon | Rust File I/O |
Getting Started Programming a Guessing Game Common Programming Concepts std::fs |
Rust Programming 1 | Shell Commands, complete |
1/29 | Wed | Ownership and Borrowing Strings Buffers |
Understanding Ownership Read trait String in Rust BufReader BufRead trait |
||
1/31 | Fri | Rust Collection Types | Common Collections | ||
2/3 | Mon | The Internet Downloading a web page |
Overview of TCP/IP TcpStream Write trait write! macro |
Rust Programming 2 | Rust Programming 1 |
2/5 | Wed | Using Transport Layer Security | Cryptography | ||
2/7 | Fri | Unix Process API | Process API nix crate C strings |
||
2/10 | Mon | Unix System Calls | Direct Execution | ||
2/12 | Wed | Files and Directories | Files and Directories | Unix Shell | Rust Programming 2 |
2/14 | Fri | File Descriptors Pipelines |
Pipelines in Rust | ||
2/17 | Mon | Winter Break: No class | |||
2/19 | Wed | Snow and Ice: No class | |||
2/21 | Fri | Data structures in Rust | Using Structs to Structure Related Data Enums and Pattern Matching |
||
2/24 | Mon | In-Class Essay 1: The Unix Shell | |||
2/26 | Wed | Threads vs Processes | Concurrency and Threads | Web Server | Unix Shell |
2/28 | Fri | Threads in Rust Locks |
Fearless Concurrency Locks Locked Data Structures |
||
3/3 | Mon | Concurrency Problems | Common Concurrency Problems | ||
3/5 | Wed | Iterators in Rust |
Date | Day | Topic/Activity | Reading | Assigned | Due |
---|---|---|---|---|---|
3/7 | Fri | Bare metal programming | A Freestanding Rust Binary A Minimal Rust Kernel VGA Buffer Pluggable Interrupt OS |
Bare metal game | Web server |
3/10 | Mon | Ghost Hunter | Ghost Hunter Ghost Hunter Core |
||
3/12 | Wed | Interrupts | CPU Exceptions Double Faults Hardware interrupts |
||
3/14 | Fri | Bare Metal Demos | SWIM Part 1: Interface | Bare Metal Game | |
3/17 | Mon | User-space vs. Kernel-space programming: Retrospective | |||
3/19 | Wed | In-Class Essay 2: Processes and Threads | |||
3/21 | Fri | The Story So Far | SWIM Part 1: Interface | ||
3/24 | Mon | Spring Break: no class | |||
3/26 | Wed | Spring Break: no class | |||
3/28 | Fri | Spring Break: no class | |||
3/31 | Mon | Garbage Collection | SWIM Part 2: Garbage Collection | ||
4/2 | Wed | Memory Management: Heap | Heap Allocation | ||
4/4 | Fri | Allocator Designs | Allocator Designs Free Space Management |
||
4/7 | Mon | File Systems | I/O Devices Hard Disk Drives |
SWIM Part 3: File System | SWIM Part 2: Garbage Collection |
4/9 | Wed | File Systems | File System Implementation | ||
4/11 | Fri | Paging | Introduction to Paging (OS in Rust) Introduction to Paging (OSTEP) |
||
4/14 | Mon | Implementation of Paging | Paging Implementation Translation Lookaside Buffers |
||
4/16 | Wed | Processor Scheduling | CPU Scheduling | SWIM Part 4: Processes | SWIM Part 3: File System |
4/18 | Fri | Scheduling with Priorities | Multi-Level Feedback | ||
4/21 | Mon | Randomized Scheduling | Lottery Scheduling | ||
4/23 | Wed | Unix history, GNU Project, Linux kernel | |||
4/25 | Fri | History of MS-DOS and Windows, evolution of GNU/Linux | Free Project | SWIM Part 4 | |
4/28 | Mon | In-Class Essay 3: The Kernel | |||
4/30 | Wed | Free Software vs. Open Source Return of the Mac Microkernels |
|||
5/2 | Fri | Three Easy Pieces | |||
5/9 | Fri 8:30-11:30am | No final exam | Free project All revised work |
# Assessment
A total of 10 formal projects will be assigned throughout the semester; approximately one project per week. Each project will have three levels to which it can be completed, with each level building upon the previous level. In general:
- A Level 1 project contains a basic implementation of the core ideas explored in the project.
- A Level 2 project is a more complete implementation of those ideas.
- A Level 3 project goes beyond this to undertake a deeper exploration of the assignment ideas.
Each project will be evaluated via specifications (a set of criteria) for each level. Projects meeting all the criteria for a given level will receive credit for that level; projects that do not meet all the criteria will not receive credit for that level.
Each project submitted by the assigned deadline of at least Level 1 quality receives one additional credit as an on-time bonus.
Once a project is graded, if a student wishes to revise it to achieve a higher level, the student should first meet with the professor to discuss the planned revisions. The student may thereafter resubmit the revised project when ready.
Each student should have a GitHub account. Each student should create one private GitHub repository that contains all of their code for Part 1 of the course and additional GitHub repositories as specified for the Part 2 projects. The student should add Dr. Ferrer as a contributor to each repository. For each project, there will be a Teams assignment in which you will copy and paste the URL for the project's GitHub repository. When each project is due, the instructor will download the repository onto his own machine for grading.
Students are welcome to undertake projects individually or with one other student in the course. If two students work together, they should create a single submission in a single GitHub repository.
Discussion of the projects is encouraged. However, all code and solutions must be written up individually or in a collaborating pair. Copying a submission from another student or team, in whole or in part, will be considered an academic integrity violation.
Students may also complete a free project. This is completely optional, but it is an opportunity to earn project credits pursuing a topic of personal interest. The free project consists of a program written in the Rust programming language on any topic of interest to the student. Any student wishing to pursue a free project should submit a project proposal by Monday, April 21. The instructor will advise the student as to what would constitute Level 1, Level 2, and Level 3 performance on the proposed project.
All free projects are due by the end of the final exam period for the course. There is no on-time bonus for a free project; it must be submitted by the deadline to receive any credit.
A total of three in-class essays will be assigned over the course of the semester. Each essay topic is posted on the course web page. In preparing for the in-class essay, each student may make use of whatever resources they would like - readings, assignments, classmates, anything on the Internet, or any other resource.
The in-class essay itself is closed-book, closed-note, and closed-device. Paper will be provided for writing the essay, which must be submitted at the end of the class period.
The essays will be commented upon by the instructor and returned. Each student should then revise their essay, taking into account the instructor comments. The revised essay should be typed and submitted electronically. The original handwritten essay should also be resubmitted. The revised essay will be due one week after the original essays are returned.
Students are welcome to make use of additional resources when revising their essays; proper citation should be included for each resource. Plagiarism, including submitting an essay rewritten by a generative AI, is strictly prohibited. Each revised essay will then be assessed as Level 1 or Level 2, depending on the quality of the essay. Quality will be assessed according to the following criteria:
- Writing quality, including proper spelling, usage, and grammar.
- Demonstrated depth of understanding the essay topic.
- Appropriate use of examples from course projects.
One additional credit will be awarded for on-time submissions of the revised essays.
Each project and essay earns one credit for each level achieved. Submitting an assignment by the specified deadline earns one additional credit. There are 52 total credits available for the semester: 4 credits for each of 10 formal projects, 3 credits for the free project, and 3 credits for each of the three essays.
Grade | Minimum Project Credits | Minimum Essay Credits | Minimum Total Credits |
---|---|---|---|
A | Level 2 on 10 projects | Level 2 on 3 essays | 47 |
B | 30 | Level 2 on 2 essays Level 1 on 1 essay |
38 |
C | 20 | Level 1 on 3 essays | 29 |
D | 12 | Level 1 on 2 essays | 18 |
- Note: All late submissions/revisions must be received before 11:30 am on Friday, May 9, the end of the final exam period for the course.