Introduction to Operating Systems - CSCI 350, Summer 2025

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

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.

Please note that this class does not use USC Brightspace directly. Everything about this class can be found on the CSCI 350, Summer 2025 class website (if you see this page again, it means that the class website is under construction).

PREVIEW
My actual CS 350 class web site for Summer 2025 is not ready yet. Since many students are registering now, I felt that I should post some important information about CS 350 (especially about dates and some basic rules) so students can know what to expect and register accordingly. I tend to be a stickler to rules, so there will be no exceptions. The rules are not just for students. I'm bound by my own written rules and I have to stick to them.

Some students don't understand why I am so strict with rules. Some think that it's just a power trip for me. It's actually just the opposite! The reason for sticking to rules is that I have the responsibility of treating all students fairly! If I apply one rule to one student and don't apply the same rule to another student, I think that's totally unfair. I think fairness is very important. Without fairness, grades have no meaning. The only way I know how to be fair is to have rules that are written down clearly and stick to all the written rules. When you ask me to bend a written rule for you, please understand that you are asking me to be unfair to all other students; and therefore, I will not bend the rule for you. You see, this actually takes power away from me because I am bound by my own rules and you can demand that I stick to my own rules!

Late Registration

  • Even though you are on the wait list and there is no guarantee that you will get in, if you intend to take this class, you are expected to keep up with every lecture and submit all assignments on time (i.e., same deadlines as students who are already registered). So, even if you get registered after PA1 submission deadline, you will still be expected to turn in PA1 by the end of Tuesday of the 3rd week of the summer session! For all the assignment submission dates, please see the bottom of this web page.

Section Names

  • Even though it looks like there are two sections of CS 350 in the schedule of classes, there is really no Quiz section for this class. Sometimes, I would refer to this section as the Standard Section of CS 350.

Lectures

  • All lectures will be live and in-person and will be held in the lecture classroom. I will try my best to record all the live lectures on Zoom and make the videos available. In the unlikly case that there is no Internet connectivity in the lecture classroom, it would not be possible to have the live lecture recorded.

Time Conflicts

  • If you have another class that has a time conflict with our lecture time, I will not approve such a time conflict.

  • If you have another class that has a partial and small time conflict with our discussion section, I would consider approving such a time conflict. But you should contact me via email first and give me all the details before filing a petition.

Videos

  • All recorded videos will be made available on USC Brightspace (although you may not be able to download any of these videos). They will also be accessible from the class website.

Exams

  • The midterm and the final exams will be given during class time. For the midterm and final exam dates, please see the bottom of this web page.

Computer Equiptment

  • 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 programming assignments. You are welcome to do your development on your favorite platform, but it's your responsibility to make sure that your code would run on the "standard" system. You only get credit for passing tests in the "standard" system. We cannot give you partial credit for "effort" if your code cannot run on the "standard" system.

Quizzes

  • Since this is the first time I teach CS 350, there will be no quizzes this summer.

Audit

  • If you are officially auditing this course (i.e., register for this course under the no-grade option), you will get the same course materials as everyone else.

  • If you want to audit this course unofficially, I will have to say no to you.

Workload

  • Since this is the first time I teach CS 350 and I'm using the programming assignments from Professor Ryutov, I really don't know how time-consuming the programming assignemnts are at this time.

Piazza Forum

  • We will use a Piazza Forum for class related communications and discussion. The class Piazza Forum is an important tool. Everyone must be a member of the class Piazza Forum. Your USC email address will be used to add you to this forum.

Preparation

  • The prerequisites for this class are (1) CSCI 201L, and (2) CSCI 356 or EE 354. We will assume that you are somewhat familiar with the basics of multithreadeding and synchronization (using locks) since you should have taken CSCI 201L or an equivalent class.

  • 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.

    If you are not good at dealing with pointers, please take a look at my review on pointers and make sure you understand everything there (you can send me email if you have questions). You need to understand what a memory address is and what it means to store the address of a data structure into a pointer (e.g., in forming a linked list). You then need to be able to follow pointers to traverse a linked list. Finally, you need to learn to use gdb to examine memory locations and debug your program.

  • You must know how to use Unix/Linux. If you are not familiar with Unix/Linux, you must learn it on your own. We will not teach you how to use Unix/Linux in this class. If you are not familiar with Unix/Linux, I strongly urge you to read Unix for the Beginning Mage (this website is not very stable) before the course starts. You can also visit UNIX Tutorial for Beginners or Learn tcsh in Y Minutes. You should also get familiar with the Unix/Linux development environment (vi/pico/emacs, cc/gcc, make, etc.)

    You should install a standard 32-bit Ubuntu 16.04 system on your laptop or desktop as soon as possible to get good at using it. You should learn how to use the Terminal program to compile, run, and debug programs. It's probably a good idea to also learn how to use a text editor (such as vi, emacs, or pico) to create and edit C program source code and not rely on using IDEs.

    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.

Expectations

  • You are expected to ask me questions if you have them! I am here to help you with this class. I cannot help you if you don't ask me questions! Send me private emails or post your questions to the class Piazza Forum (although my 24-hours reply policy does not apply to posting in the class Piazza Forum). If I don't get questions from you, I would have to assume that you understand everything.

Important Dates

Please note that the PA due dates are tentative.
                May 2025
          Su Mo Tu | We Th Fr Sa
    Wk  1 18 19 20 | 21 22 23 24  first day of classes for summer session: 5/21, our first lecture 5/22
    Wk  2 25 26 27 | 28 29 30 31  memorial day: 5/26

               June 2025
          Su Mo Tu | We Th Fr Sa
    Wk  3  1  2  3 |  4  5  6  7  PA1 due: 6/3
    Wk  4  8  9 10 | 11 12 13 14
    Wk  5 15 16 17 | 18 19 20 21  PA2 due: 6/17, juneteenth: 6/19 (non instructional day)
    Wk  6 22 23 24 | 25 26 27 28  midterm: 6/26
    Wk  7 29 30

               July 2025
          Su Mo Tu | We Th Fr Sa
    Wk  7        1 |  2  3  4  5  PA3 due: 7/1, independence day: 7/3-7/4 (university holiday)
    Wk  8  6  7  8 |  9 10 11 12
    Wk  9 13 14 15 | 16 17 18 19  PA4 due: 7/15
    Wk 10 20 21 22 | 23 24 25 26
    Wk 11 27 28 29 | 30 31        PA5 due: 7/29

              August 2025
          Su Mo Tu | We Th Fr Sa
    Wk 11          |        1  2
    Wk 12  3  4  5 |  6  7  8  9  final exam 8/5
If you have questions, please email me at <bill.cheng@usc.edu>.