Introduction et Motivation Gestion de fichiers Introduction et Motivation
Organisation du Cours Professeur: Iluju Kiringa, kiringa@site.uottawa.ca Consultation: Mardi, 16:00-17:30 (EITI 5072) Cours: Mardi, 14:30-16:00; Vendredi, 16:00-17:30 Laboratoire: Lundi, 13:00-14:30 (EITI 0131) Manuel: M.J. Folk, B. Zoellick et G. Riccardi, File Structures, an Object-Oriented Approach with C++, Addison Wesley, 1998 Notes de Cours sur le web
Objectifs du cours Etude des Structures de Fichiers (SF) pour ameliorer l’efficacité de l’accès aux données en mémoire secondaire Etude des outils les plus importants pour l’organisation des fichiers: indexes, processus co-séquentiels, arbres B et B+,l’addressage dispersé (Hashing) Eléments de programmation en C++
Evaluation 30% 3 Devoirs (D) - théorie et programmation 25% Examen de mi-session (M) 45% Examen final (F) M + F < 35 => Note Finale = 10 * ( M + F ) / 7 M + F >= 35 => Note Finale = D + M + F Retard dans la remise des devoirs: -10% par jour; aucun devoir ne sera accepté apres 11h00 le deuxième jour suivant la date de remise du devoir.
Stockage des données Les données peuvent être sauvegardées dans trois types de locations différents: Stockage primaire: mémoire principal de l’ordinateur (RAM) Stockage secondaire: disque dur, disquette, cassette magnétique, CD-ROM qui peuvent être accédés directement par l’ordinateur Stockage tertiaire ou données d’archives: disque dur, disquette, cassette magnétique, CD-ROM qui ne peuvent pas être accédé directement par l’ordinateur Notre sujet
Plan du cours d’aujourd’hui Définition de “structures de fichiers” Motivation à étudier la gestion de fichiers Conception générale Histoire de la discipline Une introduction au C++ Lecture: FZR, Chapitre 1
Définition Une structure de fichier = Représentation pour les données en fichiers, et opérations pour accéder à ces données Une structure de fichier permet aux applications de -lire, écrire et modifier les données, -les trouver suivant des critères de recherche -les lire dans un ordre particulier Les structures de données s’occupent de l’organisation des données en mémoire principale; Les structures de fichiers s’addressent à l’organisation des données en mémoire secondaire
Stockage primaire vs. secondaire Stockage secondaire: - lent (car électronique et méchanique) - large (milliers de MBs sur très peu d’espace physique) - stable et persitent (car souvent magnétique) Stockage primaire: - rapide (puisque électronique) - très limité (car très cher) - instable (car necessite du courant en permanence) Cas typique: l’accès aux données en RAM prend +/-120 nanosec.; +/-30 millisec. pour les celles sur disque Analogie: recherche dans un index de livre vs. dans une bibliothèque
Motivation Pour ameliorer le temps d’accès au stockage secondaire Pour minimaliser le nombre d’accès Pour ameliorer les détails de la représentation des données et des opérations associées à ces données Pour étudier les regroupements d’informations de manière à atteindre un minimum d’accès
Conception générale Le But général est l’obtention de l’information requise avec un SEUL accès au disque. Si cela n’est pas possible, on vise l’obtention de l’information requise avec aussi peu d’accès au disque que possible. En général, le concepteur d’une SF essayera de grouper toutes les informations requises par les utilisateurs du système de façon à y parvenir avec un seul (ou un minimum d’) accès au disque.
Conception générale (suite) Fichiers fixes et fichiers dynamiques Il est relativement facile de trouver des structures de fichiers efficaces (qui adhèrent à la conception générale des SF) pour les fichiers qui ne changent pas pendant l’execution du système. Par contre, si les fichiers peuvent s’aggrandir ou rapetisser, il devient très difficile de trouver des SF efficaces.
Historique: accès séquentiel L’histoire de la discipline est très intimement liée au développements techniques associés aux ordinateurs et à leur usage pratique. Au début, les fichiers étaient sauvegardés seulement sur cassettes magnétiques. L’accès y était donc séquentiel et son coût grandissait en proportion directe avec la taille du fichier. Analogie avec l’accès séquentiel aux copies répétitives (array) en strutures de données.
Historique: accès direct et indexes Lorsque les fichiers ont commencé à grandir de façon démesurée, l’accès séquentiel pur n’était plus une solution efficace. Les disques ont permis l’accès direct. Les indexes ont donné la possibilité de sauvegarder des petits fichiers ne contenant qu’une liste de clés associées à des pointeurs. La recherche sequentielle dans ces petits fichiers pouvaient être faite très rapidement. La clé et le pointeur donnait l’accès direct au très grand fichier principal contennant les données.
Historique: arbres de recherche Les indexes ont vite grandi de manière démesurée. Comme ils avaient une structure séquentielle, ils exhibent les mêmes problèmes que les gros fichiers. L’idée d’utiliser des structures d’arbres de recherche afin de gérer un index est née au début des années 60 (exemple: arbres de recherche binaires). Cependant, les arbres de recherches peuvent grandir de façon très inégale lorsque les enregistrements sont ajoutés ou effacés. Ceci résultait en des recherches très longues nécessitant plusieurs accès au disque avant de trouver l’enregistrement requis.
Historique: arbres équilibrés En 1963, l’idée des arbres AVL a émergée pour les données sauvegardées en stockage primaire. Cette idée, cependant, ne s’appliquait pas au stockage secondaire car les arbres AVL sont utiles lorsque les noeuds d’arbres sont composés d’enregistrements simples plutôt que de douzaines ou centaines. Dans les annees 70, l’idée des arbres B a émergée. Ces arbres ont un temps d’accès de O(logkN) ou N est le nombre d’enregistrements dans le fichier et k le nombre d’enregistrements d’indexes dans un noeud. Les arbres B peuvent garantir juste 3 ou 4 accès au disque pour un fichier de millions d’enregistrements.
Historique: addressage dispersé Bien que la possibilite de trouver des données sauvegardées en stockage secondaire avec 3 ou 4 accès au disque est impressionante, elle n’atteint pas le but fixé de trouver des données en un simple accès. Depuis très longtemps, l’addressage dispersé (hashing) était un moyen connu d’atteindre ce but dans les fichiers dont la taille ne changeait pas beaucoup pendant l’utilisation du système. Plus récemment, l’addressage dispersé extensible garantit un ou au plus deux accès au disque quelle que soit la taille d’un fichier dynamique.
Contenu du cours Introduction et motivation Opérations de base sur les fichiers structures d'enregistrement, accès séquentiel et direct Stockage secondaire: disques, cassettes magnétiques et CD-ROMs Compression de fichiers Organisation des Fichiers pour l'amélioration de la performance Construction d'indexes Opérations co-séquentielles, tri interne efficace et tri externe Addressage dispersé (hachage) Addressage dispersé extensible Indexes à structure d'arbres binaires et à niveau multiple Les arbres B Fichiers séquentiels indexés et arbres B+
Une Introduction au C++ Le C++ a été crée par Bjarne Stroustrup. C++ a conservé l’efficacité du C tout en y ajoutant la puissance de l’héritage d’objets. C++ vs. Java: Java est basé sur le C++ mais est un langage plus simple. Néanmoins, Java n’a pas autant de flexibilité que le C++ car il repose sur des concepts de plus haut niveau. Par example, Java n’a pas de pointeurs.