Getting Started
A university course on systems programming in Linux — how applications talk to the operating system through the kernel API.
Welcome to Systems Programming. This course is about how programs interact directly with the operating system through the kernel API. You'll move from exploring the Linux environment and the command line, through files, processes, and threads, to synchronization, inter-process communication, and network programming — writing real C/C++ that talks to the kernel at every step.
How the course is organized
Each course is split into four sections:
Topics
Lecture notes and theory, one article per week.
Samples
Small, self-contained, annotated code examples.
Homeworks
Programming assignments, grouped by area.
Guides
Step-by-step how-tos for tooling and workflows.
Start here
Your first steps
- Read the first topic — Introduction to Unix and Linux.
- Set up your environment by completing ENV-1: Setup GNU/Linux Environment.
- When you start compiling code, keep the Compilation guide handy.
From there, work through the Topics in order — each one links to the related samples and homeworks as you go.
Bibliography
- W. Richard Stevens & Stephen A. Rago — Advanced Programming in the UNIX Environment (APUE), 3rd ed.
- W. Richard Stevens — UNIX Network Programming, Vol. 1: The Sockets Networking API, 3rd ed.
- Michael Kerrisk — The Linux Programming Interface (TLPI)
- Remzi & Andrea Arpaci-Dusseau — Operating Systems: Three Easy Pieces (OSTEP) · read online
- Robert Love — Linux System Programming (O'Reilly, 2nd ed.)
- Eric S. Raymond — The Art of Unix Programming
- Brian W. Kernighan & Dennis M. Ritchie — The C Programming Language (K&R)
- Andrew S. Tanenbaum — Modern Operating Systems
- The Linux man-pages project · read online
- Beej's Guides · read online
Course info
- Website: learn.davit.am/system-programming
- Slides: Miro board
- Instructor: Davit Petrosyan — LinkedIn