Foundations of Computer Systems
This course will provide a broad, programmer-oriented introduction to how modern computer systems execute programs, store information, and communicate. We examine the hardware and software abstractions and implementations required to go from a program expressed in a high-level programming language like C to the computer actually running the program. Topics include concepts of program compilation and assembly, machine code, data representation and computer arithmetic, caching and the memory hierarchy, processes, and system-level I/O.
Primary course goals include:
CSCI 2101 (Data Structures). Prior knowledge of C is not required or expected.
Instructor: Sean Barker
Office: Searles 220
Office Hours: Tuesday/Thursday 1:30-3, Friday 12-2, or by appointment.
Attendance and participation during class and lab sessions, completion of lab assignments, and two exams (one midterm and a final). Evaluation will be as follows:
Labs will be a mix of individual and group assignments. These assignments will demand a significant time commitment on your part, and it is critical that you start working early!
You will have 3 flex days to submit projects late without penalty during the semester, which may be allocated however you wish. Beyond the use of your flex days, late assignments will be penalized a letter grade per day.
We will use Piazza to facilitate discussion outside of class. In general, you should prefer posting to Piazza over sending me email, as it will allow your classmates to both see and answer your questions, possibly quicker than I alone can (though you can also post privately such that only I can see your question).
Here is the CSCI 2330 Piazza page.
There is one primary textbook that you should acquire:
R. Bryant and D. O'Hallaron. Computer Systems: A Programmer's Perspective, 3rd edition (2015). Available at Amazon or elsewhere.
Note: you must use the 3rd edition; earlier editions are substantially different and will not suffice.
In addition, you may wish (but are not required) to acquire a good reference on the C programming language. Recommended is the gold standard of C programming books:
B. Kernighan and D. Ritchie. The C Programming Language, 2nd edition (1988). Available at Amazon or elsewhere.
Mondays, Tuesdays, and Thursdays, 11:40 AM - 1:05 PM
Searles 126 (Tuesdays and Thursday), Searles 128 (Mondays)
Monday meetings will normally be used as lab periods.
Use of laptops in-class is permitted for note-taking or other class-related purposes. Cell phones should be silenced and put away during class to avoid disruptions.
No electronic devices, including computers, phones, or calculators, are permitted during exams unless specifically indicated by the instructor.
Please review the Computer Science Collaboration Policy. You are responsible for reading, understanding, and adhering to this policy.
Note for version control system users (e.g., git): While you are welcome to use version control systems such as Git or Subversion to collaborate within your team (or to store your own code), you may not store or post any code in publicly-available repositories (such as public repositories on GitHub). If you would like to use a service like GitHub, you must use a private repository.