Passer aux informations sur le produit
Analyse approfondie des systèmes informatiques
Analyse approfondie des systèmes informatiques
Description
Introduction au livre
Une exploration approfondie de la magnifique et fascinante architecture informatique qui se cache sous le code.

Un système informatique est comme un océan.
De même que l'on pense que la vie moderne a pris naissance dans les profondeurs de l'océan primordial, la programmation moderne a également vu le jour dans les premières architectures informatiques.
Les premiers programmeurs ont étudié les schémas matériels des premiers ordinateurs et ont créé les premiers programmes.
Tout comme l'océan, qui peut paraître sombre et dangereux vu de la surface, révèle un monde magnifique et merveilleux sous la surface, explorons la magnifique et merveilleuse architecture informatique cachée sous le code.

Ce livre couvre un large éventail de sujets liés aux systèmes informatiques, allant de la programmation en C aux principes fondamentaux de l'architecture, en passant par le langage assembleur et le multithreading.
Il vous aide à comprendre comment les ordinateurs exécutent les programmes en présentant des sujets que les systèmes informatiques ont en commun, et en expliquant comment les programmes sont conçus pour fonctionner efficacement sur le système.
Commençons notre voyage à la découverte des systèmes informatiques.
  • Vous pouvez consulter un aperçu du contenu du livre.
    Aperçu

indice
Chapitre 0 : Premiers pas

_0.1 Qu'est-ce qu'un système informatique ?
_0.2 À quoi ressemble un système informatique moderne ?
_0.3 Ce que vous apprendrez dans ce livre
_0.4 Avant de commencer ce livre
__0.4.1 Compilateurs Linux, C et GNU
__0.4.2 Autres notations et lignes descriptives

PARTIE IC Langage de programmation

Chapitre 1 Principes fondamentaux de la programmation en C

1.1 Premiers pas avec la programmation en C
__1.1.1 Compilation et exécution de programmes C
1.1.2 Variables et types numériques du langage C
__1.1.3 Types de données C
1.2 Entrée et sortie
__1.2.1 printf
__1.2.2 scanf
1.3 Instructions conditionnelles et boucles
1.3.1 Valeurs booléennes en C
__1.3.2 Boucle de C
_1.4 fonction
__1.4.1 Pile
1.5 Tableaux et chaînes de caractères
__1.5.1 Introduction aux tableaux
__1.5.2 Méthode d'accès aux tableaux
__1.5.3 Tableaux et fonctions
__1.5.4 Introduction aux chaînes de caractères et à la bibliothèque de chaînes de caractères C
structure _1.6
1.6.1 Définition des types de structures
1.6.2 Déclaration des variables de type structure
__1.6.3 Accès aux valeurs des champs
__1.6.4 Passage d'une structure à une fonction
_1.7 Résumé

Chapitre 2 Programmation avancée en C

_2.1 Mémoire et étendue du programme
_2.2 Variables pointeurs en C
__2.2.1 Variables de pointeur
_2.3 Pointeurs et fonctions
2.4 Allocation dynamique de mémoire
__2.4.1 Mémoire du tas
__2.4.2 malloc et free
__2.4.3 Tableaux et chaînes de caractères alloués dynamiquement
__2.4.4 Mémoire du tas et pointeurs pour les fonctions
_2.5 Tableau C
__2.5.1 Tableau unidimensionnel
__2.5.2 Tableau bidimensionnel
_2.6 Chaînes de caractères et bibliothèques de chaînes de caractères
__2.6.1 Chaînes de caractères allouées statiquement (tableaux de caractères)
__2.6.2 Allocation dynamique de chaînes de caractères
__2.6.3 Une bibliothèque pour la manipulation de chaînes et de caractères C
_2.7 Structures C
__2.7.1 Révision des types de structures C
__2.7.2 Pointeurs et structures
__2.7.3 Champs de pointeurs des structures
__2.7.4 Tableau de structures
__2.7.5 Structures autoréférentielles
_2.8 Entrée/Sortie C (Standard et Fichier)
__2.8.1 Entrées/Sorties standard
__2.8.2 E/S de fichiers
__2.8.3 Utilisation des fichiers texte en C
__2.8.4 Fonctions d'entrée/sortie standard et de fichiers dans stdio.h
2.9 Certaines fonctionnalités avancées du langage C
instruction switch __2.9.1
__2.9.2 Arguments de la ligne de commande
__2.9.3 void * type et conversion de type
__2.9.4 Arithmétique des pointeurs
__2.9.5 Bibliothèque C : Utilisation, compilation et liaison
__2.9.6 Écriture et utilisation de votre propre bibliothèque C
__2.9.7 Compilation de C en assembleur
_2.10 Résumé

Chapitre 3 Outils de débogage C

3.1 Débogage avec GDB
3.1.1 Premiers pas avec GDB
__3.1.2 Exemple GDB
_3.2 Détails des commandes GDB
__3.2.1 Raccourcis clavier GDB
__3.2.2 Commandes GDB fréquemment utilisées
_3.3 Débogage de la mémoire avec Balgrind
3.3.1 Exemple de programme avec erreur d'accès à la mémoire du tas
3.3.2 Comment utiliser Memcheck
3.4 Fonctionnalités avancées de GDB
__3.4.1 GDB et make
3.4.2 Attacher GDB à un processus en cours d'exécution
3.4.3 Suivre un processus dans une fourche
3.4.4 Commande de signalisation
__3.4.5 Paramètres DDD et corrections de bugs
3.5 Débogage du code assembleur
3.5.1 Inspection du code binaire à l'aide de GDB
3.5.2 Débogage de l'assembleur à l'aide de DDD
3.5.3 Commandes et exemples de débogage d'assembleur GDB
3.5.4 Résumé des commandes fréquemment utilisées pour le débogage en assembleur
3.6 Débogage de programmes multithread avec GDB
__3.6.1 GDB et Pthreads
__3.6.2 Commandes GDB liées aux threads
__3.6.3 Exemple
3.7 Résumé

PARTIE II FONDEMENTS DES SYSTÈMES INFORMATIQUES

Chapitre 4 Représentation binaire et des données

4.1 Entiers sans base ni signe
__4.1.1 Décimal
__4.1.2 Binaire non signé
__4.1.3 Hexadécimal
4.1.4 Limitations de l'espace de stockage
_4.2 Conversion de base
4.2.1 Conversion binaire et hexadécimale
4.2.2 Convertir en décimal
4.2.3 Conversion des nombres décimaux
_4.3 Entiers binaires signés
4.3.1 Numéros signés
__4.3.2 Complément à deux
4.4 Opérations arithmétiques sur les entiers binaires
__4.4.1 Addition
__4.4.2 Soustraction
4.4.3 Multiplication et division
_4.5 Dépassement de capacité d'entier
__4.5.1 Analogie avec l'odomètre total
__4.5.2 Dépassement de capacité d'un entier binaire
__4.5.3 Résumé du débordement
__4.5.4 Résultats dus à un débordement
_4.6 Opérateurs bit à bit
__4.6.1 ET bit à bit
__4.6.2 OU bit à bit
__4.6.3 XOR bit à bit
__4.6.4 NON bit à bit
__4.6.5 Décalage de bits
_4.7 Ordre des octets entiers
4.8 Nombres réels en binaire
4.8.1 Représentation à virgule fixe
__4.8.2 Représentation en virgule flottante
__4.8.3 Impact de l'Olympe
_4.9 Résumé

Chapitre 5 Architecture des ordinateurs

5.1 Origines de l'architecture informatique moderne
5.1.1 Machine de Turing
__5.1.2 Les premiers ordinateurs électriques
__5.1.3 Alors, que savait von Neumann ?
_5.2 Architecture de Von Neumann
__5.2.1 Processeur
__5.2.2 Unité de traitement
5.2.3 Unité de contrôle
5.2.4 Dispositif de mémoire
__5.2.5 Dispositifs d'entrée et de sortie (E/S)
__5.2.6 Machine de Von Neumann
_5.3 Portes logiques
5.3.1 Portes logiques de base
5.3.2 Autres portes logiques
_5.4 Circuit
__5.4.1 Circuits arithmétiques et logiques
5.4.2 Circuit de commande
5.4.3 Circuit de stockage
5.5 Construction d'un processeur : synthèse des éléments
__5.5.1 ALU
__5.5.2 Fichier d'enregistrement
__5.5.3 Processeur
5.6 Exécution des instructions du programme du processeur
__5.6.1 Exécution pilotée par l'horloge
5.6.2 Résumé : Processeur dans un ordinateur complet
5.7 Pipeline : Accélérer le processeur
_5.8 Considérations relatives aux commandes de pipeline avancées
__5.8.1 Risques liés aux données
5.8.2 Maîtriser les risques
5.9 Perspectives d'avenir : les processeurs d'aujourd'hui
5.9.1 Parallélisme au niveau des commandes
__5.9.2 Multicœur et multithreading matériel
__5.9.3 Exemple de processeur
_5.10 Résumé

PARTIE III PROGRAMMATION D'ASSEMBLAGE

Chapitre 6 C Bas : Plongez dans l’assemblage

6.1 Avantages de l'apprentissage en groupe
6.1.1 Abstractions de haut niveau masquant des détails importants du programme
__6.1.2 Systèmes informatiques aux ressources limitées qui ne permettent pas l'utilisation d'un compilateur.
6.1.3 Analyse de la vulnérabilité
6.1.4 Ordre critique du code dans les logiciels système
6.2 Ce que vous apprendrez dans les chapitres suivants

Chapitre 7 Assembleur X86 64 bits (X86-64)

_7.1 Aperçu de l'assemblage : Notions de base
__7.1.1 Inscription
__7.1.2 Notation avancée des registres
7.1.3 Structure de commande
__7.1.4 Exemples avec opérandes
__7.1.5 Suffixes de commandes
7.2 Commandes couramment utilisées
__7.2.1 Un exemple plus précis
_7.3 Commandes arithmétiques
__7.3.1 Instructions de décalage de bits
__7.3.2 Commandes bit à bit
__7.3.3 Commande d'adresse d'effet de chargement
_7.4 Contrôle conditionnel et boucles
7.4.1 Préparation préliminaire
__7.4.2 instruction if dans l'assembleur
7.4.3 Boucle for en assembleur
7.5 Fonctions en assembleur
7.5.1 Paramètres de fonction
__7.5.2 Exemple de traçage
__7.5.3 traçage principal
_7.6 Récursivité
__7.6.1 Animation : Modifications de la pile d’appels
_7.7 tableau
matrice _7.8
__7.8.1 Tableaux bidimensionnels contigus
__7.8.2 Matrices discontinues
7.9 Structures dans l'assemblage
7.9.1 Alignement et structures des données
7.10 Cas concret : Dépassement de tampon
__7.10.1 Exploitations célèbres de dépassement de tampon
__7.10.2 Critique : Le jeu des devinettes
7.10.3 Examinez de plus près
__7.10.4 Dépassement de tampon : Première tentative
__7.10.5 Dépassement de tampon intelligent : deuxième tentative
__7.10.6 Protection contre les dépassements de tampon

Chapitre 8 Assembleur X86 32 bits (Ia32)

Chapitre 9 Assemblage ARM

Chapitre 10 : Leçons clés d'assemblage

_10.1 Fonctionnalités communes
_10.2 Lire la suite

PARTIE IV OPTIMISATION ET GESTION DES PERFORMANCES

Chapitre 11 : Hiérarchie du stockage et de la mémoire

_11.1 Hiérarchie de la mémoire
_11.2 Dépôt
__11.2.1 Stockage principal
11.2.2 Stockage secondaire
_11.3 Régionalité
__11.3.1 Exemple de localité dans le code
__11.3.2 De la localité au cache
__11.3.3 Localité temporelle
__11.3.4 Localité spatiale
Cache du processeur _11.4
__11.4.1 Cache mappé directement
11.4.2 Défauts de cache et conception associative
__11.4.3 Définir le cache associatif
_11.5 Analyse du cache et Balgrind
__11.5.1 Analyse théorique et évaluation comparative
__11.5.2 Analyse du cache en conditions réelles : CacheGrind
_11.6 Prédiction : Mise en cache sur les processeurs multicœurs
__11.6.1 Cohérence du cache
Protocole MSI __11.6.2
__11.6.3 Mise en œuvre du protocole de cohérence du cache
__11.6.4 Informations complémentaires sur la mise en cache multicœur
_11.7 Résumé

Chapitre 12 Optimisation du code

12.1 Première étape de l'optimisation du code : le profilage du code
__12.1.1 Profilage à l'aide de Colgrind
__12.1.2 Code invariant de boucle en déplacement
_12.2 Autres optimisations du compilateur
__12.2.1 Intégration de fonctions
__12.2.2 Déroulement de boucle
_12.3 Considérations relatives à la mémoire
__12.3.1 Échange de boucles
__12.3.2 Optimisations du compilateur améliorant la localité : Split et Fuse
12.3.3 Profilage de la mémoire avec Massif
_12.4 Leçons clés
__12.4.1 Choisir de bonnes structures de données et de bons algorithmes
12.4.2 Utilisation des fonctions de la bibliothèque standard lorsque cela est possible
12.4.3 Optimisation basée sur les données, et non sur le ressenti
__12.4.4 Décomposer un code complexe en plusieurs fonctions
12.4.5 Prioriser la lisibilité du code
__12.4.6 Faites attention à l'utilisation de la mémoire
__12.4.7 Le compilateur continue de s'améliorer

Chapitre 13 Système d'exploitation

_13.1 Fonctionnement et exécution du système d'exploitation
__13.1.1 Démarrage du système d'exploitation
__13.1.2 Interruptions et pièges
_13.2 Processus
__13.2.1 Multiprogrammation et commutation de contexte
__13.2.2 État du processus
13.2.3 Création et destruction de processus
__13.2.4 fourche
__13.2.5 exécu
__13.2.6 Sortie et attente
_13.3 Mémoire virtuelle
__13.3.1 Adresse mémoire
__13.3.2 Conversion des adresses virtuelles en adresses physiques
__13.3.3 Pagination
13.3.4 Efficacité de la mémoire
_13.4 Communication interprocessus
__13.4.1 Signal
__13.4.2 Transmission de messages
__13.4.3 Mémoire partagée
_13.5 Nettoyage et autres fonctionnalités du système d'exploitation

PARTIE V PROGRAMMATION PARALLÈLE

Chapitre 14 : Utilisation de la mémoire partagée à l’ère multicœur

_14.1 Programmation des systèmes multicœurs
__14.1.1 Impact des systèmes multicœurs sur l'exécution des processus
__14.1.2 Accélération de l'exécution des processus à l'aide de threads
_14.2 Écrire votre premier programme multithread
__14.2.1 Création et jonction de fils de discussion
__14.2.2 Fonction de thread
__14.2.3 Exécution du code
__14.2.4 Retour sur la multiplication scalaire
__14.2.5 Calculs de multiplication scalaire : arguments multiples
_14.3 Synchronisation des threads
14.3.1 Exclusion mutuelle
__14.3.2 Sémaphore
14.3.3 Autres structures de synchronisation
14.4 Mesure des performances des programmes parallèles
__14.4.1 Performance des programmes parallèles
__14.4.2 Sujets à approfondir
_14.5 Cohérence du cache et faux partage
14.5.1 Mise en cache sur les systèmes multicœurs
14.5.2 Faux partage
__14.5.3 Correction du faux partage
_14.6 Sécurité du filetage
__14.6.1 Traitement des problèmes de sécurité des filetages
_14.7 Gestion implicite des threads avec OpenMP
__14.7.1 Pragma
__12.7.2 Hello Threading : Version OpenMP
__14.7.3 Un exemple plus complexe : CountSort dans OpenMP
__14.7.4 En savoir plus sur OpenMP
_14.8 Résumé
14.8.1 Points clés
__14.8.2 Lire la suite

Chapitre 15 Autres systèmes parallèles et modèles de programmation parallèle

15.1 Calcul hétérogène : accélérateurs matériels, calcul GPU à usage général, CUDA
__15.1.1 Accélérateur matériel
__15.1.2 Vue d'ensemble de l'architecture GPU
__15.1.3 Calcul GPGPU
__15.1.4 CUDA
__15.1.5 Autres langages de programmation GPGPU
15.2 Systèmes de mémoire distribuée, passage de messages et MPI
__15.2.1 Modèles de traitement parallèle et distribué
__15.2.2 Protocole de communication
__15.2.3 Interface de passage de messages
__15.2.4 MPI Hello World
__15.2.5 Multiplication scalaire MPI
__15.2.6 Défis des systèmes distribués
_15.3 Exascale et au-delà : informatique en nuage, mégadonnées et avenir de l’informatique
15.3.1 Informatique en nuage
__15.3.2 MapReduce
15.3.3 Perspectives d'avenir : opportunités et défis

Image détaillée
Image détaillée 1

Avis de l'éditeur
Un guide d'informatique pour les développeurs recherchant une programmation efficace

Ce livre traite principalement de sujets intermédiaires en informatique, tels que l'introduction aux systèmes informatiques ou à l'architecture des ordinateurs, afin de vous aider à comprendre comment les ordinateurs exécutent les programmes.
De la programmation en C à la compréhension profonde du fonctionnement des circuits, nous ne présentons ici que les connaissances informatiques essentielles à la conception de programmes efficaces.
En décomposant l'ordinateur en ses différentes couches et en examinant comment il exécute les programmes dans les circuits, comment évaluer les performances des programmes et comment écrire des programmes parallèles, nous serons en mesure de créer des programmes plus efficaces.


Public cible

- Un programmeur débutant curieux de savoir comment le programme qu'il a écrit est exécuté.
- Les étudiants universitaires qui souhaitent acquérir des connaissances de base liées à leur spécialisation, telles que la programmation système et les systèmes d'exploitation.
- Développeurs juniors qui souhaitent concevoir des programmes plus efficaces

Ce que vous apprenez

- Comment les ordinateurs exécutent les programmes, des langages de haut niveau aux représentations binaires et aux niveaux des circuits.
- Comment programmer en C et en langage assembleur
- L'impact des systèmes informatiques sur les performances des programmes
- Comment implémenter des programmes parallèles à mémoire partagée en utilisant pthreads
SPÉCIFICATIONS DES PRODUITS
- Date d'émission : 30 décembre 2023
- Nombre de pages, poids, dimensions : 788 pages | 183 × 235 × 40 mm
- ISBN13 : 9791169211765
- ISBN10 : 1169211763

Vous aimerez peut-être aussi

카테고리