Linux Systems Programming: Virtual Memory, IPC, Shared Libraries

Especially on resource constrained systems it is important to use resources consciously. This course gives insight into topics like advanced memory managements techniques, advanced CPU utilization techniques (spoiler: single threaded event driven).

Course Outline

  • Virtual memory. A key component in modern operating systems, virtual memory is usually invisible to the programmer - unless the programmer wonders why things are simple.

    • Memory mappings

    • Visibility: “Private” vs. “shared”

    • Memory access permissions

    • System calls: mmap, mlock, mlockall, …

    • Realtime aspects

  • POSIX IPC. Mostly based upon virtual memory, POSIX IPC is a set of interprocess communication mechanisms that is worth a look.

    • Shared memory

    • Semaphores

    • Message queues

  • Linux-spezific system calls. Good old UNIX file descriptors have always been used as abstrations for file-like communication media (e.g. network sockets). Linux extends the abstraction in logical ways.

    • Signal Handling: signalfd. Signals are events, so why not treat them as such?

    • Timer: timerfd_create. Timers are events, so why not treat them as such?

    • Events: eventfd. Pretty, simple, powerful.

  • Shared libraries.

    • ELF: “Executable and Linkable Format”

    • Automatic (implicit) library loading

    • Explicit loading: dlopen(), and “loading scopes”

Prerequisites

A solid understanding of the C programming language is helpful. Fun with low-level hacking is required.