This course serves as an introduction to operating systems concepts. Students learn different mechanisms by which an operating system manages and distributes hardware and computing resources. Students explore topics related to memory management, file-system organization, and security and privacy from a systems perspective. Students gain hands-on experience by modifying and adding features to a small educational Unix-like operating system.
Quarters taught: Spring 2021, Fall 2021, Winter 2022, Spring 2022, Winter 2023, Spring 2023.
This course serves as an introduction to computer instruction set architecture and implementation. Students learn historical perspectives, performance evaluation, computer organization, single-cycle, multi-cycle, and pipelined data paths and control. Students learn to program using RISC-V assembly and design and implement a miniscule instruction set processor.
Quarters taught: Fall 2021, Winter 2022, Fall 2022.
This is an upper-level class aimed at introducing students to the basic concepts of network security, with an emphasis on practical and research skills. Students approach the network stack layer by layer, researching vulnerabilities and implementing defenses. The topics covered in this class include authentication, key distribution, message authentication, access control, protocol security, virtual private networks, and onion routing.
Quarters taught: Spring 2022.
This course serves as an introduction to data structures and algorithms analysis. Students learn to analyze algorithms using exact and big $\texttt{O}$ runtime. By completing several major programming labs, students learn to write and debug efficient code using a variety of data structures and algorithmic approaches.
Quarters taught: Winter 2021.
This course serves as an introduction to procedural and object-oriented programming using the Python programming language, with an emphasis on problem solving. Problems include visualizing scientific or commercial data, interfacing with external hardware such as robots, or solving numeric problems from a variety of engineering disciplines.
Quarters taught: Fall 2020.
This class is an graduate-level computer system analysis class where students develop and solve analytical models of computer systems. Students learn different theoretical modeling tools to model existing systems and analyze their availability and performance. From models with impractical or no-known analytic solutions, students develop computer simulation models by learning the basics of event-driven simulation and random number generation.
Semester taught: Fall 2018 (while a graduate student at UIUC).