CSCI 320
Operating Systems & Concurrency

Time

MWF 11:10am - 12:00pm

Location

MCREY 110

Instructor

Dr. Gabriel Ferrer
ferrer@hendrix.edu

Office Hours

Overview

A study of the three major concepts of a modern operating systems: virtualization, concurrency and persistence. Topics include the memory hierarchy (including caching and virtual memory), memory managment, processes, processor scheduling, address spaces, threads, the critical section problem, locks, sockets, file systems, and system performance analysis.

Learning Goals

Upon completing this course, our goal is for you to be able to:

Resources


NEW: Interactive Rust Book

Calendar

Part 1: The Command Line

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 Unix Process API Process API
nix crate
C strings
Rust Programming 2 Rust Programming 1
2/5 Wed Unix System Calls Direct Execution    
2/7 Fri Files and Directories Files and Directories    
           
2/10 Mon File Descriptors
Pipelines
Pipelines in Rust Unix Shell Rust Programming 2
2/12 Wed Data structures in Rust Using Structs to Structure Related Data
Enums and Pattern Matching
   
2/14 Fri Review of Unix Command Line
Review of Rust
     

Part 2: The Internet

Date Day Topic/Activity Reading Assigned Due
2/17 Mon Winter Break: No class      
2/19 Wed The Internet
Downloading a web page
Overview of TCP/IP
TcpStream
Write trait
write! macro
Webget Unix Shell
2/21 Fri Using Transport Layer Security Cryptography    
           
2/24 Mon Threads vs Processes Concurrency and Threads    
2/26 Wed Threads in Rust Fearless Concurrency Web server 1 Webget
2/28 Fri Locks Locks
Locked Data Structures
   
           
3/3 Mon Concurrency Problems Common Concurrency Problems    
3/5 Wed Performance analysis   Web server 2 Web server 1

Part 3: The Kernel

Date Day Topic/Activity Reading Assigned Due
3/7 Fri Bare metal programming A Freestanding Rust Binary
A Minimal Rust Kernel
   
           
3/10 Mon VGA Buffer VGA Buffer    
3/12 Wed Pluggable Interrupt OS Pluggable Interrupt OS Kernel Programming 1: Bare metal game Web server 2
3/14 Fri Ghost Hunter Ghost Hunter
Ghost Hunter Core
   
           
3/17 Mon Interrupts CPU Exceptions
Double Faults
Hardware interrupts
   
3/19 Wed Interrupts      
3/21 Fri Interrupts     Kernel Programming 1
           
3/24 Mon Spring Break: no class      
3/26 Wed Spring Break: no class      
3/28 Fri Spring Break: no class      
           
3/31 Mon File Systems I/O Devices
Hard Disk Drives
Kernel Programming 2: File System  
4/2 Wed File Systems File System Implementation  
4/4 Fri Paging Introduction to Paging (OS in Rust)
Introduction to Paging (OSTEP)
   
           
4/7 Mon Implementation of Paging Paging Implementation
Translation Lookaside Buffers
   
4/9 Wed Memory Management: Heap Heap Allocation    
4/11 Fri Allocator Designs Allocator Designs
Free Space Management
Kernel Programming 3: Simple Windowing Machine Kernel Programming 2
           
4/14 Mon Garbage Collection      
4/16 Wed Processor Scheduling CPU Scheduling  
4/18 Fri Scheduling with Priorities Multi-Level Feedback    
           
4/21 Mon Randomized Scheduling Lottery Scheduling    
4/23 Wed Final projects   Project proposal  
4/25 Fri Unix history, GNU Project, Linux kernel     Kernel Programming 3
           
4/28 Mon History of MS-DOS and Windows, evolution of GNU/Linux     Project Proposal
4/30 Wed Free Software vs. Open Source
Return of the Mac
Microkernels
     
5/2 Fri Wrap-up     Final Paper Draft
           
5/9 Fri 8:30-11:30am Final Project Presentations      

Assessment

Projects

A total of 10 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:

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.

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. For each programming project, the student should create a private GitHub repository to store the project. The student should add Dr. Ferrer as a contributor to the project. When the project is due, he will download the repository onto his own machine for grading.

Final Project

Towards the end of the semester, each student will undertake a final project. There are two primary options for the final project:

Expository Project

Programming Project

Each student will orally present their final project during the Final Exam period for the course, on Friday, May 9, 2025 from 8:30-11:30 am.

Final Project Grades

Each final project earns up to 15 credits:

Specifications Grading

Each project earns one credit for each level achieved. Submitting a project by the specified deadline earns one additional credit. There are 55 total credits available for the semester: 4 credits for each of 10 projects and 15 credits for the final project.

Grade Credit range
A 48-55
B 40-47
C 32-39
D 24-31
F 0-23

Commitments

It is my ultimate goal for this course, and my teaching, to develop your academic skills, advance your learning of computer science concepts, and support the liberal arts in general. To do so will require commitments from myself and from you toward meeting this goal.

Active Participation

I will be prepared and on time for class each day, ready to use class time to help you understand the course material. I will respectfully listen to, understand, and answer questions asked in class.

You are expected to attend class and actively participate in discussions every day, answering questions, asking questions, presenting material, etc. Your participation will be respectful of your classmates, both of their opinions and of their current point in their educational journey, as we each approach the material with different backgrounds and contexts.

Constructive Feedback

I will keep office hours and be available for outside appointments, and respond to emails within one business day (not including weekends). I will provide feedback on group presentations within one day. For exams, projects, and homeworks, I will provide graded feedback within two weeks.

You are encouraged to provide constructive comments for improving this course for furthering your learning throughout the semester. There will be an opportunity for anonymous course feedback at the end of the term, in which I hope you all participate. Through your feedback I can improve this course and others for future students.

Academic Integrity

I will abide by the above syllabus and grade your work fairly.

As stated in the Hendrix Academic Integrity Policy, all students have agreed to adhere to the following principles:

  • All students have an equal right to their opinions and to receive constructive criticism.
  • Students should positively engage the course material and encourage their classmates to do the same.
  • No students should gain an unfair advantage or violate their peers' commitment to honest work and genuine effort. It follows that any work that a student submits for class will be that student's own work. The amount of cooperation undertaken with other students, the consistency and accuracy of work, and the test-taking procedure should adhere to those guidelines that the instructor provides.
  • Members of the Hendrix community value and uphold academic integrity because we recognize that scholarly pursuits are aimed at increasing the shared body of knowledge and that the full disclosure of sources is the most effective way to ensure accountability to both ourselves and our colleagues.
More details of our departmental stance on integrity can be found in the Hendrix Computer Science Academic Integrity Policy

Learning Accomodation

I will make this classroom an open and inclusive environment, accommodating many different learning styles and perspectives.

Any student seeking accommodation in relation to a recognized disability should inform me at the beginning of the course. It is the policy of Hendrix College to accommodate students with disabilities, pursuant to federal and state law. Students should contact Julie Brown in the Office of Academic Success (505.2954; brownj@hendrix.edu) to begin the accommodation process.

Physical and Mental Health

I am willing to work with you individually when life goes off the rails.

Coursework and college in general can become stressful and overwhelming, and your wellness can be impacted when you least expect it. You should participate in self-care and preventative measures, and be willing to find support when you need it.

  • The Office of Counseling Services welcomes all students to see a counselor in a private and safe environment regardless of their reasons for making an appointment. Counseling services are available to all Hendrix students at no cost.
  • Student Health Services provides free healthcare to Hendrix students. Services are provided by an Advanced Practice Registered Nurse (APRN) in collaboration with a local physician.

The Offices of Counseling Services and Student Health Services are located in the white house behind the Mills Center for Social Sciences at 1541 Washington Avenue.