Fall 2014

Class Information

Professors: Andrew Danner Lecture | Adam Lammert Lab
Office: Sci 247 (Danner) | Sci 270 (Lammert)
Phone: (610) 328-8665 (Danner) | (610) 957-6070 (Lammert)

Time: TR 2:40pm — 3:55pm - Sci Cntr 199
Lab A Time: F 1:15pm — 2:45pm - Sci Cntr 240
Lab B Time: F 3:00pm — 4:30pm - Sci Cntr 240

Text: Computer Systems: A Programmer's Perspective, 2/E (CS:APP2e)
        Bryant and O'Hallaron, Prentice Hall, 2011, ISBN: 0-13-610804-0
        (a copy is on reserve at Cornell Library)

Course Overview:

This course is a broad introduction to computer science that focuses on how a computer works and how programs run on computers. We examine the hardware and software components required to go from a program expressed in a high-level programming language like C or Python to the computer actually running the program. This course takes a bottom-up approach to discovering how a computer works, and introduces parallel and distributed computing with a specific focus on parallelism for multicore and other shared memory systems. Topics include theoretical models of computation, data representation, machine organization, assembly and machine code, memory, I/O, the stack, the operating system, compilers and interpreters, processes and threads, and synchronization. In addition to parallel programming, we will discuss parallel computers and system-level support for parallel computing. Prerequisite: Completion of CS21 or its equivalent.

Goals for the Course:


(This is tentative. It will be updated as we go.)

The course textbook has a very complete and in-depth coverage of topics. Some we will cover in the same amount of detail as the textbook while others we will not cover or will not cover with the same amount of depth. Take a look at Prof. Newhall's tips for reading CS textbooks to help you determine what to focus on and how to get the most out of the assigned readings. I also recommend that you keep your textbook after taking this course. It will be a useful reference for many upper-level CS courses.


Sep 02

Using Unix Session:
7-11pm Sci 240


Chapter 1 (skim) Fri lab

Sep 04

  Lab 1

Sep 09

  Chapter 2.1-2.2 Fri lab

Sep 11

Drop/Add ends (Sep 12)

Lab 2

Sep 16

  Chapter 1.4, 4.2 motherboard fig
  • Von Neuman Architecture
  • Program Execution
  • Computer Fundmentals
Fri lab

Sep 18

  Lab 3

Sep 23

  Chapter 7.1-7.3, 3.1-3.5 (skip 3.5.5)
  • Compilers
  • Machine level Programing
  • Assembly Language
  • Data Movement, Arithmetic/Logic
  • Control Flow
Fri lab

Sep 25


Sep 30

  Chapter 3.6-3.11, 3.15
(skip 3.6.7, 3.8.4, 3.8.5, 3.9.2)
  • Pointers
  • Dynamic memory allocation
Fri lab

Oct 02

  Lab 04

Oct 07

  Chapter 3.6-3.11, 3.15
(skip 3.6.7, 3.8.4, 3.8.5, 3.9.2)
  • Assembly Programing
  • The Stack
  • Functions
  • Arrays, Structs, Pointers
Fri lab

Oct 09

  Lab 5

Oct 14

Fall Break

Oct 16


Oct 21

  Chapt. 1.5-1.7, 6 (skip 6.1.2-6.1.4)
  • Operating Systems
  • Memory Heirarchy
  • Storage
Fri lab

Oct 23

Midterm: Thursday 7:30-9:30pm
room: Sci Cntr 101

Lab 5 (cont.)

Oct 28

  Chapt. 1.5-1.7, 6 (skip 6.1.2-6.1.4)
  • Memory Heirarchy
  • Storage
  • Caching
Fri lab

Oct 30

  Lab 5 (cont.)

Nov 04

  Chapt. 1.7, 8.1-8.5
  • Operating Systems
Fri lab

Nov 06

Last day to declare CR/NC
or withdraw with a "W"
(Nov 07)

Lab 6

Nov 11

  Chapt. 9.1-9.3, 9.9
  • Operating Systems
  • Processes
Fri lab

Nov 13

  Lab 7

Nov 18

  Chapt. 1.7, 1.9, 12
  • Operating Systems
  • Virtual Memory
Fri lab

Nov 20

  Lab 8

Nov 25

  Chapt. 1.7, 1.9, 12
  • Parallel Systems and Programming
  • SMP and Multicore
  • Threads

Nov 27



Dec 02

  Chapt. 12
  • Parallel Systems and Programming
  • Synchronization
  • Deadlock, Race conditions
Fri lab

Dec 04

  Lab 9

Dec 09


Dec 12

Final Exams Begin


Dec 19

Final Exams End


Your overall grade in the course will be determined as follows:
30%Labs and Written Assignments
35%Final exam
30%Midterm exam (TBA)
5%Class Participation and Attendance

CS 31 Ninjas

The CS31 Ninjas are student mentors who will assist me in class and lab, and who run evening study sessions. You are encouraged to participate in Ninja evening study sessions to get friendly assistance on lab assignments and help with preparing for exams.

Weekly Evening Ninja Session: Tuesdays 7-11pm, 240 Sci Center

The CS31 Ninjas:   Greg, Zoe, Brooke, and Ryerson
Ninja Coordinator:   Lauri Courtenay

Weekly Lab Sessions

Weekly lab sessions will be about 1/3 presentation (typically an introduction to the weekly lab assignment and practice learning programming tools for carry out the lab), and about 2/3 for working on the lab assignment. Lab attendence is mandatory and it is expected that you attend the entire lab and that you work on CS31 content during lab.

Most or all labs will be done with a partner. For the first part of the semester you will be assigned a different partner for each lab assignment. Later, I will let you choose your own partner with whom you will work for all remaining assignments. I strongly suggest choosing a partner in your same lab session.

Policy on Lab and Written Assignments

Lab assignments will typically be posted on Thursdays and will be due the following Wednesday evening. You are strongly encouraged to start early and ask questions early if you get stuck. For some assignments you must work individually. For others you must work with a partner.

You may use a maximum of 48 hours over the course of the semester to submit lab assignments after the deadline. If you plan on using this extended time, please let me know via email, but submit your code normally via git (the commit time stamp will be used to determine late hours used). Otherwise, late lab and written assignments will not normally be accepted; however, special exceptions can be made if you contact me well in advance of the deadline (having a lot of work in other classes does not qualify for a special exception). Even if you do not fully complete an assignment, you should submit what you have done to receive partial credit.

Some labs may take a considerable amount of time, so you are strongly encouraged to begin working on assignments well before the due date.

You will submit you assignments electronically using the git version control tools. You may submit your assignment multiple times, and previous versions will be logged, but only the final submission will be graded.

About the CS Labs

I encourage you to work in one of the CS labs when possible (vs. remotely logging in), particularly when working with a partner. The CS labs (rooms 240, 256 and 238) are open 24 hours a day, 7 days a week for you to use for CS course work. With the exception of during times when a class, or a class lab or ninja session is scheduled in 240 or 256, you work in one of the CS labs on your CS course work anytime. The overflow lab (238) is always available. The CS lab resources are for CS course work. Please review the CS Lab Rules and CS User Rules about appropriate use of CS labs.

Accessing the CS labs after hours: Use your ID to gain access to the computer labs at nights and on the weekends. Just wave your ID over the microprox reader next to the lab doors. It should display a green light and beep when unlocked, just push on the door handle to get in (the door knob will not turn). If the green light doesn't go on, then we need to enter your id number into the system. email local-staff@cs.swarthmore.edu if you have problems with this. If the building is locked, you can use your ID to enter the door between Martin and Cornell library.

Tips for Success

Academic Integrity

Academic honesty is required in all your work. Under no circumstances may you hand in work done with (or by) someone else under your own name. Your code should never be shared with anyone; you may not examine or use code belonging to someone else, nor may you let anyone else look at or make a copy of your code. This includes, but is not limited to, obtaining solutions from students who previously took the course or code that can be found online. You may not share solutions after the due date of the assignment.

Discussing ideas and approaches to problems with others on a general level is fine (in fact, we encourage you to discuss general strategies with each other), but you should never read anyone else's code or let anyone else read your code. All code you submit must be your own with the following permissible exceptions: code distributed in class, code found in the course text book, and code worked on with an assigned partner. In these cases, you should always include detailed comments that indicates on which parts of the assignment you received help, and what your sources were.

Failure to abide by these rules constitutes academic dishonesty and will lead to a hearing of the College Judiciary Committee. According to the Faculty Handbook: "Because plagiarism is considered to be so serious a transgression, it is the opinion of the faculty that for the first offense, failure in the course and, as appropriate, suspension for a semester or deprivation of the degree in that year is suitable; for a second offense, the penalty should normally be expulsion."

Please contact me if you have any questions about what is permissible in this course.

Accommodations Statement

If you believe that you need accommodations for a disability, please contact Leslie Hempling in the Office of Student Disability Services (Parrish 130) or (e-mail lhempli1@swarthmore.edu) to set up an appointment to discuss your needs. Leslie Hempling is responsible for reviewing and approving disability-related accommodation requests. As appropriate, she will issue students with documented disabilities an Accommodation Authorization Letter. Since accommodations require early planning and are not retroactive, please contact her as soon as possible. For details about the Student Disabilities Service and the accommodations process, visit the Disability Services website. You are also welcome to contact me privately to discuss your academic needs. However, all disability-related accommodations must be arranged through Leslie Hempling in the Office Of Student Disability Services.

Below are some resources and links that may be helpful to you.