Linux – vývoj nízkoúrovňových služeb a knihoven (LNXPR1)

Unixové systémy, Linux - programování

Programy na Linuxu a dalších unixových systémech komunikují prostřednictvím jádra operačního systému a v některých případech pomocí sdílené paměti. Systémová standardní knihovna podle standardu POSIX nabízí víc než jen ISO C. Pokud vyvíjíte čistě pro Linux, máte navíc k dispozici velmi praktická rozšíření.

Meziprocesová komunikace podle POSIX a System V nabízí fronty zpráv, semafory a již zmíněnou sdílenou paměť. Mezi další komunikační prostředky patří síťové i lokální sockety a roury, které navíc umožňují posílat si souborové deskriptory dalších prostředků. Linux pak pomáhá do smyčky událostí integrovat i ošetření signálů a časové události.

Tento kurz lze objednat v původní variantě s jazykem C, ale není problém si domluvit C++ nebo Rust, případně i Python. Na požádání lze připravit variantu pro jiný operační systém než Linux.

TOTO ŠKOLENÍ VÁM POMŮŽE:

  • Seznámit se s fungováním operačního systému z pohledu uživatelského programu
  • Naučit se pracovat s komunikačními prostředky unixových operačních systémů
  • Poznat, čím vším nám Linux ulehčuje život oproti samotnému POSIX standardu

KDO BY SE MĚL KURZU ZÚČASTNIT?

  • Vývojáři software a systémových nástrojů pro Linuxové embedded systémy a servery
  • Tvůrci knihoven a frameworků pro integraci software na unixových platformách
  • Zájemci o fungování operačních systémů a jejich služeb pro uživatelský prostor

Privátní školení a termíny na míru

Toto téma je možné zrealizovat pouze jako privátní, a to nejen formou uzavřeného firemního kurzu, ale také jako individuální konzultaci pro jednotlivce.

V případě kurzu na míru je níže uvedená osnova pouze inspirací. Finální obsah vzdělávání, jeho délka i termíny budou přizpůsobeny konkrétním vstupním znalostem, potřebám a cílům účastníků.

Cenovou nabídku vám rádi připravíme na základě vstupů zaslaných e-mailem nebo zadaných prostřednictvím poptávkového formuláře. Cena privátního školení vychází z náročnosti požadované obsahové náplně školení, časového rozsahu a celkového počtu přihlášených osob.

KDE A KDY KURZ PROBÍHÁ?

Kontaktujte nás

S námi máte na výběr: Přijďte na kurz osobně do naší učebny, nebo se ke kurzu připojte online. Pokud preferujete online formu, uveďte prosím do poznámky v objednávce "Připojím se virtuálně".
Více informací k hybridní formě školení naleznete zde.

Náplň kurzu:

Skrýt detaily
  • Rozhraní operačního systému
    1. Systémová volání (syscalls)
    2. Standardní knihovna a POSIX.1-2024
    3. Nástroje pro trasování komunikace s jádrem
  • Chyby při systémových voláních
    1. Práce s fatálními a opravitelnými chybami
    2. Ošetření a propagace chyb od operačního systému
    3. Systémová volání přerušená signálem
  • Komunikace, vstup a výstup
    1. Standardní proudy (stdin, stdout, stderr)
    2. Souborové deskriptory (file descriptors)
    3. Bufferované proudy v C, C++ a Rustu
  • Souborový systém a adresářová struktura
    1. Operace souborového systému
    2. Relativní cesty a aktuální adresář
    3. Oprávnění a vlastnosti souborů
  • Práce se soubory
    1. Otevření pro čtení nebo pro zápis
    2. Hybridní přístup k souborům
    3. Workaroundy absence transakcí
  • Hodiny a měření času
    1. Aktuální čas a časové intervaly
    2. Časové signály, události a timerfd
    3. Čekání a pozastavení procesu (wait)
  • Správa procesů a vláken
    1. Funkce fork, exec a spawn
    2. Odpovídající systémová volání
    3. Standardní vlákna a pthreads
  • Sdílení prostředků
    1. Při volání fork nebo clone
    2. Uzavření či zachování prostředků přes exec
    3. Návratová hodnota programu
  • Prostředí a shell
    1. Skupiny procesů, a procesy na pozadí
    2. Systémové služby a service manager
    3. Kombinace procesů spuštěných ze shellu
  • Úlohy operačního systému
    1. Rozdíl mezi procesem a vláknem (LWP)
    2. Volba mezi multiprocesingem a multithreadingem
    3. Vlákna a procesy v C, C++, Rustu a Pythonu
  • Signály a jejich zpracování
    1. Asynchronní zpracování signálů
    2. Synchronní zpracování pomocí timerfd
    3. Komunikace pomocí real-time signálů
  • Blokující a neblokující komunikace
    1. Když nechceme uspávat proces v syscallech
    2. Připravenost souborových deskriptorů (readiness)
    3. Místo blokování se vrací EWOULDBLOCK
  • Multiplexování vstupu a výstupu
    1. Čekání na celou sadu možných událostí
    2. Zdrojem událostí jsou souborové deskriptory
    3. Externí knihovny na správu událostí
  • Základní meziprocesová komunikace
    1. Roury mezi procesy (pipe)
    2. Pojmenované roury v souborovém systému (named pipe)
    3. Řešení nefunkčních rour a SIGPIPE
  • Fronty zpráv
    1. POSIX a System V varianty
    2. Více odesilatelů a příjemců
    3. V něčem flexibilnější než sockety
  • Lokální sockety
    1. Forkování procesů a socketpair
    2. Lokální klient-server architektura
    3. Typy socketů a jejich omezení
  • Síťové sockety
    1. Klient-server architektura
    2. Internet a protokol TCP/IP
    3. Workaround s SO_REUSEADDR
  • Strategie obsluhy spojení
    1. Forkování procesů či startování vláken
    2. Použití poolu procesů či threadů
    3. Neblokující sockety a fronta událostí
  • Jmenné služby
    1. Doménová jména a getaddrinfo
    2. Knihovna glibc a /etc/nsswitch.conf
    3. Omezení, chyby a alternativy
  • Správa paměti a mapování
    1. Dynamická alokace paměti (heap, alloca)
    2. Mapování souborů v souborovém systému
    3. Hranice mezi kernelem a uživatelským prostorem
  • Sdílená paměť
    1. Automaticky v případě vláken
    2. Explicitně POSIX nebo System V (shm)
    3. Jediná komunikace, která nejde přes jádro
  • Posílání souborových deskriptorů
    1. Jádro umožňuje předávat souborové deskriptory
    2. Lze například použít rouru nebo lokální socket
    3. Posílat pak lze libovolný souborový deskriptor.
  • Synchronizační nástroje
    1. Nástroje knihovny pthread (mutex, condition variable)
    2. POSIX a System V semafory a eventfd
    3. Atomické proměnné a lock-free operace
  • Možnosti debugování
    1. Systémové volání ptrace
    2. Interaktivní debuggery jako GDB
    3. Tracery jako strace
  • Sdílené dynamické knihovny
    1. Linkování knihoven při startu programu
    2. Explicitní otevírání přes dlopen
    3. Závislosti mezi knihovnami
  • Bonus: Optimalizované datové toky
    1. Optimalizovaný polling přes epoll
    2. Zero-copy techniky v kernelu
    3. Mechanismus io_uring
Předpokládané znalosti:
Dobrá znalost programování v jazyce C
Doporučený předchozí kurz:
Linux – základy administrace (LNX1)
Doporučený následný kurz:
Rozhraní operačního systému na Linux a POSIX platformách (LNXPR2)
Časový rozvrh:
3 dny (9:00hod. - 17:00hod.)

Vybrané zákaznické reference

ComAp a.s., Jan T.
Linux – vývoj nízkoúrovňových služeb a knihoven ( LNXPR1)
"Lektor ma viditelne vysokou odbornost a dobre pedagogicke schopnosti. Prostor pro zlepseni vidim ve vyjadrovani, napriklad mene castem pouzivani obratu "...jak kdyby.." :-)"