Syllabus
This syllabus is only indicative and subject to change.
Course Description

The term Computer Systems refers to the underlying machinery, both hardware and software, required to run computer applications. Computer Organization is the study of how the various components of Computer Systems fit together and interact. This course will focus in particular on the interaction of computer architecture (high-level hardware design) with compilers and operating systems. Topics to be covered include: data representation; assembly language and assembly-level computer architecture; processor design; performance measurement and optimization; the memory hierarchy; virtual memory and address translation; storage management; and interrupts, signals, and process control. Across all these areas we will focus on design tradeoffs and on implications for system performance.

Goals and Assessment
The goal of this course is to help you become a better programmer by teaching you the basic concepts underlying computer systems. We want you to learn what really happens when your programs run, so that when things go wrong (as they always do) you will have the intellectual tools to solve the problem. This course will also get you prepared to take the upper-level systems classes at URCS, such as CSC 256.

Students who complete this course shall be able to:

  • Explain common bit-level representations of numeric values (unsigned, two’s complement, floating point) and the consequent mathematical properties of arithmetic and bit-level operations on them.
  • Recognize the relation between programs expressed in C and in assembly code, including the implementation of expressions, control, procedures, and data structures.
  • Demonstrate ability to understand basic intention of a program through its binary representation and apply these skills to debugging programs.
  • Analyze the consequences of imperfect system usage, such as poor memory and CPU performance.
  • Understand the sources of conflict that can arise when multiple threads of execution share resources, and demonstrate the ability to use synchronization constructs to mediate those conflicts.
Instructor
Yanan Guo
Email: [yanan.guo at rochester.edu]
Office hours: Thursday 11am-12pm
Office: Wegmans Hall 3403
 
Organization
Getting Help

We will use the class website (https://www.cs.rochester.edu/courses/252/fall2024/index.html) as the central repository for all information about the class, including the course schedule, slides, and lab assignments. For technical (lectures, assignments, exam) or logistics (accounts) questions, post them on Piazza.

  • You can post questions that are visible to everyone; you can choose to remain anonymous to other students (but not to the staff members).
  • You can also post questions that are only visible to you and staff members.
  • You are encouraged to answer questions posted by other students. Staff members will also put post in Piazza answering some common questions. When you have a question, be sure to check the posted questions before contacting a staff member.

If you want to talk to a staff member in person, the posted office hours are the best opportunity, as they represent times when we guarantee that we will be available to meet, either in the location identified or via Zoom. If a meeting is needed outside of the office hours, please use email to arrange a time.

Pre-requisites

This course requires CSC172 and MTH150.

CSC173 and/or experience in C/C++ programming is strongly recommended.

This course requires that you be able to program in C and work in the Unix/Linux environment. Check out the textbook's student website for a wealth of resources on using C, Linux, and GDB.

Assignments and Exams
  • There will be five programming assignments. You can work in pairs (i.e., two people), in which case only one submission is needed.
  • Programming assignments do not overlap with the lecture material. They are not exercises that repeat the lectures. Instead, you use what you learn in the lectures to explore some new stuff on your own, which expands your horizon.
  • Programming assignments will be submitted through the CSUG machines. If you don't have an account yet, get it from this link: https://accounts.csug.rochester.edu/
  • The release and due dates for each programming assignment are available on the course schedule webpage. Assessment standards will be detailed in the assignment descriptions, which will be provided on the respective release days.
  • There will be one in-class midterm and one final exam. Exams are open-book.
Textbooks

The textbook for the course is Bryant and O'Hallaron's Computer Systems: A Programmer's Perspective (3rd edition).

There are several other references that might be helpful to you. None of them is as comprehensive as the required textbook (nor are they intended to be), but will provide a different perspective on certain topics as you go along.
Grading

Final grades will be assigned with these proportions:

  • Programming Assignments: 40%

    There will be five programming assignments, eight (8) points each. You could choose to work in pairs for each programming assignment. There are three slip days that you can allocate to programming assignments throughout the semester. When you use a slip day, it lets you turn in the assignment 24 hours late without penalty. Aside from that, late work will not be accepted and will count for zero points.

  • Midterm Exam: 25%

    The midterm exam will include all the materials up until the second last lecture before the midterm.

  • Final Exam: 35%

    The final exam will include everything (i.e., both before and after the midterm). The final will take place in the ordinary final slot, which hasn't been finalized for this semester yet. The final exam is intentionally proportioned to worth almost twice as much as the midterm. After all, it is what you know in the end that matters the most.

Letter grades will follow Grading Schemes—AS&E. Grades are assigned on an absolute scale. Below is the scale I plan to use, which can change:

Score CSC252 CSC452
>= 92 A A
>= 88 A- A-
>= 84 B+ B+
>= 80 B B
>= 76 B- B-
>= 72 C+ C
>= 68 C D
>= 64 C- E
>= 60 D
< 60 E

Credit-Hour Policy

This course follows the College credit hour policy for four-credit courses. You can find the detailed policy at: https://www.rochester.edu/college/faculty/assets/pdf/credit-hour-policy---10.29.2018.pdf

Attendance Policy

We hope that you will want to attend class (lecture), but attendance is NOT required. However if you choose not to attend, you may miss important announcements or information about the course.

Academic Honesty

Student conduct in CSC 252/452 is governed by the College Academic Honesty Policy. The teaching staff will enforce them aggressively and strictly. The following are additional details specific to CSC 252/452.

Exams in CSC 252/452 must be strictly individual work.

Collaboration on assignments among team members is of course expected. Collaboration on assignments across teams (or among individuals on non-team-based assignments) is encouraged at the level of ideas. Feel free to ask each other questions, brainstorm on algorithms, or work together at a whiteboard. You may not claim work as your own, however, unless you transform the ideas into substance by yourself. This means you must leave any brainstorming sessions with no written notes.

Similarly, you are welcome to read anything you find on the web, but you must close all web pages before beginning to write your code. You are not permitted to repeatedly consult a source. You can read it, understand it, put it away, and write your own similar code, but you must not copy anything. Both electronic copy-and-paste and copying through short-term memory are expressly forbidden.

To minimize opportunities to steal code, all students must protect the directories in which they do their work.

Any activity that has the effect of significantly impairing the ability of another student to learn is expressly forbidden. Examples here might include destroying the work of others, interfering with their access to resources, or deliberately providing them with misleading information. (Note too that grades in CSC 252/452 are assigned on the basis of individual merit, so there is no benefit, even a dishonest one, to be gained by sabotaging the work of others.)

Posting homework and project solutions to public repositories on sites like GitHub is a violation of the College’s Academic Honesty Policy, Section V.B.2 “Giving Unauthorized Aid.”

Finally, if you have any questions about what is permitted and what is not, please ask!

Disability Resources

The University of Rochester respects and welcomes students of all backgrounds and abilities. In the event you encounter any barrier(s) to full participation in this course due to the impact of a disability, please contact the Office of Disability Resources. The access coordinators in the Office of Disability Resources can meet with you to discuss the barriers you are experiencing and explain the eligibility process for establishing academic accommodations. You can reach the Office of Disability Resources at: disability@rochester.edu; (585) 276-5075; Taylor Hall; www.rochester.edu/college/disability. You are also encouraged to talk to the instructor about your required accommodations