CIT 595 Computer Systems Programming - Spring 2018

Course Overview

This course is a continuation of CIT 593 and is divided into four parts. We will begin by building on your knowledge of C and covering advanced programming in C for Linux, specifically the libraries that programmers use for concurrency and synchronization. The second part of the course expands the model from a single process to a multiprocess machine and introduces important concepts in modern operating systems: processes, scheduling, caching, and virtual memory. The third part of the course further expands the model and considers how processes communicate across a network, using low-level socket programming and high-level web technologies. Finally, the course introduces the C++ programming language.

After completing this course, you will have the requisite knowledge and experience for systems-focused CIS electives such as 505 Software Systems and 553 Networked Systems.

This course is currently only open to students in the MCIT program and assumes prior C knowledge (specifically, what is covered in CIT 593) but not C++. Due to the large size of the MCIT class and the limits on classroom size, students in other programs may add themselves to the course waitlist but are unlikely to be admitted and should consider CIS 505 or CIS 548 instead.

Teaching Staff


Teaching Assistants

  • Veronika Alex
  • Lingjia (Lisa) Gu
  • Xuye (Karin) Lin
  • Na Luo
  • Yichen Shao


Class Meeting Times

Lecture: Tues/Thurs 10:30-11:50am
Recitation: Thurs 4:30-5:50pm

Please note that the first class meeting will be Tuesday, January 16. We will not have Lecture or Recitation on Thursday, January 11.

Topics Covered

Systems Programming in C

  • Data structures in C
  • Threads and synchronization
  • C memory management
Operating Systems Concepts
  • Process management
  • Scheduling
  • Caching
  • Virtual Memory
Network Programming
  • OSI network model
  • Socket programming
  • Basics of the World Wide Web
  • Core web technologies: HTML, CSS, and JavaScript
C++ Programming
  • Object-oriented programming
  • Operator overloading
  • Templates



There is no required textbook for this course. There will be numerous assigned readings over the course of the semester, but they will be made available to you via Canvas.



Note that these are only guidelines, but final course grades will likely be based on the following:

  • Homework assignments (50%)
    • There will be 6-7 programming assignments over the course of the semester
    • You must work on these assignments alone unless specifically noted
  • Exams (30% total)
    • There will be two exams over the course of the semester; each is worth 15% of the final grade
  • Recitation (5%)
    • Weekly recitation sessions will include solving problems related to lecture material
    • Your grade will be determined by attendance, participation, and the correctness of your solutions
  • Group project (15%)
    • You will work with 2-3 other students to develop a system consisting of a client-side web application, a web server, an Arduino microcontroller, and some sort of sensor and display


Course Policies

Policies related to absences, regrade requests, academic honesty, etc. will be made available to registered students via Canvas.