
Corso Linux System Programming
Approfondisca il kernel Linux e impari a scrivere programmi in C di livello professionale che dialogano direttamente con il sistema operativo. Questo corso tratta I/O su file, processi, segnali, IPC, gestione della memoria, socket e multithreading partendo dalle basi. Ogni argomento è fondato su chiamate di sistema reali, codice funzionante e i modelli mentali che i professionisti utilizzano quotidianamente.
Cosa imparerai:
Acquisirà una comprensione precisa di come Linux gestisce processi, memoria, file e connessioni di rete a livello di chiamata di sistema. Scriverà programmi in C che utilizzano le API POSIX per I/O su file, comunicazione tra processi e networking basato su socket. Implementerà applicazioni multithreading ed eliminerà le corse ai dati utilizzando le primitive di sincronizzazione pthreads. Applicherà strumenti avanzati tra cui GDB, strace, Valgrind, AddressSanitizer, perf e io_uring. Tratterà anche le primitive di sicurezza di Linux come namespace, seccomp e capabilities. Al termine, possiederà le competenze per progettare, debuggare e ottimizzare software di sistema che funzioni in modo affidabile in ambienti Linux di produzione.
Come studi in modo pratico Corso Linux System Programming
Come metti in pratica Corso Linux System Programming
Per te che sei un'azienda e vuoi formare il tuo team
Su Dedika per aziende, il corso include esercizi ed esempi personalizzati sul tuo business e secondo le esigenze della tua azienda.
Contenuto del corso
8 Capitoli • 40 LezioniDurata tra 4 e 360 ore (decidi tu)
Capitolo 1NascondiNascondi dettagliVedi dettagliFondamenti di Programmazione di Sistema Linux
Fondamenti di Programmazione di Sistema Linux
Lezione 1 • Introduzione alle Chiamate di Sistema
Dimostra come i programmi utente invocano i servizi del kernel tramite chiamate di sistema, utilizzando i wrapper glibc e la syscall nativa. Collega le funzioni della libreria C alle operazioni del kernel sottostanti.
Lezione 2 • Architettura Linux e Panoramica del Kernel
Tratta lo spazio kernel rispetto allo spazio utente, il design a kernel monolitico e l'astrazione dell'hardware. Stabilisce il quadro concettuale da cui dipendono tutti gli argomenti di programmazione successivi.
Lezione 3 • Compilazione, Linking e Caricamento
Spiega l'intera pipeline della toolchain dal sorgente all'eseguibile, inclusi il linking statico e dinamico. Prepara gli studenti a diagnosticare errori di compilazione e a comprendere la struttura dei file binari.
Lezione 4 • Elementi Essenziali del Linguaggio C per il Lavoro di Sistema
Rivede i puntatori, il layout della memoria, le struct e le operazioni bit a bit, fondamentali per il codice di sistema. Collega la conoscenza generale del C ai pattern di basso livello utilizzati in tutto il corso.
Lezione 5 • Configurazione dell'Ambiente di Sviluppo
Configura un ambiente di sviluppo Linux con GCC, GDB, Make e le librerie essenziali. Garantisce che ogni studente disponga di una baseline di compilazione riproducibile prima di scrivere qualsiasi codice.
Capitolo 2NascondiNascondi dettagliVedi dettagliI/O su File e il Livello VFS
I/O su File e il Livello VFS
Lezione 1 • Operazioni su Directory e Metadati
Insegna l'uso di stat(), l'attraversamento delle directory e la gestione dei link, inclusi quelli fisici e simbolici. Consente ai programmi di ispezionare e manipolare la struttura del filesystem in modo programmatico.
Lezione 2 • Operazioni su File POSIX
Tratta open(), read(), write(), lseek() e close() con tutti i flag e le modalità pertinenti. Insegna i modelli di utilizzo corretti e le insidie comuni come letture e scritture parziali.
Lezione 3 • File Mappati in Memoria
Dimostra l'uso di mmap() per mappare i file nello spazio degli indirizzi del processo, per un I/O veloce e dati condivisi. Collega l'I/O su file ai concetti di memoria virtuale introdotti nei capitoli successivi.
Lezione 4 • Descrittori di File e File Aperti
Spiega la tabella dei file aperti, gli interi dei descrittori di file e le strutture dati del kernel che vi stanno dietro. Fondamenta tutto il successivo lavoro di I/O su un modello preciso di come il kernel traccia i file aperti.
Lezione 5 • Operazioni Avanzate su File
Introduce l'I/O scatter-gather, il troncamento dei file e il hole-punching per file sparsi. Estende le competenze di I/O di base a scenari ad alte prestazioni ed efficienti in termini di storage.
Capitolo 3NascondiNascondi dettagliVedi dettagliProcessi: Creazione, Controllo e Terminazione
Processi: Creazione, Controllo e Terminazione
Lezione 1 • Internals e Attributi dei Processi
Esamina PID, PPID, UID, GID e i campi del descrittore di processo mantenuti dal kernel. Fornisce il vocabolario e il modello dei dati necessari per controllare i processi in modo programmatico.
Lezione 2 • Attesa e Raccolta dei Processi Figli
Insegna wait(), waitpid() e waitid() per raccogliere lo stato di uscita dei figli e prevenire i processi zombie. Garantisce che gli studenti scrivano programmi multi-processo privi di perdite.
Lezione 3 • Esecuzione di Programmi con exec()
Spiega la famiglia exec, il passaggio di argomenti e ambiente e ciò che viene preservato attraverso exec. Consente agli studenti di costruire shell e lanciatori di processi che sostituiscono correttamente le immagini dei processi.
Lezione 4 • Creazione di Processi con fork()
Tratta la semantica copy-on-write, la gestione del valore di ritorno e l'ereditarietà delle risorse dopo fork(). Costruisce le fondamenta per tutti i pattern di programmazione multi-processo del corso.
Lezione 5 • Credenziali e Privilegi dei Processi
Tratta i bit setuid/setgid, i set di capacità e la rimozione dei privilegi per una progettazione sicura dei processi. Prepara gli studenti a scrivere programmi che gestiscono autorizzazioni elevate in modo sicuro.
Capitolo 4NascondiNascondi dettagliVedi dettagliSegnali: Recapito, Gestione e Mascheramento
Segnali: Recapito, Gestione e Mascheramento
Lezione 1 • Concetti sui Segnali e Segnali Standard
Introduce i numeri dei segnali, le disposizioni predefinite e il meccanismo di recapito del kernel. Stabilisce il modello concettuale necessario prima di scrivere qualsiasi codice di gestione dei segnali.
Lezione 2 • Maschere dei Segnali e Blocco
Insegna sigprocmask(), la manipolazione di sigset_t e la protezione delle sezioni critiche tramite blocco. Consente agli studenti di prevenire le corse critiche sui segnali nelle operazioni a più fasi.
Lezione 3 • Programmazione Async-Signal-Safe
Identifica le funzioni async-signal-safe e i pattern per scrivere gestori corretti e rientranti. Previene i bug subdoli che derivano dalla chiamata di funzioni non sicure all'interno dei gestori.
Lezione 4 • Segnali Real-Time e signalfd
Tratta i segnali real-time POSIX, le garanzie di accodamento e l'interfaccia signalfd() per la gestione sincrona. Estende le competenze sui segnali ad architetture ad alta affidabilità e guidate dagli eventi.
Lezione 5 • Installazione dei Gestori di Segnali
Tratta la struttura sigaction(), i SA_flags e le differenze rispetto alla funzione signal() legacy. Insegna il modo corretto e portabile di installare gestori che evitano le corse critiche.
Capitolo 5NascondiNascondi dettagliVedi dettagliComunicazione tra Processi
Comunicazione tra Processi
Lezione 1 • Code di Messaggi POSIX
Insegna mq_open(), mq_send(), mq_receive() e il recapito dei messaggi basato sulla priorità. Fornisce un'alternativa strutturata e tipizzata alle pipe a flusso di byte per IPC orientate ai messaggi.
Lezione 2 • Confronto e Selezione dei Meccanismi IPC
Analizza i compromessi di throughput, latenza, complessità e persistenza tra tutti i tipi di IPC. Fornisce agli studenti gli strumenti per prendere decisioni architetturali informate nella progettazione di sistemi reali.
Lezione 3 • Semafori POSIX
Tratta i semafori con nome e senza nome, sem_wait/sem_post e i pattern di mutua esclusione. Fornisce il livello di sincronizzazione necessario per utilizzare la memoria condivisa in modo sicuro.
Lezione 4 • Pipe e FIFO
Tratta le pipe anonime, la creazione di FIFO e il pattern produttore-consumatore per processi correlati e non correlati. Introduce l'IPC unidirezionale a flusso di byte come primitiva di coordinamento più semplice.
Lezione 5 • Memoria Condivisa POSIX
Dimostra shm_open(), ftruncate() e mmap() per creare regioni di memoria condivisa tra processi. Consente lo scambio di dati a copia zero e ad alto throughput e prepara gli studenti alla sincronizzazione basata su semafori.
Capitolo 6NascondiNascondi dettagliVedi dettagliGestione della Memoria e Memoria Virtuale
Gestione della Memoria e Memoria Virtuale
Lezione 1 • Uso Avanzato di mmap()
Dimostra MAP_ANONYMOUS, MAP_FIXED, pagine huge e madvise() per l'ottimizzazione delle prestazioni. Estende le competenze di mmap() dall'I/O su file alla gestione della memoria per scopi generali.
Lezione 2 • Allocazione di Heap e l'Allocatore
Tratta malloc(), calloc(), realloc(), free() e il funzionamento interno dell'allocatore glibc, incluse le arene. Insegna i modelli di allocazione corretti e come evitare la corruzione dell'heap.
Lezione 3 • Protezione della Memoria e Permessi
Insegna mprotect() per modificare i permessi delle pagine e le pagine di guardia per il rilevamento del buffer overflow. Consente agli studenti di implementare tecniche di rafforzamento della sicurezza a livello di memoria.
Lezione 4 • Architettura della Memoria Virtuale
Spiega le tabelle delle pagine, il layout dello spazio degli indirizzi virtuali e l'interfaccia /proc/pid/maps. Fornisce il modello mentale necessario per comprendere il comportamento dell'allocatore e la semantica di mmap().
Lezione 5 • Rilevamento e Correzione degli Errori di Memoria
Utilizza Valgrind, AddressSanitizer e LeakSanitizer per trovare perdite, use-after-free e overflow. Costruisce le competenze diagnostiche necessarie per mantenere la sicurezza della memoria a livello di produzione.
Capitolo 7NascondiNascondi dettagliVedi dettagliThread POSIX e Sincronizzazione
Thread POSIX e Sincronizzazione
Lezione 1 • Creazione e Ciclo di Vita dei Thread
Tratta pthread_create(), gli attributi dei thread, lo stato di detach e pthread_join(). Stabilisce il modello del ciclo di vita dei thread su cui si basano tutti gli argomenti di sincronizzazione.
Lezione 2 • Read-Write Lock e Barriere
Tratta i rwlock per carichi di lavoro a prevalente lettura e le pthread_barrier per la sincronizzazione di fase. Estende il toolkit di sincronizzazione a pattern in cui il blocco esclusivo è troppo grossolano.
Lezione 3 • Variabili di Condizione
Dimostra pthread_cond_wait(), i risvegli spuri e il pattern del ciclo con predicato. Consente ai thread di attendere efficientemente i cambiamenti di stato senza busy-waiting.
Lezione 4 • Mutex e Sezioni Critiche
Insegna l'inizializzazione dei mutex, la disciplina di lock/unlock e i tipi di mutex con controllo degli errori. Fornisce lo strumento principale per proteggere i dati condivisi dalla modifica concorrente.
Lezione 5 • Storage Thread-Local e Sicurezza
Spiega __thread, pthread_key_t e la sicurezza async-signal nei programmi multi-thread. Insegna i pattern per lo stato per-thread che evitano la condivisione e riducono la contesa sui lock.
Capitolo 8NascondiNascondi dettagliVedi dettagliSocket e Programmazione di Rete
Socket e Programmazione di Rete
Lezione 1 • I/O Non Bloccante ed epoll
Implementa un server guidato dagli eventi utilizzando socket non bloccanti, epoll_create() e modalità edge-triggered. Scala la gestione delle connessioni oltre il modello un thread per connessione.
Lezione 2 • Fondamenti dell'API Socket
Tratta socket(), bind(), listen(), accept(), connect() e le strutture degli indirizzi per IPv4 e IPv6. Stabilisce la superficie API principale su cui si basa tutta la programmazione di rete.
Lezione 3 • UDP e Socket Datagram
Tratta sendto(), recvfrom() e i pattern di comunicazione senza connessione per UDP. Contrappone il recapito non affidabile di UDP a TCP e identifica i casi d'uso appropriati.
Lezione 4 • Opzioni dei Socket e Funzionalità Avanzate
Insegna getsockopt()/setsockopt() per la regolazione dei buffer, keepalive e controllo dell'algoritmo di Nagle. Consente la messa a punto granulare delle prestazioni e dell'affidabilità delle connessioni di rete.
Lezione 5 • Programmazione Client-Server TCP
Implementa un server e un client echo TCP completi con corretta gestione e chiusura della connessione. Insegna la comunicazione affidabile a flusso e l'importanza di gestire invii e ricezioni parziali.
Il tuo certificato valido di completamento
Questo corso è per te:
Sviluppatori backend che desiderano comprendere cosa accade sotto i propri framework.
Ingegneri embedded in transizione verso piattaforme basate su Linux e API POSIX.
Laureati in informatica che vogliono colmare il divario tra gli studi universitari e il lavoro industriale sui sistemi.
Ingegneri DevOps che desiderano diagnosticare problemi a livello di kernel senza procedere a tentativi.
Programmatori C hobbisti pronti a superare i tutorial per passare all'interazione reale con il sistema operativo.
Ricercatori di sicurezza che hanno bisogno di comprendere i meccanismi interni di Linux per trovare vulnerabilità.
Cosa dicono i nostri studenti
Le sue lezioni sono perfette. Ho acquistato il pacchetto annuale e finalmente ho l'opportunità di seguire diversi argomenti di mio interesse senza dover cambiare piattaforma... vi ringrazio per tutto quello che fate, vi ho già raccomandati ad altre persone...

Mi piace come le lezioni vanno dritte al punto e come riesco a cambiare capitoli e saltare contenuti di cui non ho bisogno.

Mi piace il contenuto e il modo di presentazione e trascrizione dei video, che accelera il processo!

La piattaforma è veloce, semplice da usare. La diversità dei contenuti e i video complementari aiutano molto nell'apprendimento.

Principali percorsi formativi
FAQ
Chi è Dedika?
Il certificato è valido in Italia?
I corsi sono gratuiti?
Qual è il carico di lavoro del corso?
Come sono strutturati i corsi?
Come funzionano i corsi?
Qual è la durata dei corsi?
Qual è il costo o il prezzo dei corsi?
Cos’è un corso EAD o online e come funziona?
Corso PDF




















