Syllabus & Course Description - CSCI 350, Summer 2025

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

Links to sections on this page:
  Focus
  Grading
  Auditing
  Objectives
  Email
  Quizzes
  Projects
  Fairness
  Exams
 
This is a senior-level undergraduate class in computer operating systems. We will cover the principles underlying the design of various subsystems of modern operating systems, ranging from process management and virtual memory to file systems and access control. Instruction in these principles will be augmented a series of projects in which students develop these subsystems within the context of an instructional operating system.
Below are the specific, measurable skills a student will demonstrate by the end of the course. These objectives will be both taught and assessed in the course and are aligned with the assignments, assessments and learning materials.
  1. Knowledge of what system calls are and how an OS kernel implements them to support user space programs (in addition to learning from lecture and textbook, also learn from adding various system calls in OS kernel programming assignments)

  2. Knowledge of how an OS kernel can execute a user space program (in addition to learning from lecture and textbook, also learn from adding and invoking user space programs in OS kernel programming assignments)

  3. Knowledge about what threads are and how they can be implemented (in addition to learning from lecture and textbook, also learn from adding multithreading functionality in an OS kernel programming assignment)

  4. Knowledge about what processes are and how they can be implemented (in addition to learning from lecture and textbook, also learn from adding functionalities to processes in OS kernel programming assignments)

  5. Knowledge of how threads can be synchronized so that they can work collaboratively (in addition to learning from lecture and textbook, also learn from adding locks in an OS kernel programming assignment)

  6. Knowledge of how memory is managed by an OS kernel and user space liberaries (in addition to learning from lecture and textbook, also learn from adding memory management features in an OS kernel programming assignment)

  7. Knowledge of what interrupts are and how devices are managed by an OS kernel and how user space can access them by making system calls

  8. Knowledge of how virtual machines can be implemented

  9. Knowledge of the characteristics of varioius OS schedulers (in addition to learning from lecture and textbook, also learn from adding a priority time-sliced scheduler in an OS kernel programming assignment)

  10. Knowledge of how an OS kernel creates and maintains an address space and implements the virtual memory abstraction for user space programs

  11. Knowledge about what files and file systems are and how they can be implemented on top of storage devices such as disks and flash drives

  12. Knowledge of how an OS kernel can implement a file system that's resilient to system crashes
Required:

Recommended resources:

  • B. Kernighan and D. Ritchie, C Programming Language, 2nd Edition, Prentice Hall, 1988. (Since the C programming language is a proper subset of the C++ programming language, if you know C++, you pretty much know C already. However, things 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 null-terminated array of characters and performing I/O in C.)

  • Scott Chacon, Pro Git (a free online book). You may want to use git when you do your programming assignments.

  • Joe Topjian, Unix for the Beginning Mage. (If you are not familiar with Unix, please read this tutorial as soon as possible.)

  • David Rusling, The Linux Kernel. (This is for your reading pleasure. We will not cover this book in our class.)
The following schedule and topics are very tentative and are subject to change without notice. Please note that week 1 is a half-week and it's Thursday only and week 12 is also a half-week and it's Tuesday only.

Textbook Chapters and Sections

  • Part I: Kernels and Processes
    • 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
  • Part II: Concurrency
    • 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
      • (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
  • Part III: Memory Management
    • 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 10: Advanced Memory Management
      • (10.1) Zero-Copy I/O
      • (10.2) Virtual Machines
      • (10.3) Fault Tolerance
      • (10.4) Security
      • (10.5) User-Level Memory Management
  • Part IV: Persistent Storage
At the end of very book chapters, there are exercises. Students should treat them as additional resources. These exercises will not be collected, graded, or dicsussed, although students are encouraged to work on them if there is time.
NOTE: Since this is the first time I'm teaching this course, there will be no quizzes.
You will be expected to complete a sequence of kernel programming assignments which develop various components of a real operating system: process management, file systems, and virtual memory.

All projects will require a fairly strong background in C programming, which you are expected to pick up on your own. There will be 5 kernel programming assignments and they can be quite time-consuming.

All programming assignments can only be graded on a standard 32-bit Ubuntu 16.04 system. You will receive no credit if your program cannot run on this platform.

For more information, please see the programming assignments web page.

A midterm and a final examination will be given. The date and time of the midterm examination is posted in the General Information section of the class web page. The date and time of the final examination is firm and it is also posted in the General Information section of the class web page. Any scheduling conflicts regarding the midterm exam date and time (i.e., time conflict with another class) must be resolved with the instructor at least two weeks before the exam date.

Exam Locations

Unless otherwise specified, all exams will take place in the lecture class room of your respective section. If an exam is to take place in a room different from the lecture class room, information will be explicited provided in the corresponding item in the General Information section of the class web page.

Exam Questions

There are three types of exam questions that I usually ask. The first type is a calculation-type question. Pretty much anything that can be calculated/computed by running an algorithm can be asked in an exam. For example, I can ask you to compute a schedule using a particular scheduling algorithm. I can also ask you to calculate average waiting time for a particular scheduling policy. (Calculators will not be permitted during in-person exams, but you can leave your answers as fractions for non-integer answers.) I may also ask you about what a data structure (e.g., tree, hash table, etc.) would look like after certain operations have been performed on it. Usually, for this type of questions, you must get the answer right and there is not much room for partial credits.

The second type is multiple-choice questions. Unless explicitly stated, each multiple-choice question has only one correct answer and you need to select the correct answer (or if you don't think any of the answers are correct, you should select the best answer). If a multiple-choice question explicitly asked you to select two answers, it means that the question has two correct answers and you need to select two correct answers (or if you don't think that there are two correct answers, you should select the best two answers). Please note that an incorrect statement can never be a correct answer (unless the question asks you to select statements that are incorrect). Please check all the correct ones and don't check any of the incorrect ones.

The total number of points for a question cannot go negative. Therefore, if you are going to leave a question unanswered, you might as well take a guess. For a multiple choice question, your answers must be separated by "separating characters" (e.g., space, command, etc.). If you write "12", it will not be interpreted as "1 2" (even though there is no 12th answer).

The scoring of multiple-choice questions is as follows.

Multiple-choice questions are worth 1 point each and you are given 5 selections for each such question. If the question has only one correct answer, the rule for grading is as follows.
  • If you select only one answer, if the answer is the same as the one in the solution key, you get 1 point; otherwise, you get 0 point.
  • If you select two answers, if one of the answer is the same as the one in the solution key, you get 0.5 point; otherwise, you get 0 point.
  • If you select more than two answers, you get 0 point.
If the question has two correct answers, the rule for grading is as follows.
  • If you select only one answer and if the answer is one of the correct answers, you get 0.5 point; otherwise, you get 0 point.
  • If you select two answers, if both of the answers are in the solution key, you get 1 point; if only one of them is in the solution key, you get 0.5 point; otherwise, you get 0 point.
  • If you select three answers, if two of the answers are in the solution key, you get 0.5 point; otherwise, you get 0 point.
  • If you select more than three answers, you get 0 point.
The third type is to ask you to give the best answer for a given question. (If a question says, "In N words or less...", it's giving you a hint that the answer should be N words or less. You don't have to answer in N words or less. There is one exception though. If the question is of the fill-in-the-blanks type where N is small, then you must not use more than N words.)

For this type of question, you get credit for including the "best answer". You may get deductions for including "bad answers". What you need to demonstrate is that you can distinguish between answers of different quality and write down the best answer. (For these questions, there is no need to write complete English sentences when you answer exam questions. Just give me the important stuff!)

Let me give a couple of silly examples (with questions that's not in the scope of any exam).

  • "For programming assignments (well, this is not our policy, I'm just using this as an example), when is 'plagiarism' considered taking place? If your answer is "when you take someone else's work and claim it to be yours", then you will get full credit. If your answer is, "when you submit someone else's work", you probably will not get full credit (since you are allowed to use code given to you in another class that you have taken if you cite it properly).

  • "What is the fairness policy of this class?" If your answer is, "whatever the instructor offer to one student, he must offer it to the rest of the class," then you will get full credit. If your answer is, "the instructor must be fair to every student," you probably will not get much partial credit because your answer is not well-defined.

XV6 Questions

If a question does not mention "xv6" explicitly, you must not give a xv6-specific answer. Most xv6-related questions are mostly high-level questions, testing about your understanding of "xv6". Although I may ask you about the purpose and usage of a specific field inside a particular important kernel data structure.

Old Exams

Since this is the first time I'm teaching this class, I don't have any old exams I can share. Instead, I will share my Spring 2025 CSCI 402 exams so that you can get an idea what an exam looks like.

Below is the midterm exam for my Spring 2025 CSCI 402 class:

Below is the final exam for my Spring 2025 CSCI 402 class: These are provided just to give you an idea of what an exam would look like. Please don't try to solve these exams (and I won't discuss them unless your question is about exam logistics).

Lecture Slides

If a lecture slide has a grey X in the lower left hand corner, I will not ask questions from that slide. If a lecture slide does NOT have the grey X, then it's possible that I will ask questions from that side (you need to figure out if it's LIKELY that I will ask questions from that slide or not; please do not ask me whether a particular slide is likely or not because I won't give you an answer for it).

Exam Grading

In order to be fair to the entire class, we can only grade based on what you put down on the exam paper. We must not take into consideration what's in your mind when you wrote your answers. We have to assume that you wrote what you meant and meant what you wrote.

In general, better answers may score more points. If you give very high level and generic answer that's generally true or basically just repeat the question, you probably will get very little partial credit for it! You need to answer a specific question with a specific answer. On the other hand, if the question called for a general answer and the answer you gave only applies to some specific examples, you probably will get very little partial credit for your answer. You must not give examples to answer general questions.

If I asked a question straight from the lecture slides, the best/correct answer is the one on the lecture slides. If you disagree with what's on the slides, you must complain when you are studying for the exam, i.e., before the exam. Once the exam starts, it's too late to complain that you don't like the answer on the lecture slides. In an exam, if you give an answer that's different from the lecture slides, you may receive partial credits, at the discretion the TA. Finally, I reserve the right to ask about things that I think you should know and not on lecture slides and not in the textbook.

Finally, multiple questions are tricky! I can take a correct statement and add some words to it and/or delete some words from it and it's still a correct statement. I can also add some words to it and/or delete some words from it and make it into an incorrect statement. In order to pick the correct answer, you need to combine critical thinking with the knowledge you gained from this class. Often times, students failed to pick the correct answer because they were not thinking critically enough or they based their choice on incorrect things they have read on the Internet and not from the course material. If you think critically enough about an incorrect answer, you should be able to form an argument that clearly shows that that particular answer is incorrect.

The grading breakdown is as follows:
PAs:
30%
Midterm Exam:
35%
Final Exam:
35%
The above percentages will be used to calculate a numeric score.

Two methods will be used to calculate your final letter grade:

  1. Use a modified curve (i.e., we won't necessarily assign an equal number of failing grades as passing grades) based on the numeric score calculated above. This curve will be presented during the first lecture of the semester.

  2. Use the following fixed scale (to encourage cooperation and friendly association amongst students):
    Percentage
    Letter Grade
    94% or higher
    A
    88-94%
    A-
    82-88%
    B+
    76-82%
    B
    70-76%
    B-
    64-70%
    C+
    58-64%
    C
    52-58%
    C-
    46-52%
    D+
    40-46%
    D
    34-40%
    D-
    below 34%
    F
Your class letter grade will be the higher grade based on 1 or 2 above.

Please also note the following:

  • No other methods will be considered. (So, please do not ask the instructor to take how much you have improved since the beginning of the semester into account. You are expected to try your best from the beginning!)

  • According to the above guidelines, it should be clear that it is possible to get a grade of C or below for individuals who perform very poorly (i.e., you should not assume a B- or even C+ if you perform very poorly, according to the guidelines above.) However, we hope that everyone will perform well.

  • We will not assign incompletes unless you miss the final exam for documented illness or documented family emergency (in accordance with USC policy).
All project assignments must be turned in on time. Late submissions will receive severe penalties. The submission deadline of all assignments are set at 11:45pm. Due to clock skews, electronic submissions of projects assignments will be accepted within 14 minutes and 59 seconds after the specified deadlines without penalties. Therefore, if you submit strictly before midnight (i.e., 12:00:00am), it would be considered on time. Starting at 12:00:00am, you will lose 1% every 5 minutes. For example, if your submission has a timestamp that is 32 minutes after the grace period, 7% will be deducted from your assignment after grading; if your submission has a timestamp that is 8 hours, 10 minutes, and 5 seconds after the grace period, you will receive a score of zero (and your assignment will not be graded). The figure below summarize such deductions.

For PA1, 2, 3, or 4, you can submit it and receive a 50% deduction before the next PA submission deadline. The requirement is that you must inform the instructor before the assignments are graded (i.e., once a PA is graded for the class, it's too late to say that you want to make another submission for that PA and use a later deadline at a 50% deduction). If you have already made a submission before the regular submission deadline, you must inform the instruction to not grade that submission because one that submission is graded, it's too late to use this option. Therefore, if you have made a PA submission already and you want to use this option, you must send an email to the instructor to withdraw that submission (i.e., don't grade that submission). Please note that this policy cannot be used on PA5 because we are not permitted to have assignments due during the final exam "study days" and we also need to give the graders enough time to grade PA5.

The figure below summarize such deductions. (Please note that this policy does NOT apply to PA5 because we are not permitted to have assignments due during the final exam "study days" and we also need to give the graders enough time to get it graded.)

If you are unable to complete a assignment due to illness or family emergency, please send email to the instructor as soon as possible to get an extension. A documented official proof of illness or family emergency is required in order to get an extension (doctor's note is required as proof of illness). In general, when you get sick, it's best to see a doctor and get a note just in case you may need it later (although during the pandemic, the rules are more relaxed because doctors don't want you to go see them just to get a note).

You also get 5 free late days that can be applied to programming assignments or labs to delay a deadline and you get to decide how you want to distribute these 5 free late days. You can apply them all on one programming assignment or one lab, or spread it any way you'd like among all the programming assignments and labs (a whole day at a time). Although for PA5, you can use at most one free late day. If you want to apply free late days to a particular programming assignment or lab, you must inform the instructor (not the TA or the grader) soon after you have made your final submission. By the way, free late days can only be used for late submissions. You cannot use them to get early submission extra credits. Also, once you have received a grade for a particular assignment which you have spent free late days on, you cannot change your mind and want to "un-use" a free late day you have used on that assignment. Finally, once an assignment is graded, it too late to say that you want to use free late days on it.

By the way, even if you have an approved extension, all your work must be submitted by the end of the last final exam day (which is on the Wednesday of the 2nd final exam week). If you have a prolonged illness and cannot finish your assignment before that, your only option is to take a grade of INCOMPLETE and complete your missing assignments within a year. But please understand that, in this case, you are only eligible for a grade of INCOMPLETE if you cannot take the final exam due to documented illness or family emergency. Once you have taken the final exam, the option of getting an INCOMPLETE is no longer possible.

It is the policy of USC Student Health that they will not issue a "note from a doctor". If you are sick, in order for it to be considered a documented illness, all I need is something that shows that you have visited a medical facility. I would assume that if you were at a medical facility, you must have been sick. For Student Health, you can get a Medical Absence form from them and you can fill it out, date it and sign it and send a digital copy of it to me and that would satisfy the requirement.

So, anything from Student Health (or doctor's office) with your name on it and the date of your visit would satisfy the requirement. It doesn't have to say why you were at the doctor's office! It just has to say which day you were at the doctor's office. Please do not ask Student Health to give you a "doctor's note" because they won't do it.

If you have questions or concerns, please send an email to the instructor.

IMPORTANT: Due to COVID, USC Student Health is swamped and they do NOT want you to visit them just to get a "note from a doctor"! You should go to Student Health only if you are "sick enough" that you need to see a doctor. Therefore, "a note from the doctor" as proof for documented illness is not required for this semester. If you just have a cold/flu symptom, please checkout the Student Health web site and follow their recommendations. If your symptoms are severe enough and you cannot work on your assignment, please contact the instructor regarding getting an extension.

Assignment Regrades

All requests to change grading of programming assginments must be submitted in writing within one week of the time the initial grade was announced to you. Requests must be specific and explain why you feel your answer deserves additional credit. A request to re-grade an assignment can result in the entire assignment being re-evaluated and as a result the score of any part of the assignment be increased or lowered as appropriate.

If you have made multiple submissions and after you have received your grade and you noticed that what we graded wasn't the submission you wanted us to grade, you may ask us to to grade a different submission. In this case, we will deduct 20 points. By default, we will grade the last submission. What you should do is to go through the verification procedure and make sure that we are grading the submission you want us to grade. If you discover that the submission we are grading is not the one you want us to grade and if you tell us soon after grading starts, there would be no penalty.

Exam Regrades

Each TA is required to use one standard when grading all the exams in his/her section. Therefore, regrade for exams is not about arguing for points but about whether the TA has made a mistake in grading or not. If you think the TA has made a mistake, you should write down (on the cover page of the exam) which problem/subproblem needs to be regraded and why you think the TA has made a mistake. Plese limit the description of your rationale to be only one sentence long (e.g., "my answer is also correct", "I deserve more partial credit", etc.). There is no need to discuss your answer or your rationale with the TA since the TA is required to grade entirely based on what you wrote on the exam paper (and thus must ignore everything you said during a regrade session).

Please be familiar with the grading rules for multiple choice questions. The TA must stick to those rules when giving points for multiple choice questions.

After the regrade appointment is over, the TA will look over your answers in order to determine if a mistake was made (i.e., the actual regrade only happens after your regrade appointment). If a mistake was made, the TA will need the instructor's approval in order to return points to you. If I approve of a grade change, I will send you a private email informing you that I have updated my grading records. Please understand that if your grade stays the same, I will not send you an email. Therefore, if you don't get such an email from me, it means that your grade did not change.

To be fair to all, we must assume that you wrote what you meant and meant what you wrote. Every student gets a maximum of one regrade appointment. So, please use your time wisely during a regrade session and not spending much time telling the TA what you were thinking when you were writing down your answers since the TA must grade based on what you wrote and not what you were thinking..

Office hours will be held in Zoom meetings. I will have to limit the time for each student to be 15 minutes max to give other students a chance. You are welcome to request a breakout room so we can discuss your code. If you don't see me in the main room, most likely, I'm in the breakout room, so please just wait in the main room. The wait list in the main room may be long. Therefore, there is always a possibility that by the time the office hour ends, you are still on the wait list. It may be best to email your questions to me or post your questions to the class Piazza Forum.

I will keep the Zoom meeting running during the entire office hour. When no one is waiting to ask me questions, I may walk away from my computer. If when you arrive to the office hour and I'm not in front of the computer, please send me an email. If you know that you will arrive to the office hour at a certain time, please send me email so I can make sure that I won't walk away at that time (although please understand that this is not an "appointment" since I may be talking to another student already).

Also, at this time, I'm not sure if the waiting room feature would work! The TA told me that if you login from USC, you would bypass the waiting room! Therefore, if someone is showing me his/her code, another student can easily copy the code! To make sure that this cannot happen, please only talk about your code if we are in a private meeting. This means that during office hours, if you want to share your screen in the main room, we should be only looking at common course material such as lecture slides and class web pages.

To encourage you to do your programming assignments early, you will get extra credit if you turn in programming assignment 2 or more days before the original submission deadline.
  • If your submission is more than 72 hours before the posted deadline, you get an extra 10%, i.e., your actual score will be 1.1 times your graded assignment score.
  • If your submission is between 48 and 72 hours before the posted deadline, you get an extra 5%, i.e., your actual score will be 1.05 times your graded assignment score.
The figure below summarize the early submission extra credit schemes.
early.png
Please note that due to my fairness policy, I cannot offer any individual extra credit work.
During the semester you are responsible for completing the assigned readings, programming assignments, and exams.

You are expected to read the relevant textbook chapter thoroughly. Not all details will be covered in class, and the exam may test material covered in the textbook but not explicitly discussed in class.

I expect you to attend every class meeting. If you do happen to miss a session, you are responsible for finding out what material was covered and if any administrative announcements were made. Also, please be aware that midterm exam is taken during pre-assigned class time and final exam is taken during the time specified by the university and they cannot be changed for you.

Unless otherwise specified, programming assignments and exams must be that of the individual student. It is often productive to study with other students. However, if any portions of the programming assignments are found to be shared between two (or more) students, zero credit will be given to all students concerned and all students will be disciplined. This policy is in the interest of those students who do their own work, which hopefully applies to all of you in this class.

For this class, we will use sophisticated automated program checkers to detect cheating. Be aware that the program checkers have demonstrated very good results and are widely used within the academic community. Any student caught cheating will be given zero credit and will be disciplined.

It is the students responsibility to submit their assignments electronically in time.

For students who satisfied the prerequisite at other universities or through work experience, this course assumes that you understand data structures, basic algorithms, and UNIX/Linux programming. You should be able to write large programs in C/C++. No special assistance or consideration will be offered if your background is inadequate.

The instructor must treat all students equally and cannot give special treatment to any particular student. Therefore, please do not ask special favors from the instructor because of your circumstances. This may seem unfair to you because you believe that your circumstances are special (understandably, everone does). Other than the exceptions setup at the beginning of the semester (whatever they may be), the rule the instructor must follow is that whatever he offers you, he must offer to the entire class.
Students who are registered with the Office of Student Accessibility Services (OSAS) must inform the instructor regarding the type of accommodations that have been approved by the university. Please send a copy of your Letter of Accommodation from OSAS to the instructor by the end of the 3rd week of classes so that the instructor can make sure that the required accommodations will be satisfied.
Auditing "unofficially" is not permitted for this class.
Email is a serious communication tool. For this class, you should setup your email server so that you do not drop any email from me (i.e., from <bill.cheng@usc.edu>).

Pretty much all class related announcements will be sent through the class Piazza Forum. Therefore, you are required to be a member of this Piazza Forum. As messages are posted to the class Piazza Forum, you will receive email notifications and you should read all these class-related emails. Please see instructions on how to get on this forum (you should do this as soon as possible).

You are strongly encouraged to send private email messages to me if you have questions about programming assignments or lectures. If the answer is appropriate for the entire class, I would normally anonymize the reply and send the reply through the class Piazza Forum. So, please don't be shy about asking questions!

One type of question I often get is the following:

I am thinking about not following the spec or grading guidelines and would like to do this instead. Is it acceptable (or is this okay)?
What you are really asking is whether you will receive full credit or not. Please just stick to the spec and the grading guidelines. (Of course, if there is a conflict between the spec and the grading guidelines, you should let me know and ask me to fix one of them.)
Please make sure you read the Academic Integrity Policy of this course.
The diversity of the participants in this course is a valuable source of ideas, problem solving strategies, and engineering creativity. I encourage and support the efforts of all of our students to contribute freely and enthusiastically. We are members of an academic community where it is our shared responsibility to cultivate a climate where all students and individuals are valued and where both they and their ideas are treated with respect, regardless of their differences, visible or invisible.
A link to the USC Summer 2025 academic calendar is provided here for your convenience.
A link to the USC Summer 2025 CS schedule of classes is provided here for your convenience.
(These resources below are provided for your information. Please note that the instructor has not read most of them. Please use these resources at your own risk!)

Programming (please understand that the information on these web sites may be incorrect):

Unix/Linux (although they are not the same things, they are quite similar): Just for fun (not all that related to our class):