CS 3410 - Computer System Organization and Programming

General Information

CS3410 provides an introduction to computer organization, systems programming and the hardware/software interface. Topics include instruction sets, computer arithmetic, datapath design, data formats, addressing modes, memory hierarchies including caches and virtual memory, I/O devices, bus-based I/O systems, and multicore architectures. Students learn assembly language programming and design a pipelined RISC processor. The course is open to any undergraduate who has mastered the material in CS 2110 - Object-Oriented Programming and Data Structures.


Loose prerequisite of CS 2110 - Object-Oriented Programming and Data Structures

C and UNIX Tools & Scripting would be very nice to have

Topics Covered

  • Basic Digital Logic
  • Memory
  • CPU with hazards
  • Calling Conventions
  • Linkers
  • Caches
  • Virtual Memory
  • Multicore Architectures
  • Synchronization
  • I/O


4 projects with a partner that are fairly time consuming

Minimum: 10 hrs/wk

Average: 15 hrs/wk

Your first two major project involve building a processor in Logisim out of logic gates. After that, you’ll be working on a few projects in C. One was Cacheracer, where you write a program that tries to fill up memory as quickly as possible, while competing with another such program via traps and other tools. There are various labs; notably, you exploit a buffer overflow vulnerability in one. The last project in years past was Honeypot, where you and a partner built a program to scan incoming network packets as quickly as possible, competing for the highest MB/s. That has recently been replaced with a project where you implement malloc.

General Advice

Do not take it with CS 3110 - Data Structures and Functional Programming.

C and UNIX Tools are heavily used in this class. The workload can seem intense because they assume that you will easily pick up a working knowledge of C and unix.

Make use of office hours and Piazza to clarify things, and get a head start on projects!


It’s a lot of work, but you’ll come out of it with a better understanding of what is actually going on in your computer. Who knows, you might find assembly and systems programming really fascinating, like I did (after spending years in Python and JavaScript). Also, Professor Bracy has the best analogies.

Past Offerings


Edit this page on Github: classes/CS3410.md

Edit me on GitHub