(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 5.30 pm - 6.30 pm, Wednesdays 12 - 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)^
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  
30 Sep Compilers Lab 4 (due: 07 Oct)
3 Oct Processor Architecture  
7 Oct Processor Architecture  
10 Oct Hard disks, SSD  
14 Oct No class - Columbus day  
17 Oct Caches Lab 5 (due: 24 Oct)
21 Oct Caches  
24 Oct Virtual Memory  
28 Oct Virtual Memory Lab 6 (due 4 Nov)
31 Oct Concurrency  
4 Nov Concurrency Lab 7 (due 14 Nov)
7 Nov Concurrency  
11 Nov No class veterans day  
14 Nov Computer System Security  
18 Nov Computer System Security  
21 Nov Final Quiz  
25 Nov xv6 - Operating System Lab 8: (due 02 Dec)
28 Nov Thanksgiving  
2 Dec Final Class  
5 Dec Reading day No class  

^ - 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 and UW Madison by Profs. Srdjan Capkun, Onur Mutlu, Markus Pueschel, Frank Gurkaynak, and Remzi Arpaci-Dusseau.