MPCS 52015 Advanced Computer Systems (Spring 2025)

Section 1
Instructor(s) Kimpe, Dries (dries)
Location Ryerson 255
Meeting Times Monday 5:30pm - 8:30pm
Fulfills Core Systems Elective

Syllabus

This class will use the book Computer Systems: A Programmer'sPerspective (3rd Edition), Randal E. Bryant, David R. O'Hallaron (required).

This course focuses on studying modern computer systems from the point of view of a programmer, with an emphasis on topics which help you improve the performance, correctness or utility of user-level programs.

As such, this is intended to be a practical, hands-on study of contemporary computer systems. We will focus on the X86-64 architecture (as implemented by Intel/AMD 64 bit processors).

Topics: 

- Representing and Manipulating information: unsigned and two's complement representation, IEEE floating point and corresponding arithmetic.

- Machine level representation of programs: x86-64 assembly, control instructions, translation of basic C control constructs (such as loops and switch statements), a study of common code security vulnerabilities (such as buffer overflows).

- Processor architecture: study of a pipelined out of order processor.
 
- Code optimization

- Memory hierarchy: persistent storage(magnetic spinning disks, SSD), RAM and ROM, and caches. 

- Virtual Memory


This is a hands on course; There will be multiple labs requiring you to program in C.

Labs include:

- Data lab: learn how to efficiently perform arithmetic operations without doing arithmetic

- Bomb lab: reverse engineer (disassemble) a binary program to discover the secret keys

- Attack lab: Perform a buffer overflow exploit in order to bypass authentication. 

and more.



The information above is the intended content of the course and subject to change.

Course Prerequisites

MPCS 51040 C Programming or MPCS 51100 Advanced Programming.

This course requires a working knowledge of C Programming for assignments. Completion of MPCS MPCS 51040 C Programming or MPCS 51100 Advanced Programming or the MPCS C Programming Bootcamp is required. MPCS 51044 C/C++ for Advanced Programmers will not provide enough background for the course without also attending the C Bootcamp.

This is an advanced Core Systems class and we recommend that students take MPCS 51082 Introduction to Unix Systems or MPCS 52011 Introduction to Computer Systems before enrolling in this course.

Other Prerequisites

This course requires competency in Unix and Linux. If you attended the MPCS Unix Bootcamp you covered the required material. If you did not, please review the UChicago CS Student Resource Guide here: https://uchicago-cs.github.io/student-resource-guide/.

Course request information for non-MPCS students: https://masters.cs.uchicago.edu/student-resources/non-mpcs-student-course-requests/

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 51083-2 -- Cloud Computing
  • MPCS 51032-1 -- Advanced iOS Application Development
  • MPCS 52018-1 -- Advanced Computer Architecture
  • MPCS 52553-2 -- Web Development
  • MPCS 53110-1 -- Foundations of Computational Data Analysis

Eligible Programs

MS in Computational Analysis in Public Policy (Year 2) MA in Computational Social Science (Year 2) Masters Program in Computer Science