EECS 213 - Introduction to Computer Systems

CATALOG DESCRIPTION:This course has four purposes: (1) to learn about the hierarchy of abstractions and implementations that comprise a modern computer system; (2) to demystify the machine and the tools that we use to program it; (3) to come up to speed on systems programming in C in the Unix environment; (4) to prepare students for upper-level systems courses.

  • This course is a required Core course in the CS curriculum in McCormick and Weinberg

Instructor's Course Home Page

COURSE GOALS: This course has four purposes. First, you will learn about the hierarchy of abstractions and implementations that comprise a modern computer system. This will provide a conceptual framework that you can then flesh out with courses such as compilers, operating systems, databases, networks, security, real-time systems, and others. The second purpose is to demystify the machine and the tools that we use to program it. This includes telling you the little details that students usually have to learn by osmosis. In combination, these two purposes will give you the background to understand many different computer systems. The third purpose is to bring you up to speed in doing systems programming in a low-level language (C) in the Unix (Linux/GCC/GDB/etc) environment. The final purpose is to prepare you for upper-level courses in systems.

This is a learn-by-doing kind of class. You will write pieces of code, compile them, debug them, disassemble them, measure their performance, optimize them, etc.

This course is ideally taken after EECS 211 early in your academic career. This is a REQUIRED COURSE for the CS Major.

You are encouraged to examine the latest EECS 213 web site for more information.

REQUIRED TEXTBOOK : Bryant & O'Hallaron, Computer Systems: A Programmer's Perspective, Prentice Hall, 1 st edition

RECOMMENDED TEXTS:

  • Kernighan and Ritchie, The C Programming Language, Second Edition , Prentice Hall, 1988.
  • Stevens, Advanced Programming in the Unix Environment , Addison-Wesley, 1992.

COURSE COORDINATOR: Peter Dinda

PREREQUISITES: EECS 211 or EECS 230 (Intro C++)

PREREQUISITE FOR: EECS  322 (Compilers), 339 (Databases), 340 (Networking), 343 (Operating Systems), 350 (Security), 397 (Real-time), 441, 442

HOMEWORK ASSIGNMENTS:

  • HW 1: Integer and Floating Point Number Representations
  • HW 2: De-compiling Assembly Code
  • HW 3: Memory and Cache
  • HW 4: Virtual Memory and I/O

LAB ASSIGNMENTS:

Lab assignments are generally continuously autograded with current scores available from the web. Beyond “making the grade”, students are encouraged to compete.

  • Data Lab: Building Complex Operators from Limited Numbers of Simple Ones
  • Bomb Lab: Defusing a Binary Bomb Using a Debugger and Knowledge of How a Compiler Works
  • Exploit Lab: Learning Stack Discipline by Building Buffer Overflow Exploits
  • Malloc Lab: Developing a Small, but Critical Piece of Systems Software, a Heap Memory Allocator Library
 

instructor-course-page-button1If you see this button within a description, clicking it will take you to the Instructor's own page for this class.

Course schedules & descriptions

Search Courses by Instructor


Search course subsets


Robert R. McCormick School of Engineering and Applied Science
Electrical Engineering & Computer Science Home | McCormick Home | Northwestern Home
© 2013 Robert R. McCormick School of Engineering and Applied Science, Northwestern University
MapsContact UsCalendar
TECH: 2145 Sheridan Rd, Tech L359, Evanston IL 60208-3118 USA |  Phone: (847) 491-5410  |  Fax: (847) 491-4455
FORD: 2133 Sheridan Rd, Ford Building, Rm 3.320, Evanston  IL 60201 USA |  Phone: (847) 491-5410  |  Fax: (847) 491-5258
Questions about this site? Please email the webmasterLegal and Policy Statements