On considère qu’un processus ‘Pflush’ (thread NT ou process UNIX) du serveur est alloué pour reporter des
pages du cache sur disques de manière asynchrone au traitement des requêtes des clients. Ce processus peut
repérer les pages modifiées grâce à la structure bitmap.
Question II.1
a) Si le serveur ne gère pas de journal, et qu’il garantit l’atomicité des transactions des clients avec un
commit atomique, quelles pages le processus ‘Pflush’ peut-il reporter sur disque si le cache est dans
l’état présenté figure 1 ? Justifiez.
Si on ne gère pas de journal, il faut reporter les pages modifiées sur un espace libre du disque avant d’acquiescer
au commit, puis écraser la table des pages en une entrée sortie. Rien n’empêche de flusher les pages modifiées
sur disque. Vu qu’elles sont écrites sur une zone de mémoire libre, l’atomicité n’est pas mise en danger. Pflush
peut donc reporter sur disque toutes les pages modifiées du cache, même avant la demande de validation, pour
répartir les I/O dans le temps.
b) Et si le serveur maintient un journal avant ?
Si le serveur maintient un journal avant, on peut reporter les pages modifiées sur disque en lieu et place des
pages avant modification, à condition que la page du cache contenant le journal (les valeurs avant modification
élémentaires de chaque page) soit reportée avant pour éventuellement défaire les mises à jour.
Le serveur reçoit la demande de validation (commit) de la transaction Ti.
Question II.2
a) Si le serveur ne gère pas de journal, quelles pages le processus ‘Pflush’ doit-il reporter sur disque pour
garantir la durabilité des transactions face à la reprise à chaud ? Justifiez.
Il doit reporter toutes les pages modifiées dans une zone libre de la mémoire et écraser la table des pages. La
durabilité est ainsi assurée.
b) Et si le serveur maintient un journal après ?
Il doit écrire sur disque les modifications faites dans la page de journal après présente en cache au commit de la
transaction, si celle ci a fait des modifications depuis le dernier report du journal après. Toutes les autres pages
modifiées peuvent rester en cache.
Partie III – Politique STEAL/NO FORCE et reprise après panne
On suppose maintenant que le serveur gère un journal avant et un journal après. Il y a donc une page disponible
en RAM pour chaque journal.
La figure suivante représente les structures de données de la mémoire primaire :
1. La structure bitmap indiquant les pages de données modifiées par rapport à leur image sur disque
2. Les 5 pages de données
3. Une page pour le journal d’images avant et une autre pour le journal d’images après
1 1
1
1
1
Bitmap
Cache de données Journal après
Journal avant
Figure 2. Contenu de la mémoire primaire
Supposons que A,B,C,D,E,F,G,H,I et J soient des articles de la base de données, valant tous 0, contenus deux par
deux sur disque dans 5 pages distinctes. A et B sont stockés dans une même page, de même que C et D, E et F, G
et H, I et J. Supposons que le cache de données est vide au départ, ainsi que les pages de la mémoire primaire
allouées aux journaux.