Kurs om hur du programmerar i Modern C++ med Linux API och lär dig kombinera låg-nivå med hög-nivå
Hur omvandlar man en signal till en exception? Hur skapar man en process och fyller den med ny programkod. Vilka olika
sätt att kommunicera mellan processer finns det? Hur fixar man memory-mapped I/O?
Dessa och en lång rad andra frågeställningar besvarar vi i denna mycket uppskattade kurs.
Snabbfakta
Namn
Systemprogrammering med Modern C++
Ämne
C++ och C
URI
cxx/cxx-systems-programming
Längd
3 dagar
Nivå
Advanced
Målgrupp
Rutinerade C++ programmerare
Förkunskaper
Kunna programmera i C++
Programvara & Verktyg
GNU C++ Compiler, version 10 or later
JetBrains CLion
Ubuntu Linux
Kursdatum
Här ser du vilka kursdatum som är tillgängliga. Klicka på en av datumknapparna för att anmäla dig till
ett kurstillfälle. På kursen pratar läraren svenska, medan vårt kursmaterial alltid är författat på
engelska.
Fjärrkurs
Du sitter bekvämt framför datorn och deltar i kursen via internet.
Vi använder programvaran Zoom för alla våra fjärrkurser.
I priset ingår kursmaterial som PDF.
Pris: 15 000 kr + moms
Klassrumskurs
Du sitter bekvämt i ett av våra klassrum, vilka finns centralt placerade
i Stockholms innerstad (Östermalmstorg).
I priset ingår tryckt kursmaterial (och som PDF), samt kaffe/te med smörgås på
förmiddagen och kaffe/te med bulle på eftermiddagen.
Pris: 20 000 kr + moms
Just nu finns det inga datum tillgängligt.
Titta förbi om några dagar eller kontakta oss.
Företagsanpassad Kurs
Om ni är tre eller fler personer från samma företags, kan ni beställa en företagsanpassad
kurs. Då håller vi kursen på ett datum som passar er. Antingen på plats i era lokaler
eller som en fjärrkurs. Vi kan också hålla den muntliga framställningen på engelska.
Klicka på knappen nedan för att be om en offert.
Här är ett sammandrag i punktform av vad du får lära dig på kursen.
Eftersom kursmaterialet är författat på engelska, så återger vi sammandraget
också på engelska.
How the address space for a process is organized and why this is interesting
How function calls are made and how you can use that insight
How to track library calls and system calls, respectively
The special file system / proc
Asynchronous I / O and memory mapped I / O
Signal handling
Process management with fork (), exec () and wait ()
Communication with pipe & fifo
POSIX message queues
POSIX shared memory segments
POSIX semaphores
TCP stream sockets
Kursinnehåll
Eftersom kursmaterialet är författat på engelska, så återger vi innehållet
också på engelska.
SECTION: Application
Understanding the concept of a Linux application
The Process Concept
What is a process and how it differs from a thread
Process meta-data
Virtual Address Space Organization
Virtual memory pages
Address translation
What happens during a page fault
Memory areas and their functions
Compilation and Linking
Overview of the various compilation steps
Understanding the magic number
Creating statically linked libraries
Creating dynamically linked libraries
Using programs to inspect compiled files such as string, nm, objdump, ldd
Understanding Function Calls
The call stack
The content of stack frames
The details of a single function call
Implementing variable number of function arguments
Using setjmp() & longjmp()
Understanding how longjmp is used when C++ throws an exception
Library and System Calls
What is call to a library
What is a system call
How is the kernel code invoked during a system call
Tracing library and system calls
Memory Management
What is dynamic memory anyway
The C APIs for using the heap
Brief about how to implement heap management
Estimating the current heap size
Implementing a C++ allocator for use with containers
Allocating memory blocks on the call stack
Tracking memory leaks with valgrind
The C++ APIs for using the heap
Creating Processes
Copying a process with fork
Special process IDs
Terminating a process
What are zombies and daemons
Loading a new executable with exec
Implementing class Process
SECTION: Input / Output
Different forms of performing I/O
File Systems
What is a file system
FS types
File types
Basic operations on files, from the kernel’s perspective
I-nodes
Directory files
File descriptors
Devices
Mounting devices
The /proc file system
What is the /proc FS
Top-level info files
Process-specific info files
Reading /proc info files using C++
Regular I/O
How to use the system API of open() & close()
Opening modes
Setting file permissions
How to use the kernel API of read/write
Changing the file read/write position
Manipulating files in the file system
Using C++ fstream for binary record-oriented files
Advanced I/O
Manipulation of file descriptors
Using memory mapped I/O
Using non-blocking I/O
Using non-deterministic I/O
Implementing class MemoryMappedFile
SECTION: Inter-process Communication (IPC)
Different forms of interchanging data between processes.
Signals
What are signals
Sending signals from the shell and from program code
Implementing signal handlers
Registering signals and signal masks
Implementing timeouts
Creating interval timers
Invoking longjmp() from a signal handler
Implementing class GlobalSignalHandler
How to translate a signal, such as SEGV (segmentation fault) into a C++ exception
Channels
What is a channel
Pipes
Fifos
Implementing class Fifo
Message Queues
What is a message queue and how do it differ from a channel
Overview of the API
Usages
Implementing class MessageQueue
Shared Memory
What is shared memory
Overview of the API
Usages
Implementing class SharedMemory and use it as a C++ allocator
Semaphores
What is a semaphore
Memory vs file-system based semaphores
Overview of the API
Usages
Implementing class Semaphore
Implementing class FileSystemSemaphore
Implementing a message queue with semaphores for use in shared memory