CS211 Rutgers w/ Santosh Course Description
This course covers materials to illustrate how a high level program is converted to binary and is eventually executed by the hardware. We will cover a brief introduction to programming in C, how data and control represented in C is converted to binary and how the binary code is executed by the processor. This will involve programming in C, understanding and debugging X86 assembly, interfaces between the hardware and the software components, organization of hardware and how the various components interact.
Von Neumann architecture, hardware trends, performance, energy, cost metrics
Introduction to C programming
Assembly language techniques and instruction-set design
Boolean algebra, digital logic
The memory hierarchy
Performance
Input/Output concepts
Prerequisites
CS 112 is a pre-requisite for this course.
Textbooks
Required: R.E.Bryant and D.R.O'Hallaron, Computer Systems: A Programmer's Perspective, Prentice Hall, Third edition. Students can probably also use the second edition of the book.
Recommended: D.A.Patterson and J.L.Hennessy, Computer Organization and Design: The Hardware/Software Interface, Morgan Kauffman
Note that while this textbook is recommended, we will use portions of it for various lectures.
Recommended for C: B.W.Kernighan and D.M.Ritchie, The C Programming Language, Prentice Hall
Note that while this is the classic reference for C, there are a number of online references available as well. For example, here is a free C online reference http://publications.gbdirect.co.uk/c_book/
While you are welcome to use these resources, note that we have not seen them ourselves and cannot attest to the usefulness of these references.
Grading
Midterm exams -- 15%
Final exam -- 30%
Class participation -- 5%
Programming assignments -- 50%
Programming Assignment Policies
There will be numerous programming assignments to improve your understanding of the subject.
Programming assignments will be handed in via Sakai. We will provide instructions for packaging and handing in your assignments. You must follow these instructions exactly. If we cannot compile or run your programs, you will lose a significant portion of points.
We will not accept late assignments. Programming assignments must be handed in by the specified time/date on Sakai.
If you don't already have an account on the Instructional Laboratory cluster go to
https://www.cs.rutgers.edu/resources/instructional-lab
and create one. iLab machines are located in Hill 248, 250, 252, and 254. All registered students have access to these rooms.
In addition, there are a number of references to help you understand how to use the iLab systems. Please look at:
https://www.cs.rutgers.edu/resources/instructional-lab
You will be using a Unix environment for the programming assignments. For a primer on using the Bash environment, please refer to http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html For an assortment of GNU/Linux command line tools, refer to this: http://www.tldp.org/LDP/GNU-Linux-Tools-Summary/GNU-Linux-Tools-Summary.pdf
Some other manuals that will be useful: http://www.gnu.org/software/emacs/manual
(Emacs) http://gcc.gnu.org/onlinedocs/
(Make) http://www.gnu.org/software/make/manual/
(Gdb) http://www.gnu.org/software/gdb/documentation
Homework Assignment Policies
Handed in at the lecture. Late assignments will not be accepted.
Rules for Collaboration
You are free, even encouraged, to talk to your fellow classmates about your assignments. However, you cannot copy from one another in the assignments. If in doubt, follow Gilligan's Island rule. That is, after a joint discussion of an assignment, each student should discard all notes, go do something mind-numbing for an hour (like watching a couple of episodes of Gilligan's Island), and then recreate the solutions absolutely individually. The idea is to ensure that you fully understand and provide your own solutions, rather than blindly incorporate the solutions from the group discussion. We will use sophisticated plagiarism detection software and report any violation to office of student conduct.
You must also follow the Department's Academic Integrity Policy: https://www.cs.rutgers.edu/academic-integrity/introduction
Finally, copying from the web is also cheating.
Syllabus
September 5 , 2018 -- Lecture 1: Introduction and Hardware Trends Required Reading: Chapter 1 of the text book
September 10, 2018 (K&R)-- Lecture 2: C Programming
September 12, 2018 (K&R)-- Lecture 3: C Programming
September 17, 2018 (K&R)-- Lecture 4: C Programming
September 19, 2018 (K&R) -- Lecture 5: C Programming
September 24, 2018 (K &R) - Lecture 6: C Programming
September 26, 2018 (K & R) : Lecture 7: C Programming
October 1, 2018: Lecture 8 : Data Representation Reading material: Chapter 2:Introduction, 2.1 (skip 2.1.7), 2.2, 2.4-2.4.3)
October 3, 2018: Lecture 9: Data Representation Reading material: Chapter 2: 2.1, 2.2, 2.3, 2.4-2.4.3, 2.5
October 8, 2018: Lecture 10 (Chapter 3: Everything but 3.14) -- Assembly Language Programming
October 10, 2018: Lecture 11 -- Assembly Language Programming
October 15, 2018: Lecture 12 -- Assembly Language Programming
October 17, 2018: Lecture 13 -- Assembly Language Programming
October 22, 2018: Lecture 14 - Assembly
October 24, 2018 -- Lecture 15 - Assembly Language Programming
October 29, 2018 -- Lecture 16- Assembly Language Programming
October 31, 2018 : Lecture 17 -- Assembly
November 5, 2018: Lecture 18 - Assembly
November 7, 2018: Midterm
November 12, 2018: Lecture 19 -- Digital Logic
November 14, 2018: Lecture 20 - Digital Logic
November 19, 2018 - Lecture 21 - Digital Logic
November 26, 2018 - Lecture 22 -- Digital Logic
November 28, 2018 - Lecture 23 -- Digital Logic
December 3, 2018 - Lecture 24 -- Digital Logic
December 5, 2018 - Lecture 25 -- Digital Logic
December 10, 2018 - Lecture 26 -- Cache Design
December 12, 2018 - Lecture 27 -- Cache Design
Acknowledgments
This course borrows heavily from CS 211 taught by Prof. Abhishek Bhattacharjee, Prof. Thu Nguyen (Rutgers CS), and Prof. Badri Nath (Rutgers CS)