CS 270 (Fall 2025)
Systems Programming
Course Information
Instructor: Yang Xiao (contact: xiaoy[AT]uky.edu)
Meeting Times: M/W/F 2:00-2:50 PM (Section 001), 3:00-3:50 PM (Section 002)
Office Hour: Hardymon Rm 233, Thu 2:00 PM – 4:00 PM
TA: Pearson Garner (contact: Brendan.White[AT]uky.edu), Office Hour: Tue/Wed/Thu 12:00-1:00 PM, EE Annex 205
Course Description
This course provides an introduction to computer systems and explores computer architecture, operating systems, and networks from a programmer's perspective. The course also introduces advanced programming and debugging tools. Topics include hardware instruction sets, machine language and C language program representations, linking/loading, operating systems (process management, scheduling, memory management, interprocess communication, and file systems), network programming (socket programming and web protocols), and common security attacks and solutions.
Textbooks and Materials
Required Textbook: R. Bryant and D. O'Hallaron, Computer Systems: A Programmer's Perspective, third edition, Pearson, 2016. ISBN 978-0-13-409266-9.
Strongly Recommended Textbook: B. Kernighan and D. Ritchie, The C Programming Language, second edition, Prentice Hall, 1988. ISBN 0-13-110362-8. Why this text is strongly recommended: It is both (i) the best way to learn C language; and (ii) a great reference for the future. Why C language is important (at least for this course): Because C is the closest high-level language to machine language—It is designed so that you can know exactly what the machine is doing when it executes your programs.
Course Schedule (Tentative)
| Week | Date | Agenda (Lecture notes uploaded to Canvas the same day before class) |
Text Reading | Assignment (H: Homework, L: Lab, P: Project) |
|---|---|---|---|---|
| 1 |
08/25 M 08/27 W 08/29 F |
Lec 0: Syllabus and course content overview Lec 1: Intro to C: Portable Assembly Language Lab 0: Your VM, the shell, basic C tool chain, gdb |
1 2-2.2 2-2.2 |
H0 (survey) out; P0 out (Thu) L0 out - due Sat |
| 2 |
09/01 M 09/03 W 09/05 F |
Labor Day - no class Lec 2: bit-diddling in C/C++ Lec 3: Integers and Two's Complement |
N0 (sppl.), 2.3 N0 (sppl.) |
H0 due, H1 out (Thu) |
| 3 |
09/08 M 09/10 W 09/12 F |
Lec 4: Intro to x86-64 - machine state Lec 5: x86-64 - basic instructions & operand modes Lab 1: Understanding a Program W/o Source Code (Yang is in travel; watch pre-recorded video at your own pace) |
3-3.3 3.4-3.5 3.10 |
H1 due; P0 due (Thu); H2 out (Thu) L1 out - due Sat; P1 out |
| 4 |
09/15 M 09/17 W 09/19 F |
Lec 6: x86-64 - control flow instructions Catch-up (focus on code examples) Lec 7: x86-64 - procedure call and linkage |
3.6 3.7 |
H2 due; H3 out |
| 5 |
09/22 M 09/24 W 09/26 F |
Catch-up Catch-up & Lec 8a: Data structures in C Lec 8b: Implementing arrays/structs in memory |
3.8-3.9 |
H3 due; H4 out |
| 6 |
09/29 M 10/01 W 10/03 F |
Catch-up Lec 9: Buffer overflows & countermeasures Lab 2: Buffer Overflows |
3.10 |
P1 due; H4 due; P2 out; L2 out - due Sat |
| 7 |
10/06 M 10/08 W 10/10 F |
Catch-up & Lec 10: Explicit memory allocation: malloc Lec 11: Linking and ELF file format Lec 12: Intro to hardware architecture & Y86-64 |
7.1-7.5 4.1-4.2 |
H5 out |
| 8 |
10/13 M 10/15 W 10/17 F |
Midterm study guide Midterm Exam in class Lec 13: Sequential Y86-64 implementation |
4.3 |
H5 due H6 out |
| 9 |
10/20 M 10/22 W 10/24 F |
Lec 14: Pipelined Y86-64 implementation Catch-up & midterm problems walk-thru & Proj 2 hints Lec 15: Intro to caching & locality |
4.5-4.6 6.1-6.3 |
P2 due H6 due |
| 10 |
10/27 M 10/29 W 10/31 F |
Fall Break - no class Lec 16: Hardware cache operations Lec 17: Exceptional control flow & processes |
6.4-6.5 8.1-8.2 |
P3 out; H7 out (Tue) |
| 11 |
11/03 M 11/05 W 11/07 F |
Lec 18: Process lifecycle Lec 19: Interprocess communication w/signals Lab 3: Signals and Race Conditions |
8.3-8.4 8.5 |
H7 due (Tue); H8 out L3 out - due Sat |
| 12 |
11/10 M 11/12 W 11/14 F |
Lec 20: Intro to virtual memory Lec 21: Address translation Lec 22: File I/O |
9.1-9.5 9.6 10.1-10.5 |
H8 due; H9 out P3 due |
| 13 |
11/17 M 11/19 W 11/21 F |
Lec 23: Directories and inodes Lec 24: Intro to threads Lab 4: Working with Files |
10.6-10.7 12.3 10.1-10.4 |
H9 due; H10 out (Tue) P4 out L4 out - due Sat |
| 14 |
11/24 M 11/26 W 11/28 F |
Lec 25: Programming with threads (vs. processes) Thanksgiving Break - no class Thanksgiving Break - no class |
12.4 |
|
| 15 |
12/01 M 12/03 W 12/05 F |
Catch-up Lec 26: Synchronization and races |
12.7 12.5 |
H10 due P4 due (Thu) |
| 16 |
12/08 M 12/10 W 12/12 F |
(Prep Days) TBD (Prep Days) Final Exam Review No class |
||
| 17 |
Final exam (Section 001), TBD, in classroom Final exam (Section 002), TBD, in classroom |
Learning/Research Resources
UK Libraries, Free Tutoring and Coaching at UK, Google Scholar, ACM Digital Library, IEEE Xplore.