Bus

La communication du processeur avec le reste du monde, c'est à dire avec le user agent qui est le point de regroupement de tous les devices, se fait uniquement avec un unique bus. Ce bus est composé de 3 canaux pour permettre d'accéder à une donnée :

La taille du canal de donnée varie selon les ordinateurs, mais une bonne approximation est de considérer qu'elle est de 64bits, transmis de façon parallèle.

Canal de contrôle

Détermine :

Canal d'adresse

La partie adresse du bus doit permettre de déterminer à la fois déterminer le device et l'endroit sur celui-ci où lire/écrire l'information. Par exemple, si la taille du bus d'adresse est de 64 bit, on peut (c'est un exemple) :

Ce qui nous laisse la place d'accéder à tous les devices branchés :

Cette technique d'adressage unifiée est appelée IO memory mapping. L'intérêt est d'ajouter une couche d'indirection (rappelez vous la règle fondamentale de l’ingénierie logicielle), le processeur n'a pas à avoir plusieurs jeux d'instructions selon le device auquel il veut accéder, tout est unifié.

L'exemple précédent est très simplifié car les devices hors mémoire n'ont pas besoin de beaucoup d'adressage. Il est en effet impossible d'accéder directement à tout byte. La communication avec ces devices se fait par un protocole similaire aux protocoles de communication réseaux la communication via des paquets de taille fixe, en lecture et en écriture : l'essentiel de la communication passe par la partie donnée du bus et non la partie adresse.

Ceci pose cependant un problème car l'accès à chaque byte d'un disque dur va mobiliser le processeur et l'accès à un disque dur est relativement lent par rapport à la vitesse d'un processeur, ce qui ralentie inutilement le système puisque le processeur va passer son temps à attendre que l'accès disque soit terminé. Pour palier ce problème on utilise un procédé nommé Direct Memory Access. Par exemple pour lire des données :

  1. plutôt que d'envoyer les données lues au processeur, on les envoie en mémoire RAM
  2. plutôt que de demander 1 byte à la fois, on en demande directement 4KiB (on demande une page de donnée)
  3. une fois la demande de lecture de la page faite par le processeur au device, le device communique directement avec la RAM via le System Agent pour effectuer le transfert byte à byte du device à la RAM
  4. une fois la page transférée le device génère une Interruption pour prévenir le processeur de la fin du traitement.

Ue série de vidéos explicatives sur ces mécaniques :

  1. I/O
  2. I/O memory mapping
  3. les interruptions
  4. Direct memory Access

Ces IO mapping sont placés dans la partie réservée au noyau d'un OS :

Canal donnée

Le canal de donnée est le nombre de byte que l'on peut transférer. Sa taille est une puissance de 2 bit. Actuellement au moins 64b et souvent 128b pour pouvoir transférer deux qword en une fois.

La taille logique de transfert étant toujours 64b = 8B.