(CS3650) Computer Systems

Fall 2019

Beware: This page is for the section taught by Aanjhan Ranganathan ONLY. There are other sections (content/deadlines might vary) of the same course taught by Mike Shah and Nat Tuck.

Logistics

Time and Location: Mondays and Thursdays from 11:45 - 1:25 pm in West Village G 108

Piazza: All course related interactions will take place over Piazza. Enroll here!

Office hours: Thursdays from 2:00 to 3:00 pm in ISEC 608

TAs: Jennifer Ribeiro, Akash Parikh

TA office hours: Tuesdays 12 noon - 1 pm in ISEC 605

Course Description

Introduces the basic design of computing systems, computer operating systems, and assembly language using a RISC architecture. Describes caches and virtual memory. Covers the interface between assembly language and high-level languages, including call frames and pointers. Covers the use of system calls and systems programming to show the interaction with the operating system. Covers the basic structures of an operating system, including application interfaces, processes, threads, synchronization, interprocess communication, deadlock, memory management, etc. Additionally, it will give the students a brief overview of computer system security issues.

Reading Materials

The course will be based on the following three textbooks (it is not mandatory to buy them)

  • Bryant, Randal E., O’Hallaron David Richard, and O’Hallaron David Richard. Computer systems: a programmer’s perspective.
  • Kernighan, B.W. and Ritchie, D.M., 2006. The C programming language.
  • Arpaci-Dusseau, Remzi H., and Andrea C. Arpaci-Dusseau. Operating systems: Three easy pieces.

Labs

There will be 8 programming labs throughout the semester. We will start the labs in class on Mondays and you will wrap it up on the due date mentioned. Wrapping up means submission before start of class on that specific date. We will use Github Classroom for lab assignment and submissions.

You will form groups of two people (possibly three, only if necessary) to do the projects. You may switch groups between programming projects.

Slip days: Each team has 4 slip days that they can use at any time to extend a deadline. You don’t need to ask me, just turn-in late. In scenarios of changing teams, a team’s slip days is the member with the lowest remaining slip days.

Important Note: If you refered or obtained a key idea from a book, person or any online source, then the source of the idea (it can be code as well) must be cited. I am not against looking up additional sources to complete the projects but I will not tolerate academic dishonesty. If I think some part of the project has been blindly copied without understanding, I reserve the right to cross-examine the submitted lab.

Grading

Labs (10): 70% (Lab 1 and 8: 5% each; Labs 2-7: 10% each)
Final: 20%
Participation: 5%
Random Quizzes: 5%

Schedule

Note: The schedule is tentative and can change due to weather, travel, syllabus coverage speed etc.

Date Topic Lab (due dates)^ Readings Notes
5 Sep Intro / Course logistics      
9 Sep C Programming (The Basics) Lab 1 (due: 16 Sep)    
12 Sep C contd…      
16 Sep C Data structures Lab 2 (due: 23 Sep)    
19 Sep Assembly      
23 Sep Assembly Lab 3 (due: 30 Sep)    
26 Sep Compilers     T
30 Sep Compilers Lab 4 (due: 07 Oct)   T
3 Oct Processor Architecture      
7 Oct Memories      
10 Oct Caches      
14 Oct No class - Columbus day      
17 Oct Caches Lab 5 (due: 24 Oct)    
21 Oct Concurrency      
24 Oct Concurrency Lab 6 (due 31 Oct)    
28 Oct Operating Systems      
31 Oct Operating Systems Lab 7 (due 07 Nov)    
4 Nov Storage Devices      
7 Nov Storage Devices      
11 Nov No class veterans day      
14 Nov Computer System Security      
18 Nov Computer System Security      
21 Nov Final Quiz     T
25 Nov Computer System Security Lab 8: (due 02 Dec)    
28 Nov Thanksgiving      
2 Dec Final Class      
5 Dec Reading day     G only

^ - Remember all labs are due before the start of class on the dates mentioned

Acknowledgements

This course is largely adopted from previous courses given at Northeastern by Profs. Gene Cooperman, Nat Tuck, Mike Shah, and Christo Wilson. Some parts are from similar course taught at ETH Zurich by Profs. Srdjan Capkun, Onur Mutlu, Markus Pueschel, and Frank Gurkaynak.