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

Fall 2016 with Bracy consisted of 6 projects, but 2 of these projects were smaller. The two MIPS processor assignments had partners and the smaller malloc tests assignment did as well.

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. Recently, the buffer overlow attack has been moved to a full projec.t 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!

A lot of people in this class go into it believing that they won’t learn anything they will use or will interest them because they want to work purely in software. However, this class is well taught and interesting, and will provide a much deeper understanding of what happens when you compile and run a C program, even if you believe you already pretty much know what is going on. Go into it with an open mind and a willingness to learn.


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.

The class has a devoted course staff, and will attempt to teach you an enormous amount. With Bracy the exams were odd because they often felt closer to the quesetions on the practice exams than the material we focussed on in class. The class will have about 4 major assignments with lower averages, and 2 minor assignments with high or near perfect averages. It is unclear how they are weighted, but they seem to be weighted differently. Labs were fun, lectures were quality.

Past Offerings


Edit this page on Github: classes/CS3410.md

Edit me on GitHub