1.6 KiB
1.6 KiB
Chapter 1 – Introduction and Core Concepts
🔧 What is System Programming?
- Low-level programming that interacts directly with the kernel and system libraries via system calls, typically written in C.
- Includes shell tools (bash, gcc, coreutils), daemons, webservers, etc.
Why Learn It?
- Even in high-level environments (JS, Java, Python), understanding internal mechanisms leads to better, more efficient code.
- Still essential for core components of Linux systems: kernel, drivers, glibc, gcc.
Core Elements
- System calls – entry points from user process to the kernel (e.g.,
read(),write()). - C Library (glibc) – interface between user programs and system calls.
- C Compiler (gcc) – handles APIs, ABIs, and object formats.
API vs ABI
- API: interface at the source code level (e.g., libc functions).
- ABI: binary layout and conventions (e.g., syscall invocation, parameter ordering). Defines compatibility between systems and architectures.
Standards and Compatibility
- POSIX/SUS as a reference, but Linux is not officially certified.
- The Linux Standard Base (LSB) initiative extends POSIX/SUS to ensure binary compatibility across distributions.
Linux Basics
- Files: name + inode, represented by file descriptors (int). Linear byte streams (no formatting).
- Processes: entities with address space, pid, users, groups, permissions, signals.
- IPC: inter-process communication mechanisms (pipe, FIFO, socket, shared memory, semaphores).
- Error handling: functions return values and set
errno. Useful functions:perror(),strerror(),strerror_r().