Diego Garza Astrophysicist in Training

Introduction to Computer Systems

Here I share the notes I took while taking Introduction to Computer Systems. This class was taught by Junchen Jiang and Yanjing Li. Both professors were alright and responsive on the Ed forum to questions.

This class was about teaching how a computer’s system actually works from individual bits to whole operating systems running. The class was taught by asynchronous lectures, with professors releasing the week’s videos on Monday. We were graded on 4 programming projects (no collaboration), weekly homeworks, and 2 exams. There were also optional labs that I did regarding SVN, GDB, valgrind, and pthreads. The class was taught using Computer Systems: Programmer’s Perspective

This class covered:

  1. Bitwise Manipulation
  2. Unsigned and Signed Types
  3. Assembly Registers & Operations
  4. CPU Memory Banks
  5. Stacks in Memory Management
  6. Arrays, Structs, and Unions
  7. Endiadness
  8. Memory Hierarchy
  9. Caches
  10. Cache Performance Analysis
  11. Operating Systems
  12. Dealing with Exceptions
  13. System Calls vs Library Calls
  14. Programs vs Processes
  15. Fork, Execve, and Signals
  16. Files and File Descriptors
  17. Memory Management
  18. Concurrency

Here I share my lecture notes. I don’t share any code. The projects were really fun. First was a lot of bitwise manipulation puzzles, second was using Assembly to disarm a bomb, third was modeling cache memory, and last was modeling a Unix shell. Fun stuff!

Bits

Intro to Assembly

Assembly

Procedures

Arrays, Structs, Unions

Memory Hierarchy

Cache

Cache Performance Analysis

OS and Exceptions

System Calls and Processes

Fork, Execve, Signals

Files

Memory Management

Concurrency

This class was extremely difficult and time intensive. I really enjoyed the class and it taught interesting topics that I wish I spent more time learning how everything worked because these concepts are literally running all computers. I feel like this class probably best prepared me to potentially code in a more computer science focused career in the future.

Here’s a cheat sheet on x86-64 as well as an intro to SVN version control.