CS 2110
CS 2110, formally known as Computer Organization and Programming, is a 4-credit Computer Science class taken as a core requirement for nearly all threads for the Computer Science major. It provides a first-principles deep dive into fundamental computer architecture, organization, and design principles, as well as providing an overview to low-level programming in an assembly language and C. It is the CS analogue of the ECE computer hardware classes ECE 2020 and ECE 2035, and the CM computer hardware class CS 2261. It is immediately preceded by CS 1331, and is immediately succeeded by CS 2200 and ECE 2031.
Workload
CS 2110 is generally regarded as the first significantly time consuming and challenging computer science class (though of course, this varies from person to person).
The workload itself varies from professor to professor. Some professors tend to give shorter homework assignments, but have more of them throughout the semester. Other professors tend to give significantly longer projects, but have fewer throughout the semester. In general though, expect 7-10 hours of work per week.
Exams also vary by professor. Some professors tend to give more frequent, shorter exams. Other professors tend to stick to the traditional 2 midterm format (with each exam covering a much greater breadth in material). Still others tend to give speed-coding assessments known as "Timed Labs" which are variations on homework assignments designed to be completed in a short time span. Traditional exams tend to have multiple choice, true-false, fill-in-the-blank, and code writing questions.
Topics List
The topics covered in the course are as follows:
- Bits and Bit Manipulation
- Integer Representation
- Computer Arithmetic
- Floating Point Standardization
- Combinational Logic Circuits
- Transistors
- Gates
- Selector Circuits
- Arithmetic and Logic Circuits
- Sequential Logic Circuits
- Latches
- Memory and RAM
- State Machines
- Processors
- Von Neumann Model
- Components of a Processor
- The LC-3 Datapath
- Instruction Set Architecture
- The Fetch-Execute Cycle
- Microcontrollers and Microcode
- The ROM
- Assembly Language
- The ISA and Machine Instructions
- Assembly Language-Instruction Mapping
- The Assembly Process
- The LC-3 Assembly Language
- The Runtime Stack
- Subroutines
- Recursion
- Hardware-Software Interfacing
- The Operating System
- I/O
- Device Drivers and Device Interfacing
- Traps
- Interrupts and Interrupt Handling
- C Programming
- Variables, Data Types
- Control Flow
- Arrays
- Structs
- Pointers and Pointer Arithmetic
- Functions
- Storage and Scope
- Embedded Systems
- The Game Boy Advance
- Computer Graphics
- Direct Memory Access
- Dynamic Memory
- Malloc and Free
- Calloc and Realloc
- Dynamic Data Structures
- Implementing Malloc
- Advanced Topics in C (varies by semester)
- Advanced Topics in Assembly (varies by semester)
Prerequisite Knowledge
Programming
Although CS 2110's prerequisite is CS 1331, strong comprehension of Java is not important (outside of the first two weeks). In general, a strong understanding of any high-level programming language (and specifically the underlying abstractions that are in all programming language) is important.
Hardware
CS 2110 does NOT require any prerequisite knowledge of hardware.
Mathematics
Only basic algebra and arithmetic skills are required.
Future Outlook
CS 2110 is the fundamental class for those interested in the Systems and Architecture, Devices, Information Internetworks, and Modeling and Simulation threads. It directly sets up both CS 2200 and ECE 2031, and the knowledge of C is an important setup for CS 3210. Finally, the computer organization concepts are further built upon in CS 4290 and the theory of assembly and compilation is useful when taking CS 4240.
Registration
CS 2110 has a lecture with a required lab component
You must register for one of the lecture sections, marked by a single letter (A, B, C, etc.) and a lab section with the same leading letter (e.g. if you register for lecture section B, you must register for lab section B01, B02, etc.).
Prerequisites
The sole prerequisite for CS 2110 is a C or higher in CS 1331.
Resources
A 2014 syllabus is linked here. Note that overall class structure has not changed (although some of the topics have).