Introduction to Operating Systems - CSCI 350, Summer 2025
textbooks-4-small.jpg textbooks-2-small.jpg

[ This is a BACKUP server. Do NOT use unless the primary server is DOWN. ]

Click here to see a PREVIEW of important rules that was posted before the summer session started.

This is an undergraduate course on computer operating systems. In addition to exploring concepts such as concurrency, deadlock control, synchronization, scheduling, memory management, protection and access control, inter-process communication, and structured design, students will develop elements of a fairly complete operating system during the course of the summer session.

 
 
Section 29958R
Instructor
Bill Cheng (click to see office hours)
Email: <bill.cheng@usc.edu>
Time
TuTh 12:30pm - 2:50pm
Location
KAP 146
TAs
Bryce Blinn <blinn@usc.edu>, Office Hours: (Wed 2:00pm - 4:00pm) on Zoom
Asma Enayet <enayet@usc.edu>, Office Hours: (Mon 2:00pm - 4:00pm) on Zoom
Katy Felkner <felkner@usc.edu>, Office Hours: (Mon 12:00pm - 2:00pm) on Zoom
Yutian Yan <yutianya@usc.edu>, Office Hours: (Wed 4:00pm - 6:00pm) on Zoom
Yuan Yao <yyao3787@usc.edu>, Office Hours: (Fri 1:00pm - 3:00pm) on Zoom
 
Office hours will start in Week 2. To see office hours Zoom information for all TAs, click here (password protected)
Graders
(TBD)
(If needed, the grader will hold office hours the week after the announcement of each assignment's grades.)
Midterm Exam
(NEW) [12:30:00pm-1:10:00pm), Thu, 2/26/2025 (firm)
Final Exam
(NEW) [12:30:00pm-1:10:00pm), Tue, 8/5/2025 (firm)
Class Resources
 
textbooks, topics covered, grading policies, additional resources, etc.
information about lectures (and lectures slides in PDF format).
information about D2L/Brightspace lectures videos.
programming assignments (please also see important information about the class projects below.)
Piazza Forum for discussing course materials and assignments. You are required to be a member of this group. (This group is by invitation only.) Please do not send request to join this group until after the first lecture.
(in reversed chronological order)
  • 8/1/2025: Below is the link for starting the final exams. Currently, the link is inactive/invalid. It will become valid and active approximately 3 minutes before the exam start time and you can start working on the exam as soon as you have downloaded your exam.

    Plesae make sure you have done the following:

    • watch the recorded Lecture 8 (on 6/17/2025) video (final exam logistics were presented)
    • use midterm exam as rehearsal for the final exam to get familiar with the exam procedure (for the actual final exam, you cannot say that you submit late because you are not familiar with some of the exam procedure)
    • submit your signed final exam academic integrity honor code pledge (you will not be able to download your final exam if I don't have a signed pledge from you and your final exam score will be zero)

    No matter how late you start your exam, your exam must end at the same time as everyone else who is taking the same exam. Please remember that due to my fairness policy mentioned in Lecture 1, I have to stick to all the posted rules and I cannot make an exception for any student.


  • 7/31/2025:  The final exam will be a 40-minute long take-home exam (open book, open notes, open Internet). and it will be conducted in the same manner as the midterm exam (please see Lecture 8 for the exam instructions and replace the date and time with what's appropriate for your final exam). No matter how late you start your exam, your exam must end at the same time as everyone else who is taking the same exam.

    The final exam will cover everything from slide 67 of Lecture 8 to the last slide of Lecture 18. (A slide number refers to the number in the lower-right corner of a slide.)

    Since the 2nd part of the course depends on stuff covered by the midterm, I cannot say that I will not ask anything covered by the midterm and you do need to know the material covered by the midterm. Therefore, it would be more appropriate to say that the final exam will focus on the material not covered by the midterm.

    Regarding what types of questions will be on the exam, please see the Exams section of the course description web page. Regarding regrade policy, please see the Regrade section of the course description web page.

    Here is a quick summary of the final exam topics (not all topics covered may be listed):

    • Ch 5 - Synchronizing Access to Shared Objects
      • (5.7) Implementing Synchronization Objects
      • (5.8) Semaphores Considered Harmful
    • Ch 6 - Multi-Object Synchronization
      • (6.1) Multiprocessor Lock Performance
      • (6.2) Lock Design Patterns
      • (6.3) Lock Contention
      • (6.4) Multi-Object Atomicity
      • (6.5) Deadlock
      • (6.6) Non-Blocking Synchronization
    • Ch 7 - Scheduling
      • (7.1) Uniprocessor Scheduling
      • (7.2) Multiprocessor Scheduling
      • (7.3) Energey-Aware Scheduling
      • (7.4) Real-Time Scheduling
      • (7.5) Queueing Theory
      • (7.6) Overload Management
      • (7.7) Case Study: Servers in a Data Center
    • Ch 8 - Address Translation
      • (8.1) Address Translation Concept
      • (8.2) Towards Flexible Address Translation
      • (8.3) Towards Efficient Address Translation
      • (8.4) Software Protection
    • Ch 9 - Caching and Virtual Memory
      • (9.1) Cache Concept
      • (9.2) Memory Hierarchy
      • (9.3) When Caches Work and When They Do Not
      • (9.4) Memory Cache Lookup
      • (9.5) Replacement Policies
      • (9.6) Case Study: Memory-Mapped Files
      • (9.7) Case Study: Virtual Memory
    • Ch 11 - File Systems: Introduction and Overview
      • (11.1) The File System Abstraction
      • (11.2) API
      • (11.3) Software Layers
    • Ch 12 - Storage Devices
      • (12.1) Magnetic Disk
      • (12.2) Flash Storage
    • Ch 13 - Files and Directories
      • (13.1) Implementation Overview
      • (13.2) Directories: Naming Data
      • (13.3) Files: Finding Data
      • (13.4) Putting It All Together: File and Directory Access
    • Ch 14 - Reliable Storage
      • (14.1) Transactions: Atomic Update
      • (14.2) Error Detection and Correction
    • PA2, PA3, PA4, PA5
      • Ch 1, 2, 4, and 5 of xv6 book
      • spec
      • FAQ
      • my posts to class Piazza

  • 7/30/2025: Please download, fill out, sign, and submit the Final Exam Academic Integrity Honor Code Pledge as soon as possible. Please understand that if I don't get a signed pledge from you, I will not send a final exam to you because I need you to promise me that you won't cheat before I can send you an exam. Please note that submitting a signed pledge doesn't mean that you cannot decide to opt out of the exam later. It just means that if you decides to take the final, you are promising that you will not cheat.

  • 7/27/2025 Katy Felkner's office hours tomorrow has been moved up a little earlier to 10:00am-12:00pm.

  • 7/21/2025 Katy Felkner's office hours today has been moved up a little earlier to 10:30am-12:30pm.

  • 7/14/2025 Asma Enayet's office hours today has been moved to tomorrow (Tue, 7/15) 10am-12pm.

  • 6/25/2025 Katy Felkner's office hours on 6/30/2025 (next week) has been moved to this 12pm-2pm this Friday (6/27/2025).

  • 6/23/2025 Asma Enayet office hours this week has been moved to Tue 10am-12pm.

  • 6/21/2025: Below is the link for starting the midterm exams. Currently, the link is inactive/invalid. It will become valid and active approximately 3 minutes before the exam start time and you can start working on the exam as soon as you have downloaded your exam.

    Plesae make sure you have done the following:

    • watch the recorded Lecture 8 (on 6/17/2025) video (midterm exam logistics were presented)
    • participate in the midterm exam rehearsal (for the real midterm exam, you cannot say that you submit late because you are not familiar with some of the exam procedure)
    • submit your signed midterm exam academic integrity honor code pledge (you will not be able to download your midterm exam if I don't have a signed pledge from you and your final exam will account for 70% of your overall grade)

    No matter how late you start your exam, your exam must end at the same time as everyone else who is taking the same exam. Please remember that due to my fairness policy mentioned in Lecture 1, I have to stick to all the posted rules and I cannot make an exception for any student.


  • 6/18/2025 Midterm rehearsal is available now. The starting point of your midterm rehearsal is at:

    The midterm exam logistics was presented during the first part of Lecture 8 and you are required to be familiar with the midterm exam procedure. If you don't know what to do here, please watch the first part of the recorded Lecture 8 video.

  • 6/17/2025:  The midterm exam will be a 40-minute long take-home exam (open book, open notes, open Internet). The midterm exam will cover everything from the beginning of the semester to slide 66 of Lecture 8. Regarding what types of questions will be on the midterm, please see the Exams section of the course description web page.

    Here is a quick summary of the midterm exam topics (not all topics covered may be listed):

    • Ch 1 - Introduction
      • (1.1) What Is An Operating System?
      • (1.2) Operating System Evaluation
      • (1.3) Operating System: Past, Present, and Future
    • Ch 2 - The Kernel Abstraction
      • (2.1) The Process Abstraction
      • (2.2) Dual-Mode Operation
      • (2.3) Types of Mode Transfer
      • (2.4) Implementing Safe Mode Transfer
      • (2.5) Putting It All Together: x86 Mode Transfer
      • (2.6) Implementing Secure System Calls
      • (2.7) Starting A New Process
      • (2.8) Implementing Upcalls
      • (2.9) Case Study: Booting An OS Kernel
      • (2.10) Case Study: Virtual Machines
    • Ch 3 - The Programming Interface
      • (3.1) Process Management
      • (3.2) Input/Output
      • (3.3) Case Study: Implementing a Shell
      • (3.4) Case Study: Interprocess Communication
      • (3.5) Operating System Structure
    • Ch 4 - Concurrency and Threads
      • (4.1) Thread Use Cases
      • (4.2) Thread Abstraction
      • (4.3) Simple Thread API
      • (4.4) Thread Data Structures and Life Cycle
      • (4.5) Thread Life Cycle
      • (4.6) Implementing Kernel Threads
      • (4.7) Combining Kernel Threads and Single-Threaded User Processes
      • (4.8) Implementing Multi-Threaded Processes
      • (4.9) Alternative Abstractions
    • Ch 5 - Synchronizing Access to Shared Objects
      • (5.1) Challenges
      • (5.2) Structuring Shared Objects
      • (5.3) Locks: Mutual Exclusion
      • (5.4) Condition Variables: Waiting for a Change
      • (5.5) Designing and Implementing Shared Objects
      • (5.6) Three Case Studies
    • PA1
      • Ch 0, 1, and 3 of xv6 book
      • spec
      • FAQ
      • my posts to class Piazza

  • 6/15/2025: Please download, fill out, sign, and submit the Midterm Exam Academic Integrity Honor Code Pledge as soon as possible. Please understand that if I don't get a signed pledge from you, I will not send a midterm exam to you because I need you to promise me that you won't cheat before I can send you an exam. Please note that submitting a signed pledge doesn't mean that you cannot decide to opt out of the exam later. It just means that if you decides to take the midterm, you are promising that you will not cheat.

  • 5/29/2025:
    • Tonight's office hour has been moved up by one hour. It will go from 8pm to 9pm. Sorry about the short notice and the inconvenience this may have caused.
  • 5/16/2025:
    • Watch this area for important announcements.

    • To get user ID and password for accessing protected area of this web site, please visit the request access page after summer session starts and submit the requested information. (You do not have to be registered for the course to get the password. You just need to have an USC email address.)

    • Please do not send request to join the class Piazza Forum until after Lecture 1.
The prerequisite for this course are CSCI 201 and one of CSCI 356 or EE 354. Please see the CS Course Catalog for information about CSCI 201 and CSCI 356. Please see the EE Course Catalog for information about EE 352.

According to the CS Course Catalog, the prerequisite for CSCI 201 is CSCI 104L, and the prerequisite for CSCI 104L is CSCI 103L. Therefore, you will be expected to have had at least two semesters of experience programming in C++ from these courses.

You will be required to write code in the C Programming Language for all the programming assignments. Since C is a proper subset of C++, knowing C++ well would give you enough background. However, some of the things that available in C++, such as strings and streams, are not be available in C. So, you need to know how to do things such as manipulating C-strings (i.e., null-terminated array of characters) using functions such as strchr, strrchr, strlen, strcmp, strncpy, etc. You also need to know how to perform console and file I/O in C using functions such as read/write, printf/snprintf, fread/fwrite, fgets/getline, etc. No other programming language will be accepted. We will not teach C in this class (since C++ is a prerequisite to CSCI 201L). You are expected to pick up C on your own if you are not familiar with it.

There are plenty of free C tutorials on the web and they are more or less equivalent. If you are not familiar with C, you might want to check out a free online tutorial on C from W3 Schools first. (I haven't checked out the contents there. Please feel free to send me feedback.) One thing I would ask you to avoid is to practice C on a non-Linux system! You should install a standard 32-bit Ubuntu 16.04 system on your laptop or desktop and practice C on it.

You should also get familiar with the Unix/Linux development environment (vi/pico/emacs, cc/gcc, make, etc.) You are expected to know how to use Unix/Linux. If you are not familiar with Unix/Linux, please read Unix for the Beginning Mage, a tutorial written by Joe Topjian. Unfortunately, looks like this book has just disappeared from the web. You can also visit UNIX Tutorial for Beginners or Learn tcsh in Y Minutes. If you already know how to use Unix/Linux before and just need a refresher, please review my summary of some commonly used Unix commands and my tcsh scripting tutorial.

All programming assignments must run on a standard 32-bit Ubuntu 16.04 system because that's the only system the grader is allowed to grade your assignments on. Therefore, you should install a standard 32-bit Ubuntu 16.04 on your laptop or desktop as soon as possible and start using it right away. If you do not have a personal laptop or desktop that runs Windows or Mac OS X, please contact the instructor as soon as possible.

If a student registered late for this class or could not be present at the beginning of the summer session, the student is still required to turn all projects and homeworks on time or the student will receive a score of 0 for these assignments. No exception!