Introduction to Computer Systems

This course covers the organization of computer systems (in terms of storage units, caches, processors, and I/O controllers) and teaches you assembly and C language programming.

Course Information

CS0330 is taught by Professor Tom Doeppner (twd). Lectures are held every Monday, Wednesday, and Friday, from 2:00 to 2:50 PM in Salomon Center DECI 101.

The course is intended primarily for computer science students and computer engineers, though it is open to anyone with adequate preparation interested in learning the topics covered in the course announcement. It fulfills a core requirement for the A.B. and Sc.B. tracks in computer science, and is required for the Computer Engineering concentration.

In order to take CS 33, you should have taken CS 15, CS 18 or CS 19 (or have Tom's permission). Familiarity with a C-like language (such as C++ or Java) will help you with this course. However, knowing C is not a prerequisite for the course.

"High-level computer architecture and systems programming. The course covers the organization of computer systems (in terms of storage units, caches, processors, and I/O controllers) and teaches students assembly-language programming and C language programming. Extensive programming exercises introduce students to systems-level programming on Linux systems, as well as to multithreaded programming with POSIX threads. Students will learn the basics of how compilers work and will be introduced to the functions of operating systems."
– Course Announcement

Guides & Documents

Check out the following useful documents for questions you have about course organization, code style, or tools we use.

Quick links


If you're looking for hours for projects or labs, please see hours →


All projects are due at 11:59 pm on the specified due date. To accept your handin, we must have a collaboration policy signed and dated. To check if you have turned one in, please check this form →

Maze (pdf)9/69/18
Data (pdf) / Example9/189/25
Traps (pdf)9/2510/2
Buffer (pdf)10/210/9
Strings + Performance (pdf)10/910/18
Shell 1 (pdf)10/1810/28
Shell 2 (pdf)10/2811/6
Malloc (pdf)11/611/25
Database (pdf)11/2512/13


Labs are released on Mondays (except for some). They will be done in pairs and can be completed on your own time or during lab hours. During lab hours, you will be able to work with others and get help from TAs. You must complete each lab and have it checked off by the end of the last lab hours prior to the release of the following week's lab*. Submissions during the week after that in which a lab was assigned will receive half credit.

Lab 1: Life9/69/15
Lab 2: Tools9/169/25
Lab 3: x86 Part 19/239/29
Lab 4: x86 Part 29/3010/6
Lab 5: Profiling10/710/17
Lab 6: Makefiles10/1810/24
Lab 7: Signals10/2511/3
Lab 8: Alloc11/411/10
Lab 9: Virtual Memory11/1111/17
Lab 10: Networking11/1811/24
Lab 11: Concurrency (Part One)11/2512/11
Lab 12: Concurrency (Part Two)12/212/11

*This means that the 8-10pm lab on Sunday(Or Thursday, for some labs) is the last available slot to get your labs checked off for full credit.


Homeworks are required for graduate students taking the course, and optional for everyone else. Only homeworks submitted by graduate students will be graded. You can submit your homework through Canvas. If you have questions about the homework, please attend Tom's office hours.

NameOutDueSupplementary Files
HW1 / Solution9/69/13
HW2 / Solution9/139/20
HW3 / Solution9/209/27
HW4 / Solution9/2710/4
HW5 / Solution10/410/11
HW6 / Solution10/1110/18minmax.c
HW7 / Solution10/1810/25
HW8 / Solution10/2511/1
HW9 / Solution11/111/8
HW10 / Solution11/811/15
HW11 / Solution11/1511/29


Lectures are held every Monday, Wednesday, and Friday, from 2 to 2:50 PM in Salomon DECI.

Sept 4Intro to CSCI 330; Intro to C[Notes][Full][Video]
Sept 6Intro to C [Notes][Full][Video]
Sept 9Intro to C [Notes][Full][Video]
Sept 11Intro to C [Notes][Full][Video]
Sept 13Intro to C [Notes][Full][Video]
Sept 16Intro to C [Notes][Full][Video]
Sept 18Data RepresentationChapter 2[Notes][Full][Video]
Sept 20Data RepresentationChapter 2[Notes][Full][Video]
Sept 23Data RepresentationChapter 2[Notes][Full][Video]
Sept 25x86 Assembler LanguageSections 3.1, 3.2[Notes][Full][Video]
Sept 27x86 Assembler LanguageSections 3.4, 3.5[Notes][Full][Video]
Sept 30x86 Assembler LanguageSection 3.6[Notes][Full][Video]
Oct 2x86 Assembler LanguageSection 3.7[Notes][Full][Video]
Oct 4x86 Assembler LanguageSection 3.10[Notes][Full][Video][asmrev2.c][recrev.c]
Oct 7Processor Arch. and PerformanceSections 5.1-5.6[Notes][Full][Video]
Oct 9Memory Hierarchy ISection 5.7-5.12[Notes][Full][Video]
Oct 11CachingSection 6.1-6.2[Notes][Full][Video]
Oct 14Holiday!
Oct 16Architecture and OSSections 8.1-8.4[Notes][Full][Video]
Oct 18Shells and FilesSection 10.1[Notes][Full][Video]
Oct 21FilesSections 10.2-10.11[Notes][Full][Video]
Oct 23SignalsSections 8.5-8.6[Notes][Full][Video]
Oct 25Signals [Notes][Full][Video]
Oct 28Memory Hierarchy IISections 6.4-6.5[Notes][Full][Video]
Oct 30Linking and LoadingSection 6.3[Notes][Full][Video]
Nov 1Memory ManagementSection 7.1-7.9[Notes][Full][Video]
Nov 4Memory ManagementSection 9.9[Notes][Full][Video]
Nov 6Virtual MemorySection 9.9[Notes][Full][Video]
Nov 8Virtual MemorySections 9.1, 9.2, 9.6, 9.8[Notes][Full][Video]
Nov 11LibrariesSections 7.10-7.13[Notes][Full][Video]
Nov 13Network ProgrammingSections 11.1-11.4[Notes][Full][Video][tcpClient.c][tcpServer.c][udpClient.c][udpServer.c]
Nov 15Network Programming[Notes][Full][Notes][Full][Video]
Nov 18Concurrent ProgrammingChapter 12[Notes][Full][Video]
Nov 20Concurrent Programming [Notes][Full][Video]
Nov 22Concurrent Programming [Notes][Full][Video]
Nov 25Concurrent Programming [Notes][Full][Video]
Nov 27Holiday!
Nov 29Holiday!
Dec 2Concurrent Programming [Notes][Full][Video]
Dec 4Concurrent Programming [Notes][Full][Video]
Dec 8Conclusion [Notes][Full][Video]

Project Gear Ups

Looking for guidance as you start your project each week? Want a refresher on what material has been covered and an outline of what you will be writing? Come to our Project Gear Up Sessions! We’ll also be going over how to use the demo(s) and tester(s) and other relevant scripts for each project!

For each project, we will hold a Gear Up session a day after it is released. All Gear Up sessions will be held in Motorola (CIT 165) and check the course calendar for time. Come prepared with questions!!

10/10Strings + PerformanceSlides[Video]
10/21Shell 1Slides[Video]
10/29Shell 2Slides[Video]


Tom's Office Hours

Professor Doeppner's hours will be held in CIT 405.


TA Hours

During TA hours, you'll be able to get help from TAs with course concepts as well as project and lab-specific questions. Note that you may not ask questions about labs in project hours (and vice versa) or have a lab checked off during project hours. During conceptual hours, you may not bring up code-specific questions.



Tom Doeppner

HTAs (

Ilan Bigio

Peter Cho

Kielan Donahue

Lisa Phinisee

UTAs (

Ariana Barzinpour (abarzinp)

Casey Nelson (cnelso13)

Chris Avalos (cavalos1)

Christine Wang (cwang85)

Conrad Zborowski (czborows)

Daniel Park (dpark20)

Daphne Li-Chen (dlichen)

David Charatan (dcharata)

David Promisel (dpromise)

Delmy Garcia (dgarci14)

Ethan Sattler (esattler)

Evan Velasquez (evelasq2)

Garret Kern (gkern1)

George Lee (glee43)

Grace Bramley-Simmons (gbramley)

Gus Cantieni (gcantien)

Isa Milefchik (imilefch)

Jarett Huddleston (jhuddle1)

Jason Fischman (jfischma)

Jason Ludmir (jludmir)

Katherine Kwan (kkwan)

Mohammad Amoush (mamoush)

Moustafa Makhlouf (mmakhlou)

Nazem Aldroubi (naldroub)

Prithu Dasgupta (pdasgup1)

Rachel Wang (rwang48)

Raghu Nimmagadda (knimmaga)

Rahul Dey (rdey2)

Rudra Srivastava (rsrivas2)

Shelley Jain (sjain16)

Star Su (ssu6)

Symone Houston (khousto1)

Timothy Park (tpark10)

William Adriance (wadrianc)

William Jurayj (wjurayj)

Zsozso Biegl (zbiegl)