This is an introductory course on Computer organization and computer systems. The course will expose the student to the different layers in a computer system and examine the working of a computer system at these different levels. It will expose the student to the low level details of how machines are assembled and the tools to program them – it will expose what really happens when your programs are run, thereby providing you with the intellectual tools needed to solve problems when things go wrong. In addition to the theoretical concepts, the course through the lab section will provide an exposure to systems skills using various tools and focusing on issues such as performance and correctness. The course will take a bottom-up approach: it will start with the basic components of a computer system, machine representation of data, digital logic circuits, instruction sets and assembly programming, and moves to a discussion of how C programs are translated to the machine level. The course also introduces systems programming concepts such as memory management, file systems, safe programming, system stack, debugging and performance tuning of programs. The lecture, and some lab sessions, will consist of in-class activities and students will be required to work in groups.
Announcements
- This website is under construction - all content subject to change!
Class Resources
- Piazza - You will be added to the class forum
- LC3 Download Instructions
- LC3 Download Page
- LC3 Tools Guide
- Git Instructions & Video Demo
- CEDAR Logic Instructions & Video Demo
- Logism Instructions & Video Demo
- Visual Studio Code Instructions & Video Demo
Schedule
Introduction | Materials |
---|---|
Week 0 Chapter 1 |
Course Logistics and Syllabus |
Week 1- Data Representation Chapter 2 |
Data Representation (Video) Two’s Complement Representation (Video) Logic Operators |
Lab Week 1 | Introductions and Review |
Implementing C programs on Machine ISA | Materials |
---|---|
Running high level programs (Week 9) Quick Review of C (Week 9) Chapters 11,12,13 Run-time Stack |
Translation Process and Role of Compiler Test Scoping rules in C Run-time Stack Review of Run-time stack - Video |
C programs on LC3 (weeks 10-12) Activation Records and Function Calls (Chap 14) Arrays and Pointers (Chap 16) Dynamic Memory (Heap)Chap.19 |
Functions- Notes Functions-In Class Exercise Functions-Part1 (Video) Arrays and Pointers Arrays/Pointers- Group Exercise code C to LC3 code examples Structures Dynamic Memory-Malloc 1-dimensional Dynamic Array Code 2-D Dynamic Array - Question Review: Examples of function call & memory state(Video) |
Labs Weeks 11-12 | Programming in C GDB Tutorial(Video) Valgrind Tutorial (Video) File I/O Lab 11 Files Lab 12 Files GDB Valgrind Slides Using GDB in VSCode |
Exam 2 - Nov.17 | All material upto Dynamic Memory in C |
Program Performance and Computer Architecture | Materials |
---|---|
Performance Optimization (Weeks 12-14) Memory Hierarchy Code Optimization |
Performance metrics & Memory Hierarchy Code Optimization Techniques Notes on Memory Blocking |
Labs Weeks 13-14 | Project 5,6 discussions |
Course Summary | Course Summary: Real Architectures [Video] |