CS 240 Fall 2019
Foundations of Computer Systems1

What is CS 240?

CS 240 examines how computers run programs, introducing key abstractions and implementations in software and hardware between programming languages and transistors.


Course goals include:

  • To understand how programs are executed by computers.
  • To understand the roles of key software and hardware abstractions, their implementations, and their relation through translation and representation, including: digital logic, microarchitecture, instruction set architecture, basics of programming language implementations, and operating system abstractions.
  • To understand when and how computer system implementation impacts correctness or performance of arbitrary high-level programs.
  • To become proficient in structured reasoning about the execution of programs on well-defined models, including the use of assertions and debugging tools to inspect program invariants and execution state.
  • To develop foundations for further study of programming language implementation, security, computer architecture, operating systems, networks, concurrent and distributed systems, or other systems/implementation topics in computer science.
  • To develop skills for independent learning, critical thinking, and problem-solving as a self-reliant computer scientist.


We explore computer systems in 3 parts. The course home page hosts the working schedule.

Computer hardware implementation (4-5 weeks): from transistors to a simple computer processor architecture

  • Transistors, digital logic gates
  • Data representation with bits
  • Combinational logic, logic for arithmetic
  • Sequential (stateful) logic, memory implementation
  • A simple computer processor and instruction set architecture

Hardware-software interface (4-5 weeks): from C to instruction set architecture

  • Memory addressing, C language, pointers
  • Assertions, debugging
  • Machine code, assembly language, program translation, x86
  • Control flow
  • Procedures, call stack
  • Data layout, security, linking and loading

Abstractions for practical systems (4-5 weeks): from memory hierarchy to operating systems and beyond

  • Memory hierarchy, caches
  • Operating system support, processes
  • Virtual memory, memory management
  • Compilers, run-time systems, Java

When Should You Take CS 240?

Prerequisite: One of CS 111, CS 112, or permission of the instructor is required to enroll in CS 240. CS 230 is recommended.


  • Take CS 230 before CS 240 for the smoothest path into the core CS curriculum. CS 240 is accessible to motivated students without CS 230 who have a strong grasp of the material in CS 111 or CS 112. CS 240 demands significantly more independence than CS 230.

    One way to understand the relation between CS 230 and CS 240 is by understanding that CS 230 would better be numbered CS 130. CS 230 is the final course in the introductory sequence that prepares you to take core CS courses. CS 240 is a core course. CS 240 happens not to depend on familiarity with concepts from CS 230 (although such familiarity does make CS 240 more rewarding). However, CS 240 does assume the level of independence and maturity in CS-style reasoning and in programming that is an intended outcome of CS 230. Most students will develop this readiness during CS 230; some may get there during CS 111.

  • Consider your semester courseload carefully. Do not take CS 240 as part of a 5-course load. CS 240 is a 1.25-credit lab course that requires a larger time commitment and workload than 1-credit courses.

Please talk to the instructors if you have any questions or concerns or if you are considering credit/non grading. We are happy to work with you to make your time in CS 240 most effective and rewarding for you.


The CS 240 Fall 2019 website and email list carry schedule, materials, and timely announcements.

Class Meetings

  • Tuesday/Friday 8:30am - 9:45am, SCI E101, Andy Davis
  • Tuesday/Friday 9:55am - 11:10am, SCI E101, Andy Davis

Please silence and stow phones out of sight during class meetings. Take handwritten notes in class; it tends to help distill and remember key ideas more effectively than referring back to prepared material or typed notes. If you feel strongly that a laptop or tablet works better for your notetaking, you may use it for that purpose. We are happy to help arrange alternative accommodations in class if needed.

Lab Meetings

Lab attendance is required. Lab policies are enumerated on the lab web page.

Staff and Hours

You may contact all staff (instructors and tutors) at once by emailing cs240f19-staff@wellesley.edu. Contact individual staff by their @wellesley.edu address below.

Regular hours are listed in this table. Temporary changes will be announced on the course email list and noted in the drop-in hours Google calendar, but not this table.

Name Contact Locale ? Drop-in Hours (gcal, .ics)
Class Instructor Andy Davis adavis15 SCI E116 (Office Hours in L037) Tues: 3:30-5:30, Wed: 2:00-4:00, Fri: 1:00-3:00
Lab Instructor Jean Herbst jherbst SCI E112 (Office Hours in L037) Tues: 12:30 - 2:00, Thurs: 3:30 - 5:00
Tutors Lauren Luo, Nicole Li full class email SCI L037 Sun/Tues: 7:00 - 9:00PM, Mon/Thurs: 8:00 - 10:00PM
Classmates CS 240 Fall 2019 full class email SCI L037, around campus by appointment

Course Materials

All in-class materials and assignments are linked from the calendar on the course website. Lab materials are shared electronically ahead of each lab meeting. You should acquire the primary CSAPP 3e textbook if at all possible. All other materials are provided.


At least one copy of each text is available in the SCI L037 for use within the CS department area. Please do not remove them from the lab areas. Return them to the shelf when you are done.

We use one primary textbook extensively. You should acquire a copy if possible:

  • CSAPP 3e: SCI L037 lab has 2 copies
    Computer Systems: A Programmer’s Perspective, 3/E. (3rd edition, significant changes since 2nd)
    Bryant and O’Hallaron, Pearson, 2016. ISBN-13: 9780134092669.
    You need the 3rd edition. See the errata.
    “Global” 3rd editions mostly work, but have some additional errors (not listed on that page).

We provide other textbooks used briefly during the first 1/3 of the course:

We recommend a good reference on the C programming language. There are many online resources of various quality. One classic book is:


Parts of this course draw on material by the CSAPP authors at Carnegie Mellon University, adaptations of this material for CSE 351 at the University of Washington, material on digital logic and microarchitecture from past iterations of CS 240 by Randy Shull, and some updates to the current flavor of CS 240 by Ashley DeFlumere. Some parts of the Honor Code guidelines are adapted from the Williams College Computer Science Department Honor Code Guidelines.

Course Work

topic lab pencil code exam

Course work for CS 240 consists of reading and class exercises, laboratory exercises, assignments, and exams. The Honor Code applies to CS 240 course work as defined below.

Reading and class exercises: Each topic on the course schedule includes reading to try before class and review after class. Class meetings and group exercises assume cursory familiarity with basic ideas from assigned readings, but not deep understanding. Effective technical reading is an acquired skill. The first reading assignment includes tips on how to read.

Lab (15%): Weekly 3-hour lab meetings apply concepts in the course and launch code assignments. Attendance is required at all lab meetings. The lab experience is key to the course. Full lab policies are listed on the lab page. Lab work includes:

  • Short pre-lab assignments to prepare for each lab meeting.
  • Lab reports written during lab activities.

Assignments (50%): The heart of CS 240 is a series of challenging assignments that apply computer systems concepts in hardware and software.

  • Written pencil assignments explore concepts in the small.
  • Applied code assignments run 1-2 weeks and involve significant effort on programming, reverse engineering, and debugging.

Exams (35%): Take-home exams, marked on the calendar, are available for time windows that are much larger than the expected completion time. The exams cover:

  1. exam computer hardware implementation
  2. exam the hardware-software interface plus memory hierarchy and cache


Percentage Letter
> 95.0 A
≥ 90.0 ≥ A-
> 86.6 ≥ B+
> 83.3 ≥ B
≥ 80.0 ≥ B-
> 76.6 ≥ C+
> 73.3 ≥ C
≥ 70.0 ≥ C-
≥ 60.0 ≥ D
< 60.0 F

Course grade derivation: Within each category of course work, individual units are weighted according to their labeled point value. Course grades are computed by weighting overall lab, assignment, and exam grades by the factors shown above. Course grade percentages are converted to letters as shown in the accompanying table. The minimum percentage required to achieve a given letter grade may be adjusted downward (only to students’ benefit), but never upward. If your percentage grade satisfies the constraint in the left column, then your letter grade will satisfy the constraint in the right column of the same row. Each student’s grade is determined independently without consideration of other students’ grades.

Recall that the minimum grade to earn credit under credit/no credit grading is C. The minimum grade to pass and earn credit under normal letter grading is D.

Anonymous grading: CS 240 staff make a best effort to grade assignments and exams anonymously, meaning that the student’s identity is hidden from the course staff during grading and used only to attach the final unadjusted grade to the student’s record. Anonymous grading improves consistency and fairness while making clear that the course staff is grading your work, not you.

Red tape: This course complies with the Wellesley College grading policy. While that policy asks faculty to hold each 100- and 200-level course with 10 or more students to an average of no higher than 3.33 (B+), it does not require faculty to grade on a “curve.” There is no arbitrary limit on the number of A’s, B’s, C’s etc., and every student will be assigned the grade they earn and deserve according to the grading standards of the college.

In practice, the college grade policy has no effect on CS 240 grades. CS 240 uses a pure function to compute each student’s grade based only on that student’s course work, with no “curve,” even in the unexpected event that the overall class average exceeds the legislated cap.

Late Policy

Assignments are due at the date and time specified in the assignment manifest. Each student is allotted a budget of 5 × 24-hour late passes to adjust assignment deadlines within the semester.

  • Each late pass may be applied to delay one assignment deadline for the owning student by 24 hours within the semester.
  • All weekends and scheduled multi-day breaks are charged against your late pass budget as if they are exactly 24 hours long.
    • A late pass applied to a deadline on the day before a regular weekend or scheduled break extends that deadline to the same time on the last day of that weekend or break.
    • Breaks are defined as Fall Break, Thanksgiving Break, Presidents Day weekend, Spring Break, and Patriots Day (Marathon Monday) weekend. Neither reading period nor exam period is considered a break.2
  • IMPORTANT: You may not use late passes on Pensieve Processing or Cache Divination. There will be a 24-hour turnaround on the grading of those assignments such that students have adequate time to review their grades before the exam.
  • To apply one or more late passes to an assignment, submit your work by the appropriately extended deadline, then notify the instructor by email.
  • No work is accepted past the end of final exam period, regardless of available late passes.
  • Late passes are not transferable, reusable, or divisible.
  • Late passes are void on lab work and exams.

After your late pass budget is exhausted, each additional 24-hour delay in assignment submission is assessed a late penalty that subtracts 10% of the maximum assignment grade from your awarded grade on that assignment. Individual assignment grades bottom out at 0. Late work is never penalized with a negative assignment grade.

To delay a pair assignment deadline, both partners must apply a late pass (or penalty) of their own for each 24-hour period. If only one partner has a late pass available, the partner without the pass is assessed a late penalty. This does not affect the grade of the partner that uses a late pass.

Consult your instructor and class dean for alternative arrangements in case of extenuating circumstances.

Honor Code

The Wellesley Honor Code applies to CS 240, including through CS 240-specific policies for acceptable resources (collaboration, assistance, and reference) in course work. The general spirit of these policies should not be surprising, but the details are key to boosting the quality of your learning and maintaining a fair and rigorous academic environment for you and your classmates.

In summary:

  • Ungraded practice activities support initial learning, so they are free of restrictions. topic
  • Graded assignments support deeper learning and independence, so they require that your submitted work be your own, following one of two policies for acceptable resources:
    • Graded practice assignments help you cement the basics and learn relevant tools, so they permit relatively broad resources. lab
    • Graded synthesis assignments require you to think critically and make connections to formulate logic and implement solutions independently, so they restrict acceptable resources significantly. pencil code
  • Graded examinations measure your independent mastery of concepts, so they require that your submitted work be your own, without using any resources. exam

Full definitions are linked from the summary and appear below. Please read the entire policy. If in doubt about details, please ask for clarification. Violations of these policies are handled through the appropriate Honor Code charge or resolution processes.

Ungraded Practice Activities topic

Types: reading, study, class exercises

Policy: You may collaborate, receive and provide assistance, and consult reference without restriction.

Graded Assignments lab pencil code

Types: graded practice assignments, graded synthesis assignments


  • A team works as one to complete and submit one assignment solution. A team is an individual or a pair, determined by the assignment’s designated team policy.
  • Your team’s submitted solutions must be your team’s own work.
  • You must not divide work among people (within or across teams) to complete separate parts and combine the solutions.
  • Your submissions must cite all collaboration, assistance, and reference (excluding course materials and reference linked from the course website) that your team used to prepare your submission. List each person or resource with a short phrase identifying the topic or nature of collaboration, assistance, or reference.

Team Policy

Each graded assignment follows one of two team policies. Graded synthesis assignments indicate their policy in the assignment manifest.

  • The individual policy requires individual students to prepare and submit their own solutions.
  • The pair policy allows two students to prepare and submit a single joint solution.
    • Individuals may opt to complete an individual submission on pair assignments unless pairs are explicitly required.
    • Partners choosing a pair submission must contribute in similar measure and complete at least 80% of work on each problem together in real-time pair-programming style. Collaboration within a pair is otherwise unrestricted.
    • If it becomes necessary to split a pair, the partners must coordinate with the instructor to document what work was completed together.

Graded Practice Assignments lab

Types: individual pre-lab assignments, pair lab activity reports


  • All parts of the general graded assignment policy apply.
  • You may collaborate with other CS 240 Fall 2019 students, including to develop solutions together, if collaborators participate in roughly similar measure.
  • You may provide and use assistance or reference in accordance with the above policies without further restriction unless otherwise noted on the assignment.

Graded Synthesis Assignments pencil code

Types: written pencil assignments, applied code assignments


  • All parts of the general graded assignment policy apply.
  • Collaboration:
    • You may discuss high-level ideas or strategies with other teams in small groups.
    • You must not communicate detailed algorithms, implementations, code, formulae, or other detailed solution steps with other teams.
    • You must not, under any circumstances, view, share, prepare, or accept written solutions or assignment code outside your team.
  • Assistance:
    • You may accept help from course staff to locate errors, interpret error messages, and correct errors of syntax.
    • You may accept help from other CS 240 Fall 2019 students to interpret error messages, subject to the above policy on viewing code.
  • Reference:
    • You may consult course material from CS 240 Fall 2019 and external documentation of required tools.
    • You may consult external reference resources for general concepts and techniques, provided you cite them.
    • You must not consult solutions to this or any similar assignment.
    • Code reuse and adaptation:
      • You may reuse and adapt provided starter code in your solution without restriction.
      • You may reuse and adapt code from other course materials only with prior written approval from the instructor and explicit attribution of the source.
      • You must not reuse or adapt any other code.

Rules of thumb for collaborating outside your team on graded synthesis assignments:

You are welcome to discuss high-level ideas and strategies with other teams, as allowed by the policy above. If taking notes on these discussions, keep your notes general (no verbatim copies, photographs, detailed descriptions). Remember, you may not write solutions together, so later, write full solutions on your own, referring to your notes only if needed.

  • Wait at least 30 minutes after discussions outside your team before writing your solutions. This helps you know whether you actually understand the solutions (and their derivation) yourself.
  • If writing your solution is effectively making a verbatim copy of – or following a set of explicit directions in – your notes from discussion with others, then your notes or your discussion are too detailed.

After the semester:

Some students students may wish to include work from CS 240 in portfolios, resumes, etc. Please do not post code publicly (including on GitHub, GitLab, Bitbucket, your own website, etc.), but feel free to show your code privately to potential employers or others who are not students. Do not make your code accessible or viewable by current or future CS 240 students.

Graded Examinations exam

Types: in-class exams, take-home exams


  • Your submitted solutions must be your own work.
  • You must not provide or use any collaboration, assistance, or reference external to the exam document between receiving and submitting the exam unless explicitly stated by the exam document itself.
  • You must not communicate about the exam contents with anyone other than the CS 240 Fall 2019 instructors until given permission by a CS 240 Fall 2019 instructor.

The CS 240 Compact

Challenging Assignments: We study concepts in core systems design and implementation by applying them in assignments that often require hands-on work with real computer systems. CS 240 labs and preparatory exercises familiarize you with relevant concepts and tools at a small scale, but completing an assignment requires deeper investment in learning, critical thinking, and the time for both. Powering through assignments on the due date rarely works well.

Real computer systems are often large and complicated, even if founded on simple or elegant principles. Likewise, CS 240 assignments are structured, but typically require some independent exploration, experimentation, and critical thinking to complete. Mindlessly following exhaustive instructions is a job for computers. The job of a computer scientist is to think critically and learn how to construct or apply new ideas and tools. The solutions themselves are never as important as the insights you gain in the process of finding solutions and understanding their context. CS 240 code assignments require you to read and reason about specifications, apply concepts from class, learn something new beyond what was covered in class, consult documentation, think critically about design choices, synthesize plans for implementation, implement your designs, evaluate or debug the results, and explain your approach. It might be messy; it is all important.

Intellectual Independence and Self-Reliance: A core goal of CS 240 is to develop independence, confidence, and self-reliance as a learner, critical thinker, and computer scientist. We expect you to take charge of your learning and embrace an exploratory, self-reliant approach to experience the reward of accomplishing large problem-solving tasks under your own power. In return, enthusiasm, determination, careful preparation, and a “can do, figure it out” attitude on your part are rewarded with enthusiastic support from us. The CS 240 staff are always happy to help you learn to find your own strategies to solve problems.

Academic Support

There are several types of academic support available outside of regular class and lab meetings:

  • Regular drop-in hours with tutors:
    • Concept practice sessions support additional practice with concepts learned in lecture and lab. Tutors offer practice exercises (including lab assignments, preparatory exercises for code assignments, and other materials) for group or individual problem-solving, answer conceptual questions, and in general support you in firming up your understanding of foundations. Tutors do not assist with questions on assignments during concept practice sessions.
    • Open drop-in hours support questions on assignments (or concepts).
  • Regular drop-in hours or scheduled appointments with instructors support questions on assignments, concepts, course logistics, random chats, or anything else. (Email or catch us after class to schedule an appointment outside drop-in hours.)
  • Questions, studying, or group work with your classmates, subject to the honor code.
  • Individual tutoring through the PLTC.

We ask you questions. The CS 240 staff genuinely enjoys helping you learn, whether in class or 1-on-1, especially when we can help you learn independently. We often answer your questions by asking you more questions to help you construct your own path forward. While this may feel less expedient in the short term, we find it more effective (and expedient) in the long term, since you learn a broader thought process rather than just an answer to one question.

Preparation is your ticket to assistance. In general, we expect you to make a genuine effort to answer your own question before asking for help on an assignment. It is rarely wise to spend hours stumped on a single issue before asking for help, but at least a few minutes of common sense exploration often nets effective results or at least helps focus your question. Compiler error message? Try looking it up in the assignment, associated tool documentation, or a web search to understand the error. Crashing program? Try to employ debugging strategies and tools listed in the assignment to make progress toward understanding the cause.

Each code assignment includes a required preparatory exercise to help understand foundations for the assignment. Weekly lab activities often spend time on these exercises. To promote independence and to help make the best use of everyone’s time, we require that you complete this preparation before asking instructors or tutors for assistance with the main assignment tasks. We are happy to answer questions about the preparation itself, but we will defer questions on core assignment tasks until your preparation is complete.

Levels of support. Tutors and instructors provide different levels of support for different parts of assignments. Preparatory exercises enjoy broad support. The staff will answer questions and provide assistance on the main part of assignments in accordance with principles in the honor code definitions. Some parts of assignments may be marked [Independent]: these are parts that you must complete without any assistance from tutors or instructors beyond answers to clarifying questions.


The instructors are always open to considering your comments, suggestions, or concerns about the course or how we can make it more accessible to you. Please feel free to speak with us, send email, or use the anonymous feedback form if you would prefer.


If you have a disability or condition, either long-term or temporary, and need reasonable academic adjustments in this course, please contact Disability Services to get a letter outlining your accommodation needs, and submit that letter to me. You should request accommodations as early as possible in the semester, or before the semester begins, since some situations can require significant time for review and accommodation design. If you need immediate accommodations, please arrange to meet with me as soon as possible. If you are unsure but suspect you may have an undocumented need for accommodations, you are encouraged to contact Disability Services. They can provide assistance including screening and referral for assessments. Disability Services can be reached at disabilityservices@wellesley.edu, at 781-283-2434, by scheduling an appointment online at their website https://www.wellesley.edu/disability, or by visiting their offices on the 3rd floor of Clapp Library, rooms 316 and 315.

Students whose religious observances conflict with scheduled course events (e.g., labs, exams, etc.) should contact the instructors in advance to discuss alternative arrangements. You may do this through the new Wellesley College Religious Observance Notification system if you prefer.

How to Succeed

A compilation of tips from CS 240 staff and students. Have more? Let us know.

  • Embrace the CS 240 compact and our approach to offering support.
  • Read before class. It is fine if you do not understand all of the reading, but seeing it early lets you ask better questions in class and hit the ground running in class exercises.
  • Do not worry about being wrong in class. Students are often uncomfortable offering answers or suggestions in class for fear of peer judgment if they are wrong. First of all, there are far fewer questions with a single right answer (or even a clear binary right/wrong classification of answers) in this course than students expect. Second, we are learning! “Being wrong” is normal and often more useful in class than “being right.” The best answer is a thoughtful answer. We have more opportunity to learn if asking questions you cannot necessarily answer easily. Better to share a “wrong” answer and explore the question’s complexities while fixing the answer together than to keep that “wrong” answer to yourself for use on an exam. We will make mistakes at least a few times in class (only occasionally on purpose). Join us – it’s fun! (Third, we do not tolerate students criticizing other students for being wrong in class.)
  • Take notes in class. The slides can be useful, but they are just a prop. The most useful and interesting insights happen in exercises and other discussion. Writing down your solutions (and your approach!) is great reference for review later.
  • Ask questions in class, in office hours, in tutor hours, in lab, of your classmates or on the email list (but first, read the Honor Code definitions). The knowledge will not come to you. Go get it. We will often answer your questions with more questions.
  • Read the instructions on assignments and understand the specifications. There is often good advice about how to approach the problem most effectively.
  • Work incrementally. As you work through an assignment (after you understand it), think and plan before you ever write any code or build any circuit. Writing code before planning and writing one big pile of code before testing are two sure routes to disaster. Plan carefully before you ever touch the keyboard. Write pseudocode. Draw diagrams. When you are ready to write code, do it incrementally. Write a small piece. Write assertions to document your assumptions. Test it. Does it work? No? Repeat until it does. Now, commit it so you can get back to this point if things go wrong later. Then, write the next small piece, and so on. Step back occasionally and consider if you are still on track for your plan. Does it need adjustment?
  • Read specifications carefully and think critically about how best to implement them.
  • Consult documentation to learn about relevant tools and library functions.
  • Experiment to try out potential ideas.
  • Start assignments early and meet the checkpoints. (Really, early! Really early. Ask any CS 240 alum.) Before you can “just finish” the assignment, you will need time to absorb the task, understand how to approach it, plan, take a break when you get stuck (time away from a problem almost always helps), debug, ask questions, and more. Some of the assignments are big or complicated. The checkpoints will help you keep on pace to finish comfortably.
  • Come to class and lab. One or the other leads directly into the next assignment. We do useful and fun things. If you do not think so, then let us know! (Oh, and lab counts toward your grade.)
  • Work in the lab space. Tackling challenging assignments next to your classmates builds camaraderie, reminds you that everyone has to work hard on these assignments, eases sharing of tips and techniques, and affords opportunities for collaborative silliness.
  • General tips from PLTC / Academic Peer Tutoring:

Faculty Responsibilities on Disclosures of Discrimination, Harassment, and Sexual Misconduct

Pursuant to Wellesley College policy, all employees, including faculty, are considered responsible employees. That means that any disclosure of discrimination, harassment, or sexual misconduct to a faculty member will need to be shared with the College’s Director of Non-Discrimination Initiatives / Title IX and ADA / Section 504 Coordinator, Sonia Jurado (781-283-2451; sjurado@wellesley.edu). Students who do not wish to have these issues disclosed to the College should speak with confidential resources who are the only offices at the College that do not have this same reporting obligation. On campus, confidential resources include Health Services (781-283-2810 available 24/7), the Stone Center Counseling Services (781-283-2839 available 24/7) and the Office of Religious and Spiritual Life (781-283-2685). You should assume that any person employed on campus outside of these three confidential offices has an obligation to share information with Wellesley College through the Office of Non-Discrimination Initiatives.

  1. In the past, this course was named Introduction to Machine Organization and in some semesters unofficially titled Introduction to Computer Systems

  2. Neither Tanner nor Ruhlman conferences are considered breaks, but the distinction is moot anyway, since collapsing a single day to 24 hours offers no accounting benefit.