Sistemi Informatici: Una Prospettiva per Programmatore (Edizione Globale)
Un'approfondita analisi su come i sistemi informatici eseguono programmi e memorizzano informazioni. Questo corso colma il divario tra la programmazione a alto livello e l'hardware sottostante, coprendo la rappresentazione a livello macchina, l'architettura del processore, la gerarchia della memoria e la programmazione concorrente.
Panoramica del corso
Riepilogo del contenuto
Un'approfondita analisi su come i sistemi informatici eseguono programmi e memorizzano informazioni. Questo corso colma il divario tra la programmazione ad alto livello e l'hardware sottostante, coprendo la rappresentazione a livello macchina, l'architettura del processore, la gerarchia della memoria e la programmazione concorrente.
Padroneggia l'arte della programmazione di sistema comprendendo l'interfaccia hardware-software.
Autore: Randal E. Bryant, David R. O'Hallaron
Ringraziamenti: Supportato dagli studenti e dai docenti del corso 15-213 presso la Carnegie Mellon University. I ringraziamenti includono contributi di Manasa S. e Mohit Tahiliani.
Obiettivi di apprendimento
- Identificare come le informazioni sono rappresentate tramite bit e contesto all'interno di un sistema.
- Tracciare le quattro fasi del sistema di compilazione dal codice sorgente all'eseguibile.
- Descrivere la struttura organizzativa dell'hardware e la natura gerarchica dei dispositivi di archiviazione.
- Convertire tra notazioni decimale, binaria e esadecimale e spiegare l'indirizzamento a livello macchina (Endianness).
- Eseguire operazioni a livello di bit e logiche in C e prevedere i risultati degli shift aritmetici.
- Analizzare gli encoding degli interi per identificare vulnerabilità potenziali legate al sovrapposizione e errori di casting.
- Analizzare la mappatura tra costrutti C (cicli, ramificazioni, procedure) e istruzioni assembly x86-64.
- Scomporre lo stack di runtime per spiegare come vengano passati i parametri, memorizzate le variabili locali e gestiti i richiami ricorsivi.
- Valutare i layout di memoria per strutture dati eterogenee e applicare le regole di allineamento per calcolare i requisiti totali di archiviazione.
- Definire lo stato visibile al programmatore Y86-64 e codificare/decodificare istruzioni in sequenze di byte.