Introduction to Computer Systems
The Introduction to Computer Systems course provides a programmer's perspective of how computer systems execute programs, store information, and communicate. It enables students to become more effective programmers, especially in dealing with issues of performance, portability, and robustness. It also serves as a foundation for courses on operating systems, networks, compilers, and computer architecture, where a deeper understanding of systems-level issues is required. Topics covered include: basic digital logic design, machine-level code and its generation by optimizing compilers, performance evaluation and optimization, representation and computer arithmetic, memory organization and management, and supporting concurrent computation.
One objective of CS-281 is to help you become a better programmer by teaching you the basic concepts underlying all 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.
Why do you need to understand computer systems if you do all of your programming in high level languages? In most of computer science, we’re pushed to design abstractions and stay within their frameworks. But, any abstraction ignores effects that can become critical. As an analogy, Newtonian mechanics ignores relativistic effects. The Newtonian abstraction is completely appropriate for bodies moving at less than 0.1c, but higher speeds require working at a greater level of detail.
Oversimplifying matters somewhat, our CS-110/111, 173, 271 sequence is based on a simplified model of program execution (Python, and then C++ high level languages), with subsequent courses building further layers of abstraction through abstract data types and data structures and introducing algorithm analysis. CS-281 introduces greater detail about system behavior and operation. This greater detail is needed for optimizing program performance, for working within the finite memory and word size constraints of computers, and for systems-level programming.
The following “realities” are some of the major areas where the abstractions we teach in 110/111, 173 and 271 break down:
- Int’s are not integers, Float’s are not reals. Our finite representations of numbers have significant limitations, and because of these limitations we sometimes have to think in terms of bit-level representations.
- You’ve got to know assembly language. Even if you never write programs in assembly, the behavior of a program cannot be understood sometimes purely based on the abstraction of a high-level language. Further, understanding the effects of bugs requires familiarity with the machine-level model.
- Memory matters. Computer memory is not unbounded. It must be allocated and managed. Memory referencing errors are especially pernicious. An erroneous updating of one object can cause a change in some logically unrelated object. Also, the combination of caching and virtual memory provides the functionality of a uniform unbounded address space, but not the performance.
- There is more to performance than asymptotic complexity. Constant factors also matter. There are systematic ways to evaluate and improve program performance.
- Computers do more than execute instructions. They also need to manage multiple threads of activity in a system and to get data in and out as they interact with other systems over networks.
By the end of the course, you will understand these “realities” in some detail. As a result, you will be prepared to take any of the upper-level systems classes at Denison. Even more important, you will have learned skills and knowledge that will help you throughout your career, be it one in industry or one in which graduate studies are a goal.
Monday, December 19, 9-11am
The following textbook is required for the course:
- Computer Systems: A Programmer's Perspective, 3rd ed. by Randal Bryant and David O'Hallaron. Prentice Hall Publishers, 2011. ISBN-13: 978-0134092669.
In addition, resources will be provided for programming in a variant of the Intel assembly language.
Find our class page at: https://piazza.com/denison/fall2016/cs281
The primary forms of coursework in CS-281 include:
- Short turn-around exercises, called “NextClass” exercises. Also included in this category will be quizzes to assess current topics, readings, and lectures. All of these exercises will be counted for their completion, and a subset will be graded more rigorously. Expect at least two items in this category each week. I will drop the lowest NC/Quiz grade and will give “extra credit” opportunities to further help in this area.
- Hardware Labs - The weekly lab will develop your digital logic and logical thinking skills and will involve building circuits culminating in understanding the design and operation of a CPU. Each lab should result in a Lab Response, answering any questions, and may sometimes involve a “prelab” with questions preparing for the lab of the week.
- A major component of this class is the set of Project Labs. Spread throughout the semester, these are more complex, and will involve skills you have not developed before … i.e. they will have very little programming, but are more complex problem solving activities. Not all projects will take the same amount of out-of-class time so always start early. Almost all of these assignments have automated grading/feedback features, so you will know when you are successful.
- There will be three “midterm” exams during the semester, spaced at about five week intervals. These will focus on material covered since the last exam, but much of our work is cumulative, so there may be some forms of repetition in subsequent exams. There are no makeup exams and alternate scheduling only occurs for a University-sanctioned excuse.
- There will be a cumulative Final Exam. Final exams are mandated by the University to be given at the scheduled time, so it is your responsibility to ensure that no end-of-semester travel plans interfere with your taking the final at its appointed time.
Homework Project Policy and Responsibility
You may generally discuss strategy and techniques for programming problems with other students in the class, but these should be conceptual (communicate in _diagrams_), and the programs must be on your own. You should never leave a collaboration having written down code generated in the discussion. Sitting next to someone in the lab while you discuss/point out/ help debug one another’s code is absolutely unacceptable and is a violation of academic integrity. I possess and run programs that measure the “closeness” of submitted code, so it is easy to tell when unacceptable collaboration is occurring. In such cases, I am obligated to report the instance to the office of the provost for action.
Attendance and Participation Policy and Responsibility
I expect a high level of participation by all the students in this class. True learning requires an active role and regular attendance in order to engage and master the material. Thus, I expect your attendance at every class meeting. Besides the direct grade-effect on quizzes and and in-class activities that become NC exercises, a portion of the grade for NC/Quiz over the semester will allow me to reward the students who participate fully.
You are responsible for all reading assignments, whether or not the material is also covered during class time, as well as for announcements and decisions made relative to coursework that may occur during classtime. If you miss class, it is your responsibility to get notes and information on the material that was conveyed during class.
Academic honesty, the cornerstone of teaching and learning, lays the foundation for lifelong integrity. Academic dishonesty is intellectual theft. It includes, but is not limited to, providing or receiving assistance in a manner not authorized by the instructor in the creation of work to be submitted for evaluation. This standard applies to all work ranging from daily homework assignments to major exams. Students must clearly cite any sources consulted—not only for quoted phrases but also for code, ideas, and information that are obtained externally. Neither ignorance nor carelessness is an acceptable defense in cases of plagiarism. Students should ask their instructors for assistance in determining what sorts of materials and assistance are appropriate for assignments and for guidance in citing such materials clearly.
For further information about the Code of Academic Integrity see http://www.denison.edu/forms/code-of-academic-integrity.
Any student who thinks he or she may need an accommodation based on the impact of a disability should contact me privately as soon as possible to discuss his or her specific needs. I rely on the Academic Support & Enrichment Center in 102 Doane to verify the need for reasonable accommodations based on documentation on file in that office. Accommodations such as time and a half for exams must be arranged ahead of time.