CS 31: Introduction to Computer Systems — Spring 2020

Announcements

All course announcements will be on Piazza.

The class is transitioning to online instruction. Please refer to this page for details of the transition and FAQs.

Class Info

Office hours:

Vasanta

SCI 252D

Tuesdays 2:45 - 4 PM

Fridays 11 - 2 PM

Scout

SCI 262A

Mondays 12 - 2 PM

Thursdays 11 - 12:30 PM

Weekly Lab Sessions

Lab Section A

Vasanta

Wednesday 8:50 - 10:20

SCI 240

Lab Section B

Scout

Wednesday 1:15 - 2:45

SCI 240

Lab Section C

Scout

Wednesday 3:00 - 4:30

SCI 240

The CS 31 Ninjas: Fefa, Greg, Karin, Tiffany
Ninja Session Times: Please bring your lab worksheets to Ninja sessions!

Saturdays 1 - 3 PM

SCI 256

Sundays 7 - 9 PM

SCI 256

Required Materials

  • iClicker: This course uses iclicker devices to facilitate feedback and discussion during class. For many intermediate and upper level CS courses including CS 31, we require that students purchase their own clicker for personal use. Clickers may be purchased at the college bookstore or online. Please register your clicker online as soon as possible! Even if you have used clickers in other CS courses, you still need to register your clicker for use in this courses.

  • Textbook: This semester all readings will come from the beta release version a free, on-line text book written by two Swarthmore CS professors and a professor from West Point: Dive into Systems by Matthews, Newhall, and Webb.

Optional Materials

Course Overview, Goals, and Structure

Welcome to CS31! This course is a broad introduction to computer science that focuses on how a computer actually works and how programs run on computers. We will examine how a program written in a high-level programming language like C or Python, is expressed as a series of instructions to a computer and the hardware and software components involved in doing so.

Topics we will cover in this course 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:

  • To understand how a sequential or parallel program goes from being expressed in a high-level programming language to being run on the underlying system.

  • To understand and analyze the system costs associated with application performance.

  • To understand the role of the operating system and some of the abstractions it implements to support efficiently running programs.

  • To understand shared memory parallel computing and to be able to "think in parallel" algorithmically.

  • To become proficient in using gdb and valgrind to debug and examine program execution state.

  • To design and implement solutions to large problems using the C programming language.

  • To design and implement parallel solutions to programming problems that require synchronization using pthreads.

Class Structure

  • Readings: Shorter readings serve as a first exposure to new topics, where students learn the basics of the material. These should be read prior to the class meeting for which they are assigned. The reading quizzes are primarily based on these readings. Full required weekly readings complement lecture content. See tips for reading textooks for how to read these.

  • Class meetings: The classroom material will cover the course concepts in depth, and include activites to practice applying concepts learned, and to facilitate student discussion.

  • Exams: There is a midterm exam and a final exam (both closed-book) covering the material in the class meetings (and to a lesser extent on some labs). Some reference materials will be provided with the exams.

  • Labs: There are several lab programming assignments (mostly in C) that will explore various aspects of computer systems.

  • Reading Quizzes: Most class meetings there will be a short quiz primarily based on the shorter assigned readings.

  • Written Homeworks: There are several written homework assignments. Written homeworks are on based on class material and provide good practice for exams.

Schedule

This is a tentative schedule; it may change as we go. You should read the assigned sections before class to prepare for the reading quiz. Read tips for reading CS textbooks to help you determine what to focus on and how to get the most out of required readings.

Note: the textbook requires a user name and password to access. These are posted to the class piazza page.

WEEK   DATE   ANNOUNCEMENTS TOPIC & READING LABS/HOMEWORKS
1

Jan 21

 

Topics

  • Introduction to Systems
  • Data Representation
  • Program Execution

Class Slides

Required Reading

Wednesday Lab

Wed Lab: C basics, gdb, git

Assignments

Lab 0: unix, vim, github, piazza
Lab 1: binary represenation/ops

Jan 23

 
2

Jan 28

 

Topics

  • Data Representation
  • Intro to C

Class Slides

Required Reading

Wednesday Lab Reading

Wednesday Lab

Wed Lab: C, arrays, scanf, gdb

Assignments

Lab 2: C programming
Written HW: HW 1

Jan 30

 
3

Feb 04

 

Topics

  • Program Execution
  • Computer Fundamentals: gates, circuits, machine architecture
  • Assembly Instructions

Class Slides

Required Reading

Wednesday Lab

Wed Lab: Logisim

Assignments

Lab 3: Circuits/ALU
Written HW: HW 2

Feb 06

 
4

Feb 11

 

Topics

  • Compilers
  • Assembly Language Programming

Class Slides

Required Reading

Wednesday Lab Reading

Wednesday Lab

Wed Lab: IA32,teardown

Assignments

Lab 3 (cont): ALU
Written HW: HW 3

Feb 13

 
5

Feb 18

 

Topics

  • Data Movement and Control Flow
  • Addressing Modes and Pointers
  • C Pointers and Dynamic Memory Allocation

Class Slides

Required Reading

Wednesday Lab Reading

Wednesday Lab

Wed Lab gdb, valgrind, writing IA32

Assignments

Lab 4: C Pointers, IA32
Written HW: No Written HW

Feb 20

 
6

Feb 25

 

Topics

  • C Pointers and Dynamic Memory Allocation
  • Data movement and the Stack
  • Functions and the Stack

Class Slides

Required Reading

Wednesday Lab Reading

Wednesday Lab

Wed Lab tools for examining binary files

Assignments

Lab 5: maze
Written HW: HW 4

Feb 27

 
7

Mar 03

 

Topics

  • Functions and the stack
  • Assembly Programming: Arrays and Structs
  • Memory Efficiency: Data Structure Alignment

Class Slides

Required Reading

Wednesday Lab

Wed Lab gdb/ddd for binary files, man

Assignments

Lab 5: maze lab cont.
Written HW: [Continuation of HW4]

Mar 05

 
 

Mar 10

Spring Break

Mar 12

Mar 17

Mar 19

8

Mar 23

Transition to Online Instruction

Mar 24

 

Topics

  • Arrays and Structures
  • Memory alignment

Class Slides

Required Reading

  • Tuesday: 2.5, 2.7
    Skip arrays of structs and self-referential structs.
  • Thursday: 7.1, 7.2

Assignments

Lab 6: GOL
Written HW: HW 5

Mar 26

 
9

Mar 31

 

Topics

  • Memory Efficiency: Caching

Class Slides

Required Reading

Apr 02

 
10

Apr 07

 

Topics

  • Caching

Class Slides

Required Reading

Assignments

Lab 7: Shell Lab Part 1: Parse Commandline Library
Written HW HW 6

Apr 09

Advising Week Begins (Apr 13)

11

Apr 14

 

Topics

  • OS Abstractions

Class Slides

Required Reading

  • Tuesday, Thursday: 9, 9.1

Assignments

Lab 7: Shell Lab Part 2: Writing a Shell
Written HW: HW 7

Apr 16

 
12

Apr 21

 

Topics

  • Parallel Programming
  • Threading
  • Synchronization

Class Slides

Required Reading

Assignments

Lab 9: Parallel GOL (We are skipping Lab8)
Written HW HW 8
Written HW HW 9

Apr 23

 
13

Apr 28

 

Topics

  • OS Abstraction: Virtual Memory

Class Slides

Required Reading

Apr 30

Extended Drop Deadline (May 01)

Grading

Grades will be weighted as follows:

35%

Labs and written homework assignments

30%

Final Exam

25%

Midterm Exam

5%

Class Participation

5%

Reading Quizes

CS31 Labs

Wednesday Lab Sessions

Wedensday 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. Weekly lab attendance is mandatory and it is expected that you attend the entire lab and that you work on CS31 content during lab.

All lab assignments except Lab 1 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, we will let you choose your own partner with whom you will work for all remaining assignments.

About the CS Labs

We 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, 238 and Clother basement) are open 24 hours a day, 7 days a week for you to use for CS course work. With the exception of times when a class, or lab, or ninja session is scheduled in one of these rooms, you may work anytime in a CS lab on CS course work. The overflow lab (238) is always available.

CS lab machines are for CS course work only. There are other computer lab/locations on campus that are for general-purpose computer use. Please review the CS Lab Rules about appropriate use of CS labs.

Accessing the CS labs after hours

You can use your ID to gain access to the computer labs at nights and on the weekends. Just wave your ID over the onecard reader next to the lab doors. When the green light goes on, just push on the door handle to get in (the door knob will not turn). If you have issues with the door locks, send an email to local-staff@cs.swarthmore.edu. If the building is locked, you can use your ID to enter the door between Martin and Cornell library. For this class, your ID will give you access to the labs in rooms SCI 238, 240, 256, and the Clothier basement.

CS31 Lab assignments

Lab assignments will typically be posted on Wednesdays and will be due the following Tuesday evening. You are strongly encouraged to start early, attend the ninja session, and ask questions early if you get stuck (piazza, office hours, ninja sessions). For some assignments you will work individually. For others you must work with a partner.

We will use Swarthmore’s GitHub Enterprise for managing each lab assignment. You will submit your lab solutions electronically using git. You must do a git add, commit, and push before the due date to submit your solution on time. You may push your assignment multiple times, and a history of previous submissions will be saved. You are encouraged to push your work regularly.

Working with Partners

For partnered lab assignments, you should follow these guidelines:

  • The expectation is that you and your partner are working together side by side in the lab for most, if not all, of the time you work on partnered lab assignments.

  • You and your partner should work on all aspects of the project together: initial top-down design, incremental testing and debugging, and final testing and code review.

  • If you are pair programming, where one of you types and one of you watches and assists, then you should swap roles periodically, taking turns doing each part.

  • There may be short periods of time where you each go off and implement some small part independently. However, you should frequently come back together, talk through your changes, push and pull each other’s code from the git repository, and test your merged code together.

  • You should not delete or significantly alter code written by your partner when he or she is not present. If there is a problem in the code, then meet together to resolve it.

  • If there is any issue with the partnership, please contact the professor.

To do well on labs, we highly recommend the following:

  1. starting early

  2. working on your lab design on paper

  3. incrementally developing your solutions.

While these steps may seem like a waste of time, this will save you a lot of time in the long run, by reducing the chances that you have design or logic errors in your solution. All successful partnerships have had this common trait. You and your partner should work on tracking down bugs early so you can come up with solutions to problems much quicker.

Partnerships where partners work mostly independently rarely work out well and rarely result in complete, correct and robust solutions. Partnerships where partners work side-by-side for all or most of the time tend to work out very well.

You and your partner are both equally responsible for initiating scheduling times when you can meet to work together, and for making time available in your schedule for working together.

CS31 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: Sundays, 7-11pm, SCI 256

  • The CS31 Ninjas: Fefa, Greg, Karin, Tiffany

  • Ninja Coordinator: Lauri Courtenay

Absence / Assignment Extension Policy

To help with cases of minor illnesses, athletic conflicts, or other short-term time limitations, we will drop your three lowest reading quizzes and participation grades. You are still responsible for the material, and you should review any missed materials via the class recordings as soon as you can.

All students start the course with two "late assignment" days to be used on lab assignments at your discretion, with no questions asked. To use your extra time, you must email your professor after you have completed the lab and pushed to your repository. You do not need to inform anyone ahead of time. When you use late time, you should still expect to work on the newly-released lab during the following lab section meeting. The professor will always prioritize answering questions related to the current lab assignment.

Your late days will be counted at the granularity of full days and will be tracked on a per-student (NOT per-partnership) basis. That is, if you turn in an assignment five minutes after the deadline, it counts as using one day. For partnered labs, using a late day counts towards the late days for each partner. In the rare cases in which only one partner has unused late days, that partner’s late days may be used, barring a consistent pattern of abuse.

If you feel that you need an extension on an assignment or that you are unable to attend class for two or more meetings due to a medical condition (e.g., extended illness, concussion, hospitalization) or other emergency, you must contact the dean’s office and your instructors. Faculty will coordinate with the deans to determine and provide the appropriate accommodations. Note that for illnesses, the College’s medical excuse policy, states that you must be seen and diagnosed by the Worth Health Center if you would like them to contact your class dean with corroborating medical information.

Late days cannot be used for any written or in-class assignments that are not associated with a lab assignment.

Academic Accommodations

If you believe you need accommodations for a disability or a chronic medical condition, please contact Student Disability Services (Parrish 113W, 123W) via e-mail at studentdisabilityservices@swarthmore.edu to arrange an appointment to discuss your needs. As appropriate, the office will issue students with documented disabilities or medical conditions a formal Accommodations Letter. Since accommodations require early planning and are not retroactive, please contact Student Disability Services as soon as possible. For details about the accommodations process, visit the Student Disability Service Website.

You are also welcome to contact me privately to discuss your academic needs. However, all disability-related accommodations must be arranged, in advance, through Student Disability Services. To receive an accommodation for a course activity you must have an official Accommodations Letter and you need to meet with me to work out the details of your accommodation at least two weeks prior to any activity requiring accommodations.

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 or make them publicly available anywhere (e.g. public GitHub repository).

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."

The spirit of this policy applies to all course work, including code, homework solutions (e.g., proofs, analysis, written reports), and exams. Please contact me if you have any questions about what is permissible in this course.

Exam Integrity

Students must strictly adhere to the following policy, which applies to all exams taken in a Computer Science course at Swarthmore:

Exam takers must place all non-essential items at the front of the room (or other designated area). Unless otherwise permitted, students may not have any electronic devices or course materials in their possession during the entirety of the exam. This includes cell phones, tablets, laptops, smart watches, course notes, articles and books, among others. These items should be placed at the front of the room near the proctor. If you need to leave the room during the exam, you must obtain permission from an instructor first. Any non-permitted discussion or aide in regards to exam material will result in immediate forfeiture of the exam and a report to the College Judiciary Committee. Please discuss any concerns or accommodations with your instructor prior to starting the exam.

How to Succeed in CS31

  • Attend class and actively participate in class. The primary introduction to course material is through class lecture. Additionally, we often do exercises during class. Showing up is necessary, but not sufficient to success in the course: ask questions, participate in class discussions and in class activities, and take notes.

  • Read the material before you come to class. Don’t worry about total comprehension, but at least get a feel for what we will be covering that week. If you have some understanding of the material coming into class, it will be easier for you to follow the lecture and to ask questions during class. See my tips for reading CS textbooks for guidelines on getting the most out of assigned readings.

  • Start the lab assignments early. I realize this one is not always easy to do, but if you can get in the habit of doing this, you will be much better off. As the labs get longer and more difficult, starting early will give you plenty of time to mull over the lab problems even when you aren’t actively writing your solution.

  • Practice, practice, practice. The only effective way to learn the material and pass the exams is to consistently do the labs and written assignments, and to practice example problems presented in class and in the book. Forming study groups to go over practice problems and to review lecture and reading notes is a great way to prepare for exams.

  • Seek help early and often. Because course material builds on previous material, it is essential to your success in this class that you keep up with the course material. There are a lot of sources of help: ask questions during lecture; ask your classmates (make sure you have read the "Academic Integrity" section below first); get help during lab sessions; come to office hours; use the class piazza page for lab Q and A, and attend ninja study sessions.

  • Attend Study Sessions. The student Ninjas hold evening sessions each week. You are encouraged to participate in these sessions. The Ninjas will provide friendly assistance on your lab assignments and can also help answer questions about in-class exercises.

  • Take hand written lecture notes. In lecture the professor often draws diagrams on the board, some of which you will need to reproduce. Taking notes with paper and pen (vs. on the computer) will allow you to copy these diagrams.