Scegli la tua lingua
Corso per programmatore di sistema
Più di 2 milioni di studenti in tutto il mondo

Corso per programmatore di sistema

Passi dalla scrittura di codice applicativo al possesso dell'intero stack di sistema: interfacce del kernel, gestione della memoria, concorrenza e debug a livello hardware. Questo corso Le fornisce le basi tecniche approfondite che distinguono gli ingegneri di sistema senior da tutti gli altri. Ogni concetto è fondato su strumenti reali, codice reale e scenari di produzione reali.

Dedika per aziende

Cosa imparerai:

Costruirà un modello mentale completo di come il software interagisce con l'hardware e il kernel Linux, a partire dall'architettura della CPU e dal layout della memoria di processo. Padroneggerà il linguaggio C per il lavoro di sistema, inclusa la gestione manuale della memoria, l'aritmetica dei puntatori e i pattern di programmazione difensiva. Il corso copre l'assembly x86-64, il debug di basso livello con GDB e l'analisi binaria con objdump. Implementerà la creazione di processi, i thread POSIX, le primitive di sincronizzazione e la comunicazione tra processi. Gli argomenti avanzati includono la memoria virtuale, la progettazione di allocatori personalizzati, l'I/O su file ad alte prestazioni e lo sviluppo di moduli del kernel. L'hardening della sicurezza, gli aspetti interni della containerizzazione, lo scheduling in tempo reale e il profiling delle prestazioni con perf completano il curriculum.

Come studi in modo pratico Corso per programmatore di sistema

Come metti in pratica Corso per programmatore di sistema

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

  • Lezione 1 • Toolchain e ambiente di compilazione

    Configura compilatori, linker, assemblatori e debugger utilizzati durante il corso. Garantisce che ogni studente possa compilare, linkare e ispezionare file binari fin dal primo giorno.

  • Lezione 2 • Astrazioni del sistema operativo

    Introduce lo spazio kernel vs. spazio utente, le chiamate di sistema e la gestione delle risorse del sistema operativo. Collega i concetti hardware alle interfacce software che i programmatori utilizzano quotidianamente.

  • Lezione 3 • Layout della memoria di processo

    Esamina i segmenti stack, heap, BSS, dati e testo in un processo in esecuzione. Fornisce il modello spaziale necessario per l'aritmetica dei puntatori e la gestione della memoria.

  • Lezione 4 • Elementi essenziali di architettura dei calcolatori

    Tratta i registri della CPU, i cicli di istruzione e la gerarchia di memoria. Stabilisce il vocabolario hardware necessario per ogni argomento di sistema successivo.

  • Lezione 5 • Livelli di privilegio e anelli di protezione

    Spiega gli anelli di privilegio implementati via hardware e come il sistema operativo applica l'isolamento. Prepara gli studenti a ragionare sui confini di sicurezza nel codice di sistema.

Capitolo 2Vedi dettagli

Programmazione C per lavoro di sistema

  • Lezione 1 • Tipi di dato e rappresentazione in memoria

    Tratta la larghezza degli interi, l'endianness, l'allineamento e il padding nelle struct. Fornisce agli studenti le basi su come i tipi C si mappano sui byte effettivi in memoria.

  • Lezione 2 • Gestione degli errori e codifica difensiva

    Introduce errno, le convenzioni sui codici di ritorno e le strategie di asserzione in C. Costruisce abitudini che prevengono fallimenti silenziosi nel codice di sistema in produzione.

  • Lezione 3 • Preprocessore C e macro

    Spiega le guardie di inclusione, le macro object-like e function-like e la compilazione condizionale. Consente agli studenti di scrivere header di sistema portabili e configurabili.

  • Lezione 4 • Gestione manuale della memoria

    Tratta malloc, calloc, realloc e free, oltre agli errori di allocazione comuni. Gli studenti imparano a rilevare perdite di memoria e a usare strumenti in stile valgrind per la verifica.

  • Lezione 5 • Puntatori e aritmetica dei puntatori

    Insegna la dichiarazione dei puntatori, la dereferenziazione e l'aritmetica su array e buffer. Abilita direttamente la gestione manuale della memoria e l'accesso ai registri hardware.

Capitolo 3Vedi dettagli

Linguaggio assembly e debug di basso livello

  • Lezione 1 • Assembly inline in C

    Insegna la sintassi assembly inline estesa di GCC, i vincoli e le clobber list. Consente l'accesso diretto all'hardware da C senza un file assembly separato.

  • Lezione 2 • Set di istruzioni principale

    Tratta le istruzioni di spostamento dati, aritmetiche, logiche e di controllo del flusso. Fornisce agli studenti un vocabolario sufficiente per leggere l'output del compilatore e scrivere piccole routine.

  • Lezione 3 • Set di registri x86-64 e convenzioni di chiamata

    Associa i registri general-purpose, di segmento e SIMD ai loro ruoli. Stabilisce il contratto ABI che il codice C e assembly devono rispettare quando interagiscono.

  • Lezione 4 • Analisi binaria con disassemblatori

    Utilizza objdump e strumenti simili per ispezionare file binari compilati e librerie condivise. Collega la comprensione a livello di codice sorgente al codice macchina effettivo negli artefatti di produzione.

  • Lezione 5 • Tecniche di debug di basso livello

    Applica GDB a livello assembly: breakpoint, watchpoint e ispezione dei registri. Gli studenti diagnosticano crash e corruzione della memoria leggendo lo stato macchina grezzo.

Capitolo 4Vedi dettagli

Gestione di processi e thread

  • Lezione 1 • Segnali ed eventi asincroni

    Spiega l'invio dei segnali, il mascheramento e la registrazione degli handler con sigaction. Prepara gli studenti a scrivere codice safe per i segnali e a gestire le notifiche asincrone del sistema operativo.

  • Lezione 2 • Creazione e ciclo di vita dei processi

    Tratta la semantica di fork, exec, wait ed exit in ambienti POSIX. Gli studenti comprendono come il sistema operativo traccia lo stato di un processo dalla creazione alla terminazione.

  • Lezione 3 • Fondamenti di thread POSIX

    Introduce la creazione di pthread, il join e il detachment insieme agli attributi dei thread. Stabilisce il modello di threading utilizzato in tutti gli argomenti successivi sulla concorrenza.

  • Lezione 4 • Primitivi di sincronizzazione

    Tratta mutex, variabili condizione, semafori e lock read-write. Gli studenti applicano ciascun primitivo per eliminare le corse critiche nei programmi a memoria condivisa.

  • Lezione 5 • Comunicazione tra processi (IPC)

    Esamina pipe, FIFO, memoria condivisa e code di messaggi per IPC. Gli studenti selezionano e implementano il meccanismo IPC appropriato per un dato vincolo di progettazione.

Capitolo 5Vedi dettagli

Gestione della memoria e memoria virtuale

  • Lezione 1 • Profilazione della memoria e rilevamento delle perdite

    Applica Valgrind Memcheck, AddressSanitizer e /proc/maps per trovare perdite di memoria e corruzione. Gli studenti producono profili di memoria puliti per codice di grado production.

  • Lezione 2 • Architettura della memoria virtuale

    Spiega le tabelle delle pagine, il funzionamento del TLB e l'hardware di traduzione degli indirizzi. Fornisce le basi per comprendere mmap, huge page ed effetti NUMA.

  • Lezione 3 • Huge page e consapevolezza NUMA

    Introduce le huge page trasparenti, l'allocazione esplicita di huge page e la topologia NUMA. Gli studenti regolano il posizionamento della memoria per carichi di lavoro di sistema sensibili alla latenza.

  • Lezione 4 • Progettazione di allocatori di memoria personalizzati

    Costruisce un allocatore in stile slab utilizzando sbrk e mmap come backing store. Rafforza la comprensione di frammentazione, coalescenza e metadati dell'allocatore.

  • Lezione 5 • Mappatura della memoria con mmap

    Tratta mappature anonime e basate su file, flag di protezione e MAP_SHARED vs. MAP_PRIVATE. Gli studenti usano mmap per I/O zero-copy e IPC a memoria condivisa.

Capitolo 6Vedi dettagli

File system e sottosistemi di I/O

  • Lezione 1 • I/O avanzato: Scatter-Gather e asincrono

    Introduce readv/writev, io_uring ed epoll per I/O ad alte prestazioni. Consente agli studenti di costruire server guidati da eventi con un overhead minimo di chiamate di sistema.

  • Lezione 2 • Ottimizzazione delle prestazioni di storage

    Applica fio, iostat e blktrace per misurare e migliorare il throughput e la latenza di I/O. Gli studenti identificano i colli di bottiglia nello stack di storage, dall'applicazione al dispositivo.

  • Lezione 3 • I/O bufferizzato vs. non bufferizzato

    Contrappone il buffering stdio all'I/O diretto tramite chiamata di sistema e spiega quando ciascuno è appropriato. Gli studenti misurano l'impatto prestazionale delle strategie di buffering sul throughput.

  • Lezione 4 • API di I/O su file POSIX

    Tratta open, read, write, lseek e close con tutti i flag e le modalità pertinenti. Stabilisce il modello dei descrittori di file come astrazione I/O universale in POSIX.

  • Lezione 5 • Interni del file system

    Esamina inode, voci di directory, extent e journaling nei file system moderni. Gli studenti comprendono come le strutture su disco influenzano la durabilità e il ripristino da crash.

Capitolo 7Vedi dettagli

Interfacce kernel e driver di dispositivo

  • Lezione 1 • Sviluppo di moduli del kernel

    Tratta le funzioni init/exit del modulo, il sistema Kbuild e i requisiti dello stile di codifica del kernel. Gli studenti compilano, caricano e scaricano un modulo kernel minimale in sicurezza.

  • Lezione 2 • Memoria del kernel e DMA

    Spiega kmalloc, vmalloc e allocazione DMA-coherent per l'uso nei driver. Gli studenti scelgono l'API di allocazione corretta in base a dimensione, allineamento e requisiti DMA.

  • Lezione 3 • Basi del driver di dispositivo a caratteri

    Implementa i callback delle file_operations: open, release, read, write e ioctl. Gli studenti espongono una sorgente dati del kernel allo spazio utente attraverso un file di dispositivo.

  • Lezione 4 • Interni delle chiamate di sistema

    Traccia una chiamata di sistema dallo spazio utente attraverso la syscall table fino all'handler nel kernel. Gli studenti comprendono il cambio di contesto, il passaggio degli argomenti e i percorsi di ritorno.

  • Lezione 5 • Gestione degli interrupt e bottom half

    Registra gli handler IRQ, implementa tasklet e workqueue per il lavoro differito. Gli studenti scrivono codice driver interrupt-safe che soddisfa i vincoli di latenza in tempo reale.

Capitolo 8Vedi dettagli

Analisi e ottimizzazione delle prestazioni

  • Lezione 1 • Tecniche di ottimizzazione della cache

    Applica il layout delle strutture dati, il prefetching e il loop tiling per migliorare l'utilizzo della cache. Gli studenti misurano i tassi di cache miss prima e dopo ogni trasformazione.

  • Lezione 2 • Metodologia di benchmarking

    Tratta la progettazione di microbenchmark, l'analisi statistica e come evitare le insidie comuni. Gli studenti producono risultati di benchmark riproducibili che resistono alla revisione tra pari.

  • Lezione 3 • Ottimizzazioni del compilatore e Link-Time Optimization

    Esplora i livelli -O, PGO, LTO e i flag di auto-vectorizzazione. Gli studenti verificano che le trasformazioni del compilatore producano binary corretti e più veloci.

  • Lezione 4 • Contesa sui lock e scalabilità

    Misura la contesa sui lock con perf lock e applica tecniche lock-free ove appropriato. Gli studenti riprogettano la sincronizzazione per scalare su molti core della CPU.

  • Lezione 5 • Contatori di prestazione della CPU e profilazione

    Utilizza perf stat, perf record e flame graph per identificare gli hotspot della CPU. Gli studenti correlano i dati dei contatori hardware con il codice sorgente per guidare l'ottimizzazione.

Certificazione

Il tuo certificato valido di completamento

Questo corso è per te:

  • Ingegnere backend: desidera smettere di considerare il sistema operativo come una scatola nera.

  • Studente di informatica: pronto ad applicare la teoria a codice reale a livello kernel.

  • Sviluppatore firmware: necessita di solide basi Linux e POSIX per il lavoro embedded.

  • Ingegnere DevOps: cerca una comprensione più approfondita del funzionamento interno di container e scheduler.

  • Ricercatore di sicurezza: deve comprendere a fondo la struttura della memoria e i confini dei privilegi.

  • Persona in cambiamento di carriera: in transizione da ruoli di scripting all'ingegneria delle infrastrutture di basso livello.

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