Scegli la tua lingua
Corso Linux System Programming
Più di 2 milioni di studenti in tutto il mondo

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.

Dedika per aziende

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.

Clicca qui

Contenuto del corso

8 Capitoli • 40 LezioniDurata tra 4 e 360 ore (decidi tu)

Capitolo 1Vedi dettagli

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 2Vedi dettagli

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 3Vedi dettagli

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 4Vedi dettagli

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 5Vedi dettagli

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 6Vedi dettagli

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 7Vedi dettagli

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 8Vedi dettagli

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.

Certificazione

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...
Giulio Carlo
Giulio CarloStudente di Marketing Digitale
Mi piace come le lezioni vanno dritte al punto e come riesco a cambiare capitoli e saltare contenuti di cui non ho bisogno.
Mariana Ferres
Mariana FerresStudentessa di Fotografia
Mi piace il contenuto e il modo di presentazione e trascrizione dei video, che accelera il processo!
Luciana Alvarenga
Luciana AlvarengaStudentessa di Nail Design
La piattaforma è veloce, semplice da usare. La diversità dei contenuti e i video complementari aiutano molto nell'apprendimento.
André Felipe
André FelipeStudente di Prompt Engineering

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