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.