Classes taken (Ranked by difficulty):
- ECE 391 - Systems Programming - 40 Hours per week
- CS 225 - Data Structures - 10 Hours per week
- CS 173 - Discrete Structures - 6 Hours per week
- PHYS 213 - Thermodynamics - 5 Hours per week
- PHYS 214 - Quantum Physics - 5 Hours per week
- MACS 100 - Intro to Popular TV & Movies - 1 Hour per week
ECE 391 was by far the hardest part of my semester. It consumed at least 40 hours per week but the content was by far the most advanced and interesting stuff I have ever learned about in my life. After having taken the class, I feel that I understand the core concepts and implementations of an operating system and why operating systems even exist in the first place. Knowledge of bit manipulation, memory management, byte-addressable memory and low level C programming are essential prerequisite skills to understanding the material for this class.
What did I learn?
I learned the implementation and logic for a general design of an operating system all the way from assembly level ioctl functions, synchronization with semaphore and spin locks, memory management through paging, to thread handling through PIT (Programmable Interface Timer) implemented scheduling. The first few weeks of the class were spent learning the x86 Intel syntax and understanding the registers that are protocol for x86 based systems such as the stack registers EBP and ESP.
MP1 — Missile Command
With this newfound knowledge of Intel x86 assembly language, the first MP was to code Missile Command using a linked-list implementation for missiles and an RTC tasklet to control the speed of the game. This MP1 demonstrated the use of assembly linkage, rtc user program use, and jump tables.
MP2 - ECE 391 Journey Game
The second MP focused on VGA memory, Mode X display, VGA Color Palette through Octree, and a device driver for the Tux Controller.
MP3 - Build your own OS
This MP lasted 8 weeks and was done with a group of four people. There were 5 checkpoints for the whole MP as follows.
- Checkpoint 1 - Paging and Setting up the GDT/IDT
- Checkpoint 2 - Terminal Driver and File System using EXT2 format
- Checkpoint 3 - Execute and Halt system calls for user-level programs
- Checkpoint 4 - Implement the rest of the system calls from read, open, write, vidmap, getargs, etc.
- Checkpoint 5 - Multi-terminal and Scheduling using a Round-robin algorithm
CS 225 was miles behind ECE 391 in terms of difficulty and number of hours spent on the class, but nonetheless is still an essential class in understanding the study of Computer Science. In this class I learned about how basic data structures such as Stacks, Queues, Linked Lists, etc. are implemented and the design choices that are made to keep the complexity of operations on these functions at a minimum. I also learned about Trees and its many forms, Graph implementations and graph algorithms (Kruskal, Dijkstra, Prims).
Number and graph theory, algorithm complexities, trees, sets and collection of sets. Overall the class was about a 7/10 in difficulty, mainly because I was in a lecture section that was far more difficult than the other lecture section. (UIUC CS Department needs to get their curriculum straight for this class as the disparity between lecture sections is so massive that they are almost different classes)
Boltzmann distribution, Counting and Simple Harmonic Oscillators, Black-body radiation, monoatomic and diatomic energy relations, Heat Engines, Refrigerators, Heatpumps, Adiabatic/Isobaric/Isotermal Processes, and Chemical potentials.
One man: Schrodinger
TV, TV, TV, Corporate, TV, Movie, TV, Cultural Ideology, etc.