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, including I/O and devices; virtual memory; storage management; and interrupts, signals, and process control. Across all these areas we will focus on design tradeoffs and on implications for system performance.
- 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. This is a feature, not a bug!
- 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/
- There will be one in-class midterm and one final exam. Exams are open-book. They test your reasoning ability, not memorization.
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.
- Introduction to Computing Systems: From Bits and Gates to C and Beyond, 2/e
- Structured Computer Organization, 6/e
- Computer Organization and Design: The Hardware Software Interface, ARM Edition
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.
Please participate in class! Ask questions. If there's something you don't understand, make me stop and explain it again. There are two reasons you want to do so:
- First, there are probably a dozen people sitting around you who didn't understand it either, but don't have the guts to say so. They will love you for helping them out.
- Second, the course will continually build on the knowledge you have previously gained in the course. It probably is not a good idea to let things slide and try to catch up at the last minute.
You are strongly encouraged to form study groups, and share your insights as well as challenge each other's mastery of the material. There are two reasons why you want to do so:
- First, mastery, rather than memorization, of the material will be very important to success in this course. The exams are geared to testing your deep understanding, and not your ability to memorize. Study partners can provide the necessary foil to test whether you really understand the material. Statistically, if you form an effective study group, you will probably all do better in the course than if you go it alone.
- Second, all engineering jobs are about working in teams, and you are encouraged to do so early in CSC 252 to better prepare for life after graduation.
Read the textbook! We will not take attendance, but we highly encourage to come to class. But if you have to skip a class, one great way of making up for it is to read the textbook. The textbook also includes a variety of practice exercises, interspersed with the rest of the material. You should plan to do these exercises as you go along, and to check your answers against the solutions at the end of each chapter.
Challenge assumptions. You are encouraged to ask questions after you have thought about the material, and to challenge assumptions. Computer Organization deals with "nature" that is made by people and so we the people may have made it wrong. The recent security flaws found in almost all modern computer designs is a great example.
Everyone — the instructor, TAs, and students — must be respectful of everyone else in this class. All communication, in class and online, will be held to a high standard for inclusiveness: it may never target individuals or groups for harassment, and it may not exclude specific groups. That includes everything from outright animosity to the subtle ways we phrase things and even our timing.
For example: do not talk over other people; don't use male pronouns when you mean to refer to people of all genders; avoid explicit language that has a chance of seeming inappropriate to other people; and don't let strong emotions get in the way of calm, scientific communication.
If any of the communication in this class doesn't meet these standards, please don't escalate it by responding in kind. Instead, contact the instructor as early as possible. If you don't feel comfortable discussing something directly with the instructor — for example, if the instructor is the problem — please contact the advising office or the department chair.
Student conduct in CSC 252 is governed by the College Academic Honesty Policy and the Undergraduate Laboratory Policies of the Computer Science Department. The teaching staff will enforce them aggressively and strictly. The following are additional details specific to CSC 252.
Exams in CSC 252 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.
For purposes of this class, academic dishonesty is defined as:
- Any attempt to pass off work on an exam that didn't come straight out of your own head.
- Any cross-team collaboration or copying of artifacts (substance) in which the collaborating parties don't clearly and prominently explain exactly who did what, at turn-in time.
- Any activity that has the effect of significantly impairing the ability of another student to learn. 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 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!