Systèmes informatiques : Une perspective pour programmeurs (Édition mondiale)
Une étude approfondie sur la manière dont les systèmes informatiques exécutent des programmes et stockent des informations. Ce cours comble le fossé entre la programmation de haut niveau et le matériel sous-jacent, en couvrant la représentation au niveau machine, l'architecture des processeurs, la hiérarchie mémoire et la programmation concurrente.
Aperçu du cours
Résumé du contenu
Une analyse approfondie de la manière dont les systèmes informatiques exécutent des programmes et stockent des informations. Ce cours comble le fossé entre la programmation de haut niveau et le matériel sous-jacent, en couvrant la représentation au niveau machine, l'architecture du processeur, la hiérarchie de mémoire et la programmation concurrente.
Maîtrisez l'art de la programmation système en comprenant l'interface matériel-logiciel.
Auteur : Randal E. Bryant, David R. O'Hallaron
Remerciements : Soutenu par les étudiants et enseignants du cours 15-213 à l'Université Carnegie Mellon. Les remerciements incluent les contributions de Manasa S. et Mohit Tahiliani.
Objectifs d'apprentissage
- Identifier comment l'information est représentée à l'aide de bits et de son contexte au sein d'un système.
- Suivre les quatre étapes du système de compilation, depuis le code source jusqu'à l'exécutable.
- Décrire la structure organisationnelle du matériel et la nature hiérarchique des dispositifs de stockage.
- Convertir entre les notations décimale, binaire et hexadécimale, et expliquer l'adressage au niveau machine (ordre des octets).
- Effectuer des opérations au niveau des bits et logiques en C, et prédire les résultats des décalages arithmétiques.
- Analyser les encodages des entiers pour identifier les vulnérabilités potentielles liées aux dépassements de capacité et aux erreurs de conversion.
- Analyser la correspondance entre les constructions C (boucles, branches, procédures) et les instructions assembly x86-64.
- Déconstruire la pile d'exécution pour expliquer la transmission des paramètres, le stockage des variables locales et la gestion des appels récursifs.
- Évaluer les structures de mémoire pour des données hétérogènes et appliquer les règles d'alignement pour calculer les besoins totaux de stockage.
- Définir l'état visible par le programmeur Y86-64 et encoder/décoder des instructions en séquences d'octets.