IN2140 2023
IN2140 — OS & Networking
Foundational systems course in C covering low-level I/O, processes, concurrency, synchronization, and networking protocols. Includes a substantial home exam project.
IN2140 – Introduction to Operating Systems and Data Communication at UiO. The first encounter with systems programming in C — understanding what the OS does on behalf of user programs and how data moves between machines.
Course topics
C programming at the systems level
- Pointer arithmetic, memory layout, stack vs heap allocation
malloc/freeand manual memory management — preventing leaks and dangling pointers- Structs, unions, bitfields for low-level data representation
- Undefined behaviour: alignment, overflow, strict aliasing
Processes and the kernel interface
fork()/exec()/wait()— process creation and managementfork()semantics: copy-on-write, file descriptor inheritance- Signals:
SIGINT,SIGCHLD,kill(),sigaction()handlers - Process groups and sessions
I/O
- File descriptors as an abstraction over files, sockets, and pipes
- Blocking vs non-blocking I/O
select()andpoll()for multiplexing multiple I/O sourcesepoll(Linux) for scalable I/O event notification
Concurrency with threads
- POSIX threads (
pthreads): creating threads, joining, detaching - Mutex locks —
pthread_mutex_lock/unlock, protecting shared state - Condition variables —
pthread_cond_wait/signal, producer-consumer pattern - Race conditions, deadlock, livelock — recognising and preventing them
Networking
- Socket API —
socket(),bind(),listen(),accept(),connect(),send(),recv() - TCP vs UDP: reliability, ordering, flow control vs best-effort delivery
- Full-duplex communication — using
select()or separate threads for simultaneous send/receive - HTTP at the protocol level: request/response format, headers, status codes
CMake build system
CMakeLists.txtstructure, targets, include directories- Out-of-source builds, debug vs release configurations
- Linking libraries (
-lpthread,-lm)
Home exam
The home exam was a substantial solo programming project requiring integration of multiple course topics: process management, IPC, socket communication, and concurrent data structures — all in C with a CMake build.