Title: Gestion de Fichiers
1Gestion de Fichiers
- Tri Interne Efficace et Tri Externe
-
2Plan du cours daujourdhui
- Vue générale
- Tri interne efficace heapsort
- Tri de grands fichiers
- mergesort
- Temp dexécution de mergesort
- Le cout associé à lallongement des fichiers
- Amélioration de la performance de mergesort
- Ajout de hardware
- Améliorations algorithmiques
- Chevauchement des opérations dentrée/sortie
3Vue générale
- Ce cours sintéresse à la question du tri
efficace dans le traitement des fichiers. - En particulier, il sintéresse au tri efficace
dans deux cas - Le cas où le fichier peut tenir en mémoire
- Le cas où le fichier est trop grand pour tenir en
mémoire gt Tri externe - Les techniques de fusion discutées précédemment
(i.e. traitement coséquentiel) sont très utiles
pour le tri de grands fichiers.
4Une approche efficace pour le triage en mémoire
interne
- Nous navons considéré jusquà maintenant que le
triage de fichiers assez petits pour tenir en
mémoire - On peut lire le fichier du disque en mémoire
- On peut le trier en utilisant une procédure
habituelle. - On peut écrire le fichier trié sur le disque
- Si le fichier est lu et écrit de facon aussi
efficace que possible et si le meilleur
algorithme de triage est utilisé, il semblerait
que lon ne peut pas améliorer cette procédure. - Néanmoins, une amélioration est possible par un
traitement en parallèle on peut, en effet, lire
et écrire en même temps que lon fait le triage.
5Chevauchement du traitement et de
lentrée/sortie heapsort
- heapsort peut être combinée avec la lecture du
disque et lécriture sur le disque, de la manière
suivante - Le heap peut être construit pendant que le
fichier non trié est lu du disque. - Le tri peut être fait pendant que la partie triée
du fichier est écrite sur le disque.
6Construction du heap pendant la lecture du
fichier
- Au lieu de faire un seek à chaque fois que lon
veut un nouvel enregistrement, on peut lire des
blocs denregistrements en une seule fois dans
une mémoire tampon et opérer sur ce bloc avant de
se tourner vers un autre bloc. - La mémoire tampon dentrée pour chaque nouveau
bloc devient une partie de la mémoire reservée
pour le heap. A chaque fois que lon lit un
nouveau bloc, on lattache à la fin du heap
courant. - Le premier nouvel enregistrement à ajouter est à
la fin du tableau contenant le heap comme requis
par la fonction dinsertion dans le heap. - Une fois quun enregistrement est inserré, le
nouvel enregistrement suivant est a la fin du
tableau contenant le heap, de nouveau, prêt à
être inserré.
7Construction du heap pendant la lecture du
fichier (suite)
- Afin de construire le heap en même temps, on a
besoin de mémoires tampon multiples tout en
traitant les enreg.s dun bloc, on peut
simultanément lire un autre bloc qui sera traité
plus tard. - Question Combien de mémoires tampon doivent être
utilisées et où doit-on les mettre? - Réponse Le nombre de mémoires tampon correspond
au nombre de blocs dans le fichier et elles
doivent être localisées en séquence dans le
tableau. - Puisque la construction du heap est plus rapide
que la lecture de blocs, il peut y avoir certains
delais.
8Faire le heapsort tout en écrivant le fichier
trié sur le disque (Fig. 8.19)
- Le plus petit enregistrement du heap est connu
dès la première étape du heapsort. Donc, il peut
être mis dans une mémoire tampon de sortie
jusquà ce quun bloc entier trié soit determiné. - Pendant que ce bloc est écrit sur le disque, un
nouveau bloc trié peut être préparé, etc - Puisqua chaque fois quun nouveau bloc est écrit
sur le disque, la taille du heap diminue par un
facteur de un bloc, ce bloc peut être utilisé
comme mémoire tampon. Ainsi on a autant de
mémoire tampon de sortie quil y a de bloc dans
le fichier. - Puisque tout le I/O est séquentiel, cet
algorithme marche aussi bien avec des disques que
avec des bandes magnétiques. De même, três peu de
seeking est nécessaire et la procédure est donc
efficace.
9Une technique efficace pour trier de large
fichiers sur disques mergesort
- Une solution pour le problème des fichiers qui ne
tiennent pas en mémoire a déjà été présentée sous
la forme de lalgorithme pour triage de clés.
Cependant, cet algorithmes a deux insuffisances - Une fois que les clés étaient triées, il était
couteux de chercher (seek) chaque enregistrement
en ordre et de les écrire dans le nouveau fichier
trié. - Si le fichier contient de nombreux
enregistrements, lindexe lui-même ne tiendra pas
en mémoire. - Solution (1) diviser le fichier en plusieurs
sous-fichiers triés (runs) en utilisant une
méthode de tri interne et (2) fusionner tous les
runs avec mergesort (Fig. 8.21).
10Avantages du mergesort
- Il peut être appliqué à des fichiers de toutes
tailles. - La lecture de fichier dentrée pendant létape de
création des runs est séquentielle ? Peu de
seeking. - La lecture de chaque run pendant la fusion est
aussi séquentielle. Le seul seeking necessaire
est pour aller dun run à lautre. - Si heapsort est utilisé pour létape de tri des
runs en mémoire, son opération peut être
chevauchée avec celle du I/O. - Puisque le I/O est surtout séquentiel, des bandes
magnétiques peuvent être utilisées.
11Temps est nécessaire pour un mergesort
- Supposition de simplification
- Seulement un seek est requis pour chaque accès
séquentiel. - Seulement un délai de rotation est nécessaire par
accès. - Etapes couteuses (incluant du I/O) de mergesort
- Pendant la phase de Tri
- Lecture de tous les enregistrements dans la
mémoire pour le tri et la formation des runs. - Ecriture des runs triées sur le disque.
- Pendant la phase de Fusion
- Lecture des runs triées dans la mémoire pour la
fusion - Ecriture du fichier trié sur le disque.
12Type de I/O prenant place lors des phases de tri
et de fusion
- Puisque, pendant la phase de tri, les runs sont
crées en utilisant heapsort, I/O est séquentiel.
Aucune amélioration de performance nest possible
ici. - Pendant letape de lecture de la phase de fusion,
il y a beaucoup daccès au hazard (puisque les
runs différents sont amenées en mémoire et
effacées de la mémoire de manière imprédictible).
Le nombre et la taille de la mémoire tampon
contenant les runs détermine le nombre daccès au
hazard. De lamélioration de performance peut
prendre place en cette étape. - Letape decriture de la phase de fusion nest
pas influencée par la facon dont on organize les
runs.
13Cout associé à lallongement des fichiers
- En général, pour une fusion de K runs où chaque
run est aussi large que lespace libre en
mémoire, la taille de la mémoire tampon pour
chacun des runs est de (1/K)taille de lespace
mémoire(1/K)taille de chaque run. - Donc K seeks sont requis afin de lire tous les
enregistrements dans chacun des runs individuels
et puisquil y a k runs en tout, lopération de
fusion requiert K2 seeks. - Puisque K est directement proportionnel à N, le
nombre denregistrements, mergesort est une
opération dordre O(N2) comptée en nombre de
seeks.
14Que faire pour améliorer la performance de
mergesort?
- La performance de mergesort peut être ameliorée
de plusieurs façons - On peut allouer plus de hardware tel que des
unités de disque, de la mémoire ou des chaines
I/O. - On peut performer la fusion en plus dune étape,
en réduisant lordre de chaque fusion et
augmentant la taille de la mémoire tampon pour
chaque run. - On peut augmenter la longueur des runs triés
initial, algorithmiquement. - On peut trouver des façons de chevaucher les
opérations I/O.