Princeton University
Computer Science Department

Computer Science 217
Introduction to Programming Systems

Jennifer Rexford

Fall 2019

General Information | Schedule | Assignments | Announcements | Policies


The schedule may change throughout the course. Please check it frequently.

Weeks start on Mondays, and are indexed from 0.

Week 0: 9/9 - 9/15

Reading (required): C Programming (King) 1

Reading (required): Computer Systems (Bryant & O'Hallaron) 1 (available through Blackboard in the "Course Materials" section)

Lecture 1: (Thursday) Introduction; C Overview [6-up]

Week 1: 9/16 - 9/22

Reading (required): C Programming (King) 2, 3, 4, 5, 6, 7, 20.1

Reading (recommended, for reference only): C Programming (King) 21

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 2

Reading (recommended): Unix Tutorial for Beginners

Reading (recommended): GNU Emacs Tutorial

Reading (recommended): Linux Pocket Guide (Barrett) pp. 166-179 (concerning composing Bash shell scripts) (available through Blackboard in the "Course Materials" section)

Reading (recommended): Wikipedia "Deterministic finite automaton" article

Precept 1: (Monday/Tuesday) Introduction; The Computing Environment; Program Preparation

Lecture 2: (Tuesday) A Taste of C [6-up]

Precept 2: (Wednesday/Thursday) Linux; Bash; Emacs

Lecture 3: (Thursday) Number Systems [6-up]

(Sunday 9/22) Introductory Survey Assignment Due (at 9:00PM)

Week 2: 9/23 - 9/29

Reading (required): C Programming (King) 14, 15

Reading (recommended): GNU GDB Tutorial

Precept 3: (Monday/Tuesday) Simple C Programs; C Fundamentals

Lecture 4: (Tuesday) The Design of C (Data Types)) [6-up]

Precept 4: (Wednesday/Thursday) Multi-File C Programs; GDB

Lecture 5: (Thursday) The Design of C (Operators, Statements, I/O) [6-up]

(Sunday 9/29) De-Comment Assignment Due (at 9:00PM)

Week 3: 9/30 - 10/6

Reading (required): C Programming (King) 8, 9, 11, 12, 13

Reading (recommended): The Practice of Programming (Kernighan & Pike) 6

Reading (recommended): GNU Make Tutorial

Precept 5: (Monday/Tuesday) C Pointers and Arrays

Lecture 6: (Tuesday) Testing [6-up]

Precept 6: (Wednesday/Thursday) C Arrays and Strings

Lecture 7: (Thursday) Building; Debugging notes 1 [6-up]

Week 4: 10/7 - 10/13

Reading (required): C Programming (King) 16, 17

Reading (recommended): The Practice of Programming (Kernighan & Pike) 1, 2, 5

Precept 7: (Monday/Tuesday) C Command-Line Arguments; C Structures; C Dynamic Memory Management

Lecture 8: (Tuesday) Program and Programming Style [6-up]

(Tuesday 10/8) String Module Assignment Due (at 9:00PM)

Precept 8: (Wednesday/Thursday) The Meminfo Tool; Abstract Data Types in C

Lecture 9: (Thursday) Data Structures; Debugging notes 2 [6-up]

Week 5: 10/14 - 10/20

Reading (required): C Programming (King) 19

Reading (recommended): The Practice of Programming (Kernighan & Pike) 4, 8

Precept 9: (Monday/Tuesday) C Void Pointers; The Symbol Table Assignment

Lecture 10: (Tuesday) Modularity [6-up]

Precept 10: (Wednesday/Thursday) C Function Pointers; A DynArray ADT

Lecture 11: (Thursday) Performance profiling [6-up]

(Sunday 10/20) Symbol Table Assignment Due (at 9:00PM)

Week 6: 10/21 - 10/27

Reading (required): C Programming (King) 10, 18

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 5.1-5

Reading (recommended): The Practice of Programming (Kernighan & Pike) 7

Reading (recommended, for reference only): OProfile Manual

Precept 11: (Monday/Tuesday) C Declarations and Definitions

Lecture 12: (Tuesday) Review for midterm exam [6-up]

Precept 12: (Wednesday/Thursday) NO PRECEPT

Lecture 13: (Thursday) Midterm Examination (Midterm Exam Preparation Document, Midterm Exams and Answers from Previous Semesters)

Week 7: 10/28 - 11/3

(Monday - Sunday) Fall Recess

Week 8: 11/4 - 11/10

Reading (required): ARM 64 Bit Assembly Language (Pyeatt with Ughetta) 2-5

Reading (recommended, for reference only): ARMv8 Instruction Set Overview

Reading (recommended, for reference only): ARM Architecture Reference Manual

Reading (recommended, for reference only): Using as

Precept 13: (Monday/Tuesday) Assembly Language: Getting Started

Lecture 14: (Tuesday) Assembly Language 1 [6-up]

Precept 14: (Wednesday/Thursday) Assembly Language: Fundamentals, Control Transfer (Part 1)

Lecture 15: (Thursday) Assembly Language 2 [6-up]

Week 9: 11/11 - 11/17

Reading (recommended): ARM 64 Bit Assembly Language (Pyeatt with Ughetta) 6-7

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 7

Precept 15: (Monday/Tuesday) Assembly Language: Control Transfer (Part 2), Instruction Operands, GDB for Assembly Language

Lecture 16: (Tuesday) Assembly Language Function Calls Assembly Language Function Calls [6-up]

Precept 16: (Wednesday/Thursday) Assembly Language: Local Variables, Functions

Lecture 17: (Thursday) Machine Language [6-up]

Week 10: 11/18 - 11/24

Reading (required): Computer Systems (Bryant & O'Hallaron) 8.1-8.3 (available through Blackboard in the "Course Materials" section)

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 6

Precept 17: (Monday/Tuesday) The Buffer Overrun Assignment: Overview, "B Attack", Writing Binary Data

Lecture 18: (Tuesday) Exceptions and Processes [6-up]

(Tuesday 11/19) Assembly Language Assignment Due (at 9:00PM)

Precept 18: (Wednesday/Thursday) The Buffer Overrun Assignment: MiniAssembler Module, "A Attack"

Lecture 19: (Thursday) Memory Hierarchy [6-up]

Week 11: 11/25 - 12/1

Reading (required): The C Programming Language (Kernighan & Ritchie) 8.7 (available through Blackboard in the "Course Materials" section)

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 9

Precept 19: (Monday/Tuesday) The HeapMgr Assignment: Introduction, and Linked List Implementation: Data Structures, Algorithms, and Code

Lecture 20: (Tuesday) Dynamic Memory Management [6-up]

(Wednesday - Friday) Thanksgiving Holiday

Week 12: 12/2 - 12/8

Reading (required): Computer Systems (Bryant & O'Hallaron) 8.4 (available through Blackboard in the "Course Materials" section)

Precept 20: (Monday/Tuesday) The HeapMgr Assignment: First Assignment Implementation Data Structures and Algorithms, First Assignment Implementation Code (partial), Second Assignment Implementation Data Structures and Algorithms, Second Assignment Implementation Code (partial)

Lecture 21: (Tuesday) Dynamic Memory Management cont'd [6-up]

(Tuesday 12/3) Buffer Overrun Assignment Due (at 9:00PM)

Precept 21: (Wednesday/Thursday) The Unix Shell Assignment: Introduction

Lecture 22: (Thursday) Process Management [6-up]

Week 13: 12/9 - 12/15

Reading (required): Computer Systems (Bryant & O'Hallaron) 8.5 (available through Blackboard in the "Course Materials" section)

Reading (recommended): Computer Systems (Bryant & O'Hallaron) 10 (available through Blackboard in the "Course Materials" section)

Precept 22: (Monday/Tuesday) The Unix Shell Assignment: Processes

Lecture 23: (Tuesday) Input/Output [6-up]

Precept 23: (Wednesday/Thursday) The Unix Shell Assignment: Built-ins, I/O Redirection, Signals

Lecture 24: (Thursday) Signals [6-up]

(Thursday 12/12) Heap Manager Assignment Due (at 9:00PM)

Winter Break: 12/14 - 1/5

(Monday - Sunday) Winter Break

Reading Period: 1/6 - 1/14

(Monday - Tuesday) Reading Period Office Hours TBA

(Tuesday 1/14) Dean's Date

(Tuesday 1/14) Unix Shell Assignment Due (at 5:00PM)

Final Exam Period: 1/15 - 1/25

(TBA ) Final Exam Period Office Hours TBA

(TBA) Final Exam Prep Session, Time: TBA, Location: TBA (Final Exam Preparation Document)

(Thursday 1/23) Final Examination, Time: 7:30PM-10:30PM, Location: McDonnell A01/A02 (Final Exams and Answers from Selected Previous Semesters)

All lecture notes are copyright 2001-2020 by Jaswinder Pal Singh, David August, Vivek Pai, Jennifer Rexford, Kai Li, Andrew W. Appel, Randolph Wang, Thomas Funkhouser, David R. Hanson, Larry Peterson, Aarti Gupta, Szymon Rusinkiewicz and/or Robert M. Dondero, Jr. All precept handouts are copyright 2001-2020 by Robert M. Dondero, Jr. Permission to reproduce these notes for not-for-profit educational purposes is hereby granted. These notes may not be reproduced for commercial purposes without the express written consent of the author.