Écriture bufferisée
L'écriture bufferisée en informatique est une technique qui consiste à stocker des données temporairement en mémoire vive (ou mémoire tampon), avant de les écrire par blocs sur un support (disque dur, base de données, CD-ROM, ...).
L'objectif de l'écriture bufferisée est de profiter de la vitesse très supérieure d'accès à la mémoire vive pour minimiser ceux à des supports usuellement beaucoup plus lents. Ceci présente deux avantages :
- N'utilisant pas le support d'écriture plus lent, le logiciel n'a pas à attendre que l'écriture ait été effectuée. En conséquence, celui-ci est plus rapide.
- Des supports ne permettant qu'un accès à un moment donné (comme un disque dur ou un graveur de CDROM) sont sollicités moins souvent. Ceci permet de traiter d'un coup toutes les écritures d'un logiciel donné, et de réduire les temps d'accès dans le cas de plusieurs logiciels devant y accéder.
Fonctionnement
Algorithme
Usuellement, l'écriture bufferisée va en principe être une fonction se substituant aux fonctions d'écritures sur le support, et gérant automatiquement son buffer.
L'écriture bufferisée fait appel à deux concepts :
- Le buffer, une zone de mémoire vive stockant temporairement les données. Concrètement, cette zone peut être un tableau de bits, une chaîne de caractères, une liste, ...
- Le flush du buffer, ou vidage de la mémoire tampon, qui consiste à écrire les données du buffer sur le support.
La fonction d'écriture dans le tampon (se substituant à celle d'écriture sur le support) suit l'algorithme suivant :
SI le buffer est plein ALORS
vider le buffer
FIN SI
SI le buffer n'existe pas ALORS
créer le buffer
FIN SI
ECRIRE donnée dans le buffer
La fonction de flush suit l'algorithme suivant :
TANT QU'il y'a des données dans le buffer FAIRE
ECRIRE donnée du buffer sur le support
FIN TANT QUE
EFFACER les données du buffer
Ces algorithmes sont bien sûrs très génériques, mais représentent le principe d'écriture bufferisée.
Utilisation habituelle
Habituellement, l'écriture bufferisée est gérée par le biais d'une bibliothèque logicielle du système, ou de surcouches y faisant appel. Ceci permet au système d'exploitation de faire vider tous les tampons d'écritures (ou buffer) en cas de besoin (mise en veille, extinction, ...), et d'ordonnancer l'écriture sur les disques.
Problèmes de l'écriture bufferisée
L'écriture bufferisée possède principalement deux inconvénients, provenant du décalage entre la demande d'écriture d'un logiciel et l'écriture effective :
- Les données ne sont effectivement stockées sur le support que lors du vidage du buffer. Ceci induit qu'en cas de débranchement du support, ou d'une panne de système, elles ne sont pas écrites, ce qui peut aboutir à une perte de données, voire à une corruption. C'est l'une des raisons pour lesquelles il est fortement recommandé de ne pas éteindre un ordinateur en coupant le courant électrique ;
- Dans le cas de plusieurs processus ou logiciels accédant à la même donnée, l'écriture peut donner naissance à une race condition : la modification d'une même donnée au même moment. Ceci peut par exemple arriver dans l'utilisation d'une base de données sans le recours aux transactions.