Systems Programming Practice

Introduction

Participated in the Technical University of Munich's systems programming course, gaining deep understanding of operating system principles and systems programming through four core experiments. The project covers memory management, concurrent programming, network programming, and process management, with each experiment requiring careful consideration of performance optimization and resource management.

Requirements

  • Implement malloc/free memory allocator with multiple allocation strategies

  • Develop POSIX-compliant thread library with thread creation, synchronization primitives, and scheduler

  • Build high-performance HTTP/1.1 server supporting concurrent connections and static file serving

  • Implement Shell with pipes, redirection, and job control

  • All components must pass strict correctness and performance tests

  • Code must comply with POSIX standards and run in Linux environment

Technologies

  • Programming Language: C11

  • Operating System: Linux

  • Memory Management: First-fit/Best-fit/Worst-fit strategies

  • Concurrency Primitives: Mutex, Condition Variable, Semaphore

  • Network Programming: Socket API, HTTP/1.1 protocol

  • Process Management: Fork, Exec, Signal, Job Control

  • Debugging Tools: GDB, Valgrind, strace

Challenges

  • How to design efficient memory allocation algorithms to reduce fragmentation and improve allocation speed

  • How to implement core thread library functionality, including context switching and synchronization primitives

  • How to optimize HTTP server concurrent performance to handle many concurrent connections

  • How to properly handle signals and job control in Shell

  • How to write robust system-level code avoiding memory leaks and race conditions