Computer Systems Organization


Instructor

Jay Chen
jchen@cs.nyu.edu
Office: Sama Tower 1408A
Class Hours: Monday, Wednesday - 1:00pm to 2:15pm @ DTC N-202
Office Hours: Monday, Wednesday - 4:30pm to 5:30pm @ SAMA 1408A


Course Syllabus


Announcements

None.


Reading and Lecture Notes

Week 0 (August 27): Read [BO] Chapter 1
Week 1 (September 2): Read [KR] 1, 2
Week 1 (September 4): Read [KR] 3, 4
Week 2 (September 9): Read [KR] 5, [BO] 2.1 - 2.3
Week 2 (September 11): Read [BO] 2.5
Week 3 (September 16): Read [BO] 3.1 - 3.5, 3.13.1 - 3.13.3
Week 3 (September 18): Read [BO] Chapter 3.6, 3.13.4
Week 4 (September 23): Read [KR] 6, [BO] Chapter 3.7
Week 4 (September 25): Read [BO] Chapter 3.8 - 3.9, 3.13.5
Week 5 (September 30): Read [BO] Chapter 3.10 - 3.12, 3.14-3.15
Week 5 (October 2): Read [BO] Chapter 7
Week 7 (October 23): Read [BO] Chapter 8.1 - 8.4
Week 8 (October 30): Read [BO] Chapter 8.5 - 8.8
Week 9 (November 7): Read [BO] Chapter 10
Week 10 (November 11): Read [BO] Chapter 9.1 - 9.6
Week 10 (November 13): Read [BO] Chapter 9.7 - 9.8
Week 11 (November 18): Read [BO] Chapter 9.9
Week 11 (November 20): Read [BO] Chapter 6.3
Week 12 (November 25): Read [BO] Chapter 9.10 - 9.13, 8.1 - 8.4
Week 12 (November 27): Read [BO] Chapter 8.5 - 8.8
Week 13 (December 3): Read [BO] Chapter 10


Labs

Lab 0: Practice - Implement a doubly linked list in C using arrays for storage and support add/remove.

Lab 1: RKLab - due September 19.

Lab 2: Bomblab - due October 7.

Lab 3: Buflab - due October 23.

Lab 4: Shell lab - due November 11.

Lab 5: Malloc lab - due December 2.


Lab environments
You must complete all labs on the given virtual machine. If you do not have a personal desktop or laptop on which to install the virtual machine, please contact the TA. To install the virtual machine on your computer, take the following steps.
  • Step 1. Download the Virtualbox virtual machine monitor here. Choose the right binary to download according to the type of operating system running on your laptop.
  • Step 2. Download the class virtual machine image here. This file is fairly large (835MB), so you need to be patient.
  • Step 3. Install and launch Virtualbox. On the Virtualbox application toolbar, under the Menu item "File", click on "Import appliance...", and choose the previously downloaded cso.ova file when prompted.
  • Step 4. After importing, start the virtual machine named "ComputerSystemsOrganization" and you are done. Recall that the login name and password have been given to you in email or in the first class.

Tips for programming on Linux Basic UNIX
Our lab environment is based on Linux. If you have never used a UNIX machine before, there are many sources online to help you get started. An introduction to the UNIX command line interface can be found here. This cheat sheet lists the most common UNIX commands. I also like this survival guide for Unix newbies. Here's a entertaining book for those who think better in magic and spells.

Man up
If you need help with a particular UNIX command, you can use the manual pages built into all UNIX distributions. Type: man [command name]. For example, ls is the command to list the contents of a directory, man ls will describe the many command line options that ls accepts.

In addition to using linux from the command line, you'll be writing C programs that use built-in library functions. These are documented in Chapter 3 of the man pages. You can view these on your linux machine by via man, e.g.: man 3 strcmp describes the strcmp library function.


Learn to use an editor
You'll be editing text files on Linux. The two most common editors used by developers are "emacs" and "vim". Both can be intimidating to new users. You may find the "nano" editor easier to use.


Learn to use gdb The debugger gdb is indispensible when it comes to debugging your C (or C++) programs. Skim through the gdb tutorial. Here are two handy gdb cheat sheets, one for IA32 (txt, pdf), one for x86-64 (txt,pdf).


Coding style
When grading your labs, we will consider your coding style. Please refer to this document for proper coding style.