Course Syllabus

NOTE: Some links in this syllabus page may only be accessible to currently enrolled students.

In this course we will learn a lot of interesting stuff about modern operating systems, such as, communicating with them using system calls, creating and managing multiple processes at once, creating multiple threads, getting processes and threads to synchronize their actions, and how processes can communicate with each other, when they are on the same machine, as well as over the network. We will be extensively using Unix, C and its libraries, and Rust in this course. You are not expected to know C or Rust coming into the course, and the knowledge of these languages needed in this course will be taught in the course.

Meet the Instructor

Hi! My name is Justin Goins. I've previously taught a wide variety of on-campus and Ecampus courses at OSU so I might have met you during earlier courses or at one of the Ecampus Career Showcases. I first entered the world of teaching during the summer of 2011 when I worked as the instructor for CS 271 (Computer Architecture). I loved the experience and later ended up teaching the course for several years while simultaneously working on my graduate research in the field of sensor networks.

After I finished my PhD I applied as a full-time instructor at OSU and I'm delighted to be teaching again. Since my research background is in electrical & computer engineering, I have the somewhat unusual distinction that I teach classes in both fields (CS & ECE). If you are curious to learn more about me, there is a short biography available online from my time as a graduate student.

Some of my outside hobbies include photography, swimming, and SCUBA diving. During the summer you're likely to find me swimming at the local Osbourne Aquatic Center or at the Marys River. I occasionally ride BMX bikes though I rarely attempt any tricks that I deem "too ambitious". I've confirmed that aches and bruises take longer to heal as you get older. :)

I try to stay involved in the local community and have volunteered at several schools in the Corvallis district. I feel that it's important for young students to explore the career opportunities that are available in the technical fields. Most students automatically assume that engineering and computer science are simply full of boring math but the reality is so much more interesting!

I look forward to teaching CS344 this term. In our day-to-day lives we generally take computer operating systems for granted. However, there is a lot going on behind the scenes! This course will explore the topic and will provide you with a better understanding (and appreciation) of the complexities that lie hidden beneath the graphical interfaces.

Additional Instructors

Bram Lewis teaches CS344 as an Ecampus course. Even though you are enrolled in the "remote delivery" version (section 001), we will be pooling resources with the Ecampus team in order to improve your experience as a student. You will sometimes see Bram active in forums and office hours.

At the completion of the course, you will be able to ...

  1. Justify the need for a multi-programmed operating system and explain the general structure of such systems.
  2. Select system calls for appropriate uses.
  3. Compare and contrast the process and thread abstractions and select an appropriate abstraction when needed.
  4. Assess and solve possible issues related to concurrent execution.
  5. Explain the file abstraction and system level I/O.
  6. Compare and choose mechanisms for inter-process communication.
  7. Write software by applying appropriate system programming principles and techniques.

Course Syllabus

A syllabus document is available as a pdf file.

Course Schedule

A weekly course schedule is available as a pdf file.

Syllabus Quiz

Please don't forget to take the syllabus quiz so you can continue onto the learning modules: Syllabus Quiz

Instructional Staff

Role Name Email
Instructor (Section 001) Justin Goins
Instructor (Section 400) Bram Lewis
Instructor (Section 401) Kevin McGrath
GTA Andrew Quach
GTA Daniel De Leon
ULA Felipe Orrico Scognamiglio
GTA Hongyu Nie
GTA Jian Tang
GTA Jordan Henstrom
GTA Kai Zeng
GTA Michael Slater
GTA Parthasarathy Reddy Bana
ULA Tam Le
ULA Zachary D. Taylor

Communication Policy

Grading & Regrading

We will attempt to grade the assignments within 7 days of the due date. For questions related to grading or regrading please directly email the TA who graded your assignment. TA's are assigned to grade assignments based on student last names as follows:

From To
Adriano Graneto Jordan Henstrom
Gulati Kim Zachary D. Taylor
Kudna Marshall Felipe Orrico Scognamiglio
Mather Nibali Daniel De Leon
Nordlund Valadez Jian Tang
Valluri Zontos Andrew Quach

The instructors will be reviewing a random sampling from the existing groups, but please first go through your grader listed above.

You can request a regrade on an assignment by contacting your grader within 48 hours of receiving your grade. Include what points were taken off and why you feel your assignment/project does in fact meet the requirements you were penalized for not meeting. Keep in mind, this is a discussion about meeting standards and to write your request for regrading as such.

Assignment Extensions, Escalated Grading Questions & General Course Info

For assignment extensions, escalated grading questions, and other general course information, please email the instructor.

Assignments & Course Content

Ask questions about assignments and course content, on Piazza, as opposed to direct messages to the instructors or the GTAs or the ULA, in order to help make these questions and answers available to everyone. You will also get an answer to your question far faster by posting in Piazza than by emailing or sending a private message, as there are more than a hundred people looking at those discussion boards.

Personal Questions

For personal questions, you can email the instructors from your OSU email account or via private posts on Piazza for the instructors.

Office Hours & Real-Time Communication

OSU is currently migrating towards Microsoft Teams for real-time collaboration. As a result, we are planning to hold office hours using the Teams platform. Instructors and teaching assistants will be present during their scheduled times to answer questions and offer assistance. You can also ask questions of other students if you choose. However, it's worth noting that there can be a lot of activity in the Teams platform. Consequently, don't count on us reading the scroll back to find a question you asked earlier: your primary method for getting help is still Piazza.


If you email the instructors or the TAs, use your OSU email account. You must put CS344 in the subject line, or else we may miss it.

Response Time

We will strive to respond to email and Piazza posts within two business days. We will aim to have the assignments graded within 7 days of the due date. Please note that we may not be accessible over the weekend and on holidays.

Office Hours

The best place to ask questions and get help is on Piazza. If you'd like direct, personal help, you can also ask questions during office hours. The up to date list of office hours is provided on the "Home" page

Note: Office hours will not be held during Finals Week, or on days that the University has off (holidays, inclement weather days, etc.). The Instructors and TAs reserve the right to cancel or move office hours, but will give appropriate warning, if possible.

Programming Languages Used

We will use C and Rust programming languages in the course. You should use the course's OSU server for coding and running your programs in both these programming languages.

Server Access & File Management

You'll need to access our course server via a command-line driven SSH client to complete your programming assignments. For Windows, you can download PuTTY here - this is what I use to connect to the OSU UNIX servers. An SSH command-line client is already built-in to both Linux and MacOS's Terminal applications.

The course server you must use is - connect to this with your command-line client. This server has been set aside for us to use, and is where you should do ALL of your development. This is also the server we will be grading your software on. We will exclusively be using the bash shell on this server for grading and development, so make sure that's what you're using, too (see below for instructions on how to change your shell).

Follow the tutorial here to learn how to connect to our server with PuTTY. Note that you cannot connect to os1 from outside the OSU network; see the tutorial for details.

Do not use other OSU servers to run our class assignments on, as much of our software will crash the server you use; this is why we have been given our own machine! If you run your programs for this class on any other server at OSU, the EECS IT support team will notify me of it, and you will lose 15 points.

I highly recommend that you change the default shell used on our server to be bash (it's normally tcsh) by using this page:

If you suspect that you have started too many programs, and/or are otherwise having trouble logging in to our EECS servers, please use this page to kill off any programs running on your account that might be blocking your access:

If you still have trouble logging in, contact EECS Support at:

Backup your software as you write it; keep archived copies of your homework as you work on it. If you accidentally delete or overwrite something from an EECS server, and you don't have your own backup, you may be able to do some restoration manually by following these instructions: Additionally, you can contact for help recovering data.

Course Summary:

Date Details