Organisation des Fichiers pour la Performance

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2.
Structures de données avancées : Principales structures de fichiers
GEF 243B Programmation informatique appliquée
Tris.
Chap. 4 Recherche en Table
Calculs de complexité d'algorithmes
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2.
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
GEF 243B Programmation informatique appliquée
Collecte de données F. Kohler.
Chap. 1 Structures séquentielles : listes linéaires
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Utilisation des tableaux
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Récursivité.
II. Chaînage, SDD séquentielles
Les algorithmes: complexité et notation asymptotique
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Methode de Tri efficace
II. Chaînage, SDD séquentielles
Gestion de Fichiers GF-15: Addressage Disperse (Hashcoding) (Base sur le Chapitre 11 de Folk, Zoellick & Riccardi, File Structures, An Object-Oriented.
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Gestion de Fichiers Arbres B.
Indexation 1. Concepts de base 2. Arbre B 3. Indexes secondaires.
Sections sélectionnées du Chapitre 11
Etude de cas : buffer clavier
1.3 COORDONNÉES DES POINTS
Les fichiers indexés (Les B-arbres)
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-10541
Stockage Secondaire: Disques
1 Tri Externe Chapitre 13: Pourquoi Trier? Problème classique en informatique (Voir Knuth, v.3)! Données requises en ordre trié P.ex.: Trouver.
Introduction et Motivation
Gestion de Fichiers Indexes basés sur les structures d’arbres binaires et indexes à niveaux multiples.
1 Tri Externe Chapitre 13: Pourquoi Trier? Problème classique en informatique (Voir Knuth, v.3)! Données requises en ordre trié P.ex.: Trouver.
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
Gestion de Fichiers Hachage Extensible.
Gestion de Fichiers Hachage.
Institut Supérieur des Etudes Technologiques de Djerba Exposé du Traitement de Données Réalisé par: Khalifa Marwa Magroun Amira Jawadi Souad L2MDW.
Gestion de Fichiers Hachage (suite). 2 Plan du cours daujourdhui Prédiction de la distribution des enregistrements Réduction des collisions en augmentant.
Gestion de Fichiers GF-12: Comment Gerer les Indexes qui ne tiennent pas en Memoire de Maniere Efficace?: I. Indexes Bases sur les Structures dArbres Binaires.
Gestion de Fichiers GF-10: Traitement Co-Sequentiel: Appariment et Fusion de Plusieures Listes (Base sur les sections de Folk, Zoellick & Riccardi,
Les Algorithmes de Tri Introduction Tri par Sélection
Le langage C Structures de données
Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres.
Projet Télédétection Vidéo Surveillance Deovan Thipphavanh – Mokrani Abdeslam – Naoui Saïd Master 2 Pro SIS / 2006.
Gestion de Fichiers GF-14: Acces Sequentiel et Indexe aux Fichiers et Arbres B+ Prefixes (Base sur le Chapitre 10 de Folk, Zoellick & Riccardi, File Structures,
LES PILES ET FILES.
Cours de Systèmes d’exploitations
Programmation linéaire en nombres entiers
Gestion de Fichiers GF-8: Organisation des Fichiers pour l’Amelioration de la Performance (Base sur la section de Folk, Zoellick & Riccardi, File.
Gestion de Fichiers Hachage (suite et fin). 2 Plan du cours d’aujourd’hui Utilisation des “buckets” Effacements dans des fichiers hachés Autres méthodes.
GF-11: Tri Interne Efficace et Tri Externe
Les fichiers 1ère partie
GF-4: Storage Secondaire: Disques
Structures de données avancées : Principales structures de fichiers
Structures de données avancées : Arbres B+ avec expansion partielle D. E ZEGOUR Institut National d ’Informatique.
Gestion de Fichiers Construction d’Indexes. 2 Plan du cours de la semaine Vue Générale Un indexe pour les fichiers à entrées séquentielles Opérations.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Chapitre 4 La représentation des nombres.
Raison d'être de la structure de fichiers : Les premiers travaux : Début des années 1960 : En 1963 : Près de 10 ans plus tard... (à peu près 1973) : Durant.
Chapitre 5 Configuration et gestion des systèmes de fichiers Module S41.
Transcription de la présentation:

Organisation des Fichiers pour la Performance Gestion de Fichiers Organisation des Fichiers pour la Performance

Motivation et plan du cours Comment organiser ou re-organiser les fichiers de manière à en améliorer la performance? On a déjà couvert les techniques de compression des fichiers. Maintenant: Le triage des fichiers de facon à pouvoir appliquer la recherche binaire  tri interne Un tri plus sophistiqué: Tri par clé. La récuperation d’espace dans les fichiers qui ont connu des changements

Recherche rapide: vue générale Le coût de la recherche physique (seeking) est très élevé. Ce coût doit être pris en considération lorsque l’on détermine une stratégie pour la recherche directe. La même question se pose dans le contexte du tri, qui est le plus souvent la première étape d’une recherche efficace. Plutôt que d’essayer tout simplement de trier puis de chercher, on va essayer de le faire de manière à minimiser le nombre de recherches (“seeks”).

Recherche rapide: vue générale (suite) Jusqu’à maintenant, la seule facon que l’on ait de trouver des enregistrements rapidement est d’utiliser leur Numero d’Enregistrement Relatif (RRN). Ceci ne peut marcher que dans le cas d’enregistrement à taille fixe. Sans le RRN ou bien dans le cas d’enregistrements à taille variable, la seule facon de trouver un enregistrement est de faire une recherche séquentielle. Ceci es très inéfficace. On voudrait trouver une facon plus efficace de chercher un enregistrement en utilisant la valeur de leur clé.

Recherche rapide: recherche binaire Supposez que le fichier est trié et que l’on cherche un enregistrement dont la clé est “kelly” dans un fichier de 1000 enregistrements à taille fixe. 1 2 … 500 750 1000 1: Johnson 2: Monroe Comparaison Suivante

Recherche binaire versus rech. séquentielle La recherche binaire dans un fichier de n enregistrements prend O(log2 n) comparaisons. La recherche séquentielle prend O(n) comparaisons. Lorsque la recherche séquentielle est utilisée, doubler le nombre d’enregistrements dans un fichier double le nombre de comparaisons requises pour la recherche. Lorsqu’une recherche binaire est utilisée, doubler le nombre d’enregistrements ajoute une seule comparaison au pire. Afin d’utiliser une recherche binaire, cependant, le fichier doit tout d’abord être trié. Ceci peut prendre beaucoup de temps !

Recherche rapide: triage d’un fichier de disque en mémoire Si le contenu d’un fichier peut être sauvegardé entièrement en mémoire, on peut executer un tri interne. Trier en mémoire est très efficace. Cependant, si le fichier ne tient pas complètement en mémoire, tous les algorithmes de tri vont nécessiter un grand nombre de seeks. Trier serait, dans ce cas, extrêmement lent. Malheureusement, bien des fichiers sont rop large pour tenir en mémoire. Il faut trouver une solution à ce probleme.

Recherche rapide: les limitations de la recherche binaire et le tri interne La recherche binaire demande plus d’un ou deux accès. Par contre, l’accès aux enregistrements en utilisant un RRN peut être executé en un seul accès. Comment atteindre la performance d’une recherche par RRN tout en conservant l’avantage de l’accès par clé ? Conserver un fichier trié est très cher: en plus de la recherche pour la location précise de l’insertion, une fois cette location trouvée, il faut déplacer les enreg.s afin de dégager l’espace pour l’insertion. Le tri interne ne marche que sur des petits fichiers. Pour de grands fichiers, le tri par clé s’impose.

Recherche rapide: tri par clé Vue générale: Lorsque l’on trie un fichier en mémoire, les seules choses qui aient vraiement besoin d’être triées sont les clés. Les algorithmes de tri par clé marchent comme le tri interne, mais avec deux différences importantes: Plutot que de lire un enregistrement entier dans un tableau en mémoire, on lit chaque enregistrement dans une mémoire tampon temporaire, on en extrait la clé et on ignore le reste des informations Si on veut écrire les enregi.s en ordre, il faut les lire une seconde fois, car on les avait ignoré en 1ère lecture.

Limitation de la méthode de tri par clé L’écriture d’enregistrements en ordre demande autant de seeks au hasard qu’il y a d’enreg.s. Puisque l’écriture est parsemée parmi les opérations de lectures, l’écriture demande également autant de seeks au hasard qu’il y a d’enregistrements. Solution: Pourquoi re-écrire le fichier trié par ordre de clé? Il suffit de re-écrire l’index trié.

Récuperation d’espace dans les fichiers: effacement des enreg Récuperation d’espace dans les fichiers: effacement des enreg.s et compactage Lorsque beaucoup d’enreg.s ont été effacés, il faut essayer de récuperer l’espace perdu. Ceci peut se faire par compactage des données en stockage. Le compactage se fait en cherchant les emplacements du fichier qui n’ont pas de données et en récuperant ces espaces. Il est donc important, pour ce faire, d’avoir un moyen pour indiquer les enregistrements effacés. Une fois l’espace perdu est détecté, un programme de compactage le comprime.

Effacement dynamique des enregistrements à taille fixe Le désavantage de la méthode précédente est qu’il y a de l’attente entre l’effacement d’un enregistrement et le compactage. Parfois, cependant, il est nécessaire de récuperer l’espace immédiatement. Pour ce faire, on peut: Indiquer les enregistrements effacés Trouver l’endroit que les enregistrements effacés ont occuppé afin de le reutiliser lorsque l’on ajoute de nouveaux enregistrements Avoir un moyen de savoir immédiatement s’il y a de la place dans le fichier et sauter à ces endroits. Solution: Utiliser une liste chainée avec les RRN jouant le rôle de pointeurs.

Effacement dynamique des enregistrements à taille fixe (suite) Idée: construire une liste chainée de tous les enreg.s disponibles. Une telle liste est appelée “avail list”. Les pointeurs sont une référence à l’enreg. suivant sur la liste avail list. Lorque une insertion est à faire dans un fichier à enreg.s à taille fixe, il suffit de prendre le premier enregistrement sur la liste avail list. Puisque tous les enreg.s sont de même taille, il n’y a aucune raison de trier la liste avail list, car n’importe lequel des enreg.s disponibles convient.

Effacement dynamique des enregistrements à taille fixe (suite) Le moyen le plus commode pour administrer avail list est d’utiliser une pile (“stack”): Le stack est constitué de noeuds de la forme suivante: [enregistrement|suivant] enregistrement = RRN suivant = RRN (pointeur de tête)  [4|8][8|3][3|5][5|2][2|-1] Effacer un eneg. = “push”; récuperer de l’espace = “pop”. Si le pointeur au dessus du stack est “-1” (NULL), il n’ y a plus d’espace libre dans le fichier. Trouver l’endroit que les enreg.s effacés ont occuppé afin de les reutiliser est donc réalisé en exécutant un pop.

Effacement dynamique des enregistrements à taille fixe (suite) Une question pratique: à quel endroit stocke-t-on le stack? Le fait-on physiquement séparé du fichier lui-même? Le stack n’est pas physiquement stocké de manière séparée du fichier, mais conceptuellement. Les enregistrements ne se déplacent donc pas physiquement; seuls les pointeurs sont réarrangés. Il est à se rappeler que les pointeurs dont il est question ici sont des pointeurs logiques et non physiques; ce sont les RRN et non des variables formelles pour pointer que l’on utilise dans un language de programmation.

Effacement dynamique des enregistrements à taille fixe (suite) Considérons un fichier avec 7 enreg.s à longueur fixe: LH  -1 |Edwards…|Bates … |Wills… |Jone |Masters…|Bouche |Chavez… | 0 1 2 3 4 5 6 Le fichier après l’effacement de l’enreg. 1: LH 1 |Edwards…|*-1 … |Wills… | Saul… |Masters…|Jane… |Chavez… | 0 1 2 3 4 5 6 Le fichier après l’effacement de l’enreg. 5: LH 5 |Edwards…|*-1 … |Wills… | Saul… |Masters…| *1 |Chavez… | 0 1 2 3 4 5 6 Le fichier après l’insertion des enreg.s “Jone” et “Bouche”: LH -1 |Edwards…|Bouche … |Wills… |Saul… |Masters…|Jone… |Chavez… | 0 1 2 3 4 5 6

Effacement dynamique des enregistrements à taille variable Meme idée que pour les enreg.s à taille fixe, mais une implementation différente doit être utilisée. En particulier, on doit conserver un compte d’octets de chaque enreg. au début de celui-ci. De plus, les liens vers le prochain enreg. sur la liste avail list ne peuvent pas être les RRN, mais les décalages en octets (Pourquoi?). De plus, la structure de données utilisée pour la liste avail list ne peut pas être un stack puisque l’on doit s’assurer que, lorsque l’on réutilise un emplacement, ce dernier a la bonne taille !

Effacement dynamique des enregistrements à taille variable (suite) Considérons un fichier avec 5 enreg.s à longueur variable: LH -1 |40Edwards…|64Bates … |45Wills… |87Masters…|53Chavez…| 0 1 2 3 4 Le fichier après l’effacement des enreg. 1: LH 43 |40Edwards…|64*-1… |45Wills… |87Masters…|53Chavez…| 0 1 2 3 4 Le fichier après l’effacement des enreg. 1 et 3: LH 156 |40Edwards…|64* … |45Wills… |87*43…|53Chavez…| Le fichier après l’insertion de l’enreg. “Jone”: |40Edwards…|64* … |45Wills… |87Jone…|53Chavez…| 0 1 2 3 4 Nous devons faire autant de pops que possible pour trouver un enreg. de taille convenable !

Fragmentation de stockage L’espace perdu à l’intérieur d’un enregistrement s’appelle la fragmentation interne. Les enregistrements à taille variable ne souffre pas de fragmentation interne. Par contre, la fragmentation externe ne peut pas être évitée. Il y a 3 façons de traiter la fragmentation externe: compactage de stockage (voir début du cours) Coalescence/fonte des trous L’utilisation d’une stratégie de placement

Strategies de placement Stratégie First Fit: accepter le premier emplacement libre capable d’accomoder le nouvel enregistrement. Stratégie Best Fit: choisir le plus petit emplacement de libre qui peut accomoder le nouvel enregistrement. Stratégie Worst Fit: choisir le plus grand emplacement de libre.

Stratégies de placement (suite) Quelques remarques générales sur les stratégies de placement: Les stratégies de placement s’appliquent seulement aux enregistrements à taille variable Si l’espace est perdu à la fragmentation interne, les meilleurs choix de stratégies de placement sont first fit et best fit. Une strategie worst fit aggrave la fragmentation interne. Si, par contre, l’espace est perdu à la fragmentation externe, la stratégie worst fit peut être très utile.

Enregistrements fixes Tout comme dans le tri rapide, les indexes sont utiles dans le contexte des enregistrements effacés. La liste avail list indicant la location des enregistrements non-utilisés consiste en des enregistrements fixes (“pinned records”) dans le sens ou ces enregistrements ne peuvent pas être déplacés car les déplacer créerait des pointeurs pendants (“dangling pointers”). Les enregistrements fixes, par contre, rendent le tri difficile. Une solution consiste à utiliser un index ordonné et à ne pas déplacer les enregistrements.