From 5f71a8de06269c395f143c4452c8ac4e3672dd2a Mon Sep 17 00:00:00 2001 From: Guillaume Chanel <Guillaume.Chanel@unige.ch> Date: Fri, 23 Aug 2024 17:43:10 +0200 Subject: [PATCH] WIP: second part of filesystems --- 9.filesystems/01_Systemes_fichiers_intro.md | 5 + .../02_Systemes_fichiers_strategies_alloc.md | 267 +++++++++--------- 9.filesystems/index.html | 8 +- 3 files changed, 151 insertions(+), 129 deletions(-) diff --git a/9.filesystems/01_Systemes_fichiers_intro.md b/9.filesystems/01_Systemes_fichiers_intro.md index 64f3576..c196d7c 100644 --- a/9.filesystems/01_Systemes_fichiers_intro.md +++ b/9.filesystems/01_Systemes_fichiers_intro.md @@ -1,3 +1,8 @@ + +# Introduction + +-- + ## Historique <div class="cols"> diff --git a/9.filesystems/02_Systemes_fichiers_strategies_alloc.md b/9.filesystems/02_Systemes_fichiers_strategies_alloc.md index c153404..831d68f 100644 --- a/9.filesystems/02_Systemes_fichiers_strategies_alloc.md +++ b/9.filesystems/02_Systemes_fichiers_strategies_alloc.md @@ -1,21 +1,4 @@ ---- -author: Florent Gluck - Florent.Gluck@hesge.ch - -title: Systèmes de fichiers - Stratégies d'allocation - -date: \vspace{.5cm} \footnotesize \today - -pandoc-latex-fontsize: - - classes: [tiny] - size: tiny - - classes: [verysmall] - size: scriptsize - - classes: [small] - size: footnotesize - - classes: [huge, important] - size: huge ---- - +<!-- ## TODO - Update FAT diagram: @@ -26,8 +9,12 @@ pandoc-latex-fontsize: - update diagram to show the data blocks to "scale", especially vs an inode - ext4: indicate that very small files' content is stored in the inode and don't use a data block - would be good to the number of single ptr, indirect ptr, etc. for ext2, ext3 and ext4 +--> + +# Stratégies d'allocation + +-- -[//]: # ---------------------------------------------------------------- ## Système de fichiers - Un système de fichiers (FS) est un ensemble de fichiers @@ -38,7 +25,8 @@ pandoc-latex-fontsize: - un répertoires contient des entrées de répertoire (cf. suite du cours) - Fichiers et répertoires sont représentés de la même manière, mais leurs contenus sont différents -[//]: # ---------------------------------------------------------------- +-- + ## Fichier Un fichier est composé de deux parties : @@ -49,7 +37,8 @@ Un fichier est composé de deux parties : - fichier "ordinaire" : blocs contenant le contenu du fichier - répertoire : blocs contenant les références vers les fichiers présents dans le répertoire -[//]: # ---------------------------------------------------------------- +-- + ## Défi - Comment organiser un FS hiérarchique en utilisant des blocs comme unité de base ? @@ -57,7 +46,8 @@ Un fichier est composé de deux parties : - en termes d'espace (pas d'espace perdu) - en terme de lecture et d'écriture de fichiers -[//]: # ---------------------------------------------------------------- +-- + ## Stratégies d'allocation des blocs de données - La création d'un fichier ou d'un répertoire nécessite **d'allouer des blocs** @@ -65,7 +55,8 @@ Un fichier est composé de deux parties : - être efficace en termes d'espace - garantir un accès rapide aux fichiers -[//]: # ---------------------------------------------------------------- +-- + ## Métriques d'allocation de blocs Métriques principales: @@ -77,43 +68,45 @@ Métriques principales: - Fragmentation - Efficacité du stockage/*overhead* -[//]: # ---------------------------------------------------------------- +-- + ## Fragmentation interne -:::::: {.columns} -::: {.column width="50%"} +<div class="cols"> +<div> - L'espace alloué peut être plus grand que l'espace demandé - **L'espace alloué non utilisé est gaspillé !** -::: -::: {.column width="50%"} +</div> +<div> -\centering -{ width=50% } +<!-- .element width="80%" --> -::: -:::::: +</div> +</div> + +-- -[//]: # ---------------------------------------------------------------- ## Fragmentation externe -:::::: {.columns} -::: {.column width="50%"} +<div class="cols"> +<div> - Bien qu'il y ait suffisamment d'espace libre au total, il n'y a pas assez d'espace libre contigu pour satisfaire la demande d'allocation - **Impossible de satisfaire la demande d'allocation !** -::: -::: {.column width="50%"} +</div> -\centering -{ width=80% } +<div> -::: -:::::: + + +</div> +</div> + +-- -[//]: # ---------------------------------------------------------------- ## Principales stratégies d'allocation de blocs - Le choix de la stratégie d'allocation dépend : @@ -126,36 +119,47 @@ Métriques principales: 1. liste chaînée 1. indexée -[//]: # ---------------------------------------------------------------- -## 1 | Allocation contiguë +-- + +## 1. Allocation contiguë - Chaque fichier utilise un ensemble de blocs contigus - Un fichier stocke : - l'index du premier bloc du fichier - la taille du fichier -[//]: # ---------------------------------------------------------------- -## 1 | Allocation contiguë : exemple +-- -\centering -{ width=70% } +## 1. Allocation contiguë : exemple -[//]: # ---------------------------------------------------------------- -## 1 | Allocation contiguë : synthèse +<!-- .element width="60%" --> -- \textbf{\textcolor{mygreen}{Avantages}} - - très facile à implémenter - - accès séquentiel rapide - - accès aléatoire rapide - - faible *overhead* stockage (structure de données très simple) +-- -- \textbf{\textcolor{myred}{Inconvénients}} - - les fichiers ne peuvent pas (ou peu) grandir - - fragmentation externe importante - - fragmentation interne lorsque taille fichier < taille bloc +## 1. Allocation contiguë : synthèse + +<fieldset class="OK"> +<legend>Avantages</legend> + +- très facile à implémenter +- accès séquentiel rapide +- accès aléatoire rapide +- faible *overhead* stockage (structure de données très simple) + +</fieldset> +<p></p> +<fieldset class="warning fragment"> +<legend>Inconvénients</legend> + +- les fichiers ne peuvent pas (ou peu) grandir +- fragmentation externe importante +- fragmentation interne lorsque taille fichier < taille bloc -[//]: # ---------------------------------------------------------------- -## 2 | Allocation par liste chaînée +</fieldset> + +-- + +## 2. Allocation par liste chaînée - Un fichier stocke : - un pointeur sur le premier bloc @@ -164,74 +168,74 @@ Métriques principales: - Les blocs sont stockés dans une liste chaînée - chaque bloc possède un pointeur sur le bloc suivant - \vspace{.5cm} - { width=70% } - \vspace{.3cm} +  -[//]: # ---------------------------------------------------------------- -## 2 | Allocation par liste chaînée : exemple +-- -\centering -{ width=70% } +## 2. Allocation par liste chaînée : exemple -[//]: # ---------------------------------------------------------------- -## 2 | Allocation par liste chaînée : synthèse +<!-- .element width="55%" --> -- \textbf{\textcolor{mygreen}{Avantages}} - - les fichiers peuvent facilement grandir, sans limite - - facile à implémenter, mais le stockage des pointeurs est délicat - - pas de fragmentation externe +-- -- \textbf{\textcolor{myred}{Inconvénients}} - - accès séquentiel lent - - accès aléatoire lent : adresse difficile à calculer - - fragmentation interne lorsque taille fichier < taille bloc +## 2. Allocation par liste chaînée : synthèse -[//]: # ---------------------------------------------------------------- -## 2b | Allocation par FAT -:::::: {.columns} -::: {.column width="63%"} +<fieldset class="OK"> +<legend>Avantages</legend> -\small +- les fichiers peuvent facilement grandir, sans limite +- facile à implémenter, mais le stockage des pointeurs est délicat +- pas de fragmentation externe + +</fieldset> +<p></p> +<fieldset class="warning fragment"> +<legend>Inconvénients</legend> + +- accès séquentiel lent +- accès aléatoire lent : adresse difficile à calculer +- fragmentation interne lorsque taille fichier < taille bloc + +</fieldset> + +-- + +## 2.b. Allocation par FAT + +<div class="cols"> +<div style="width:200%"> - Variante de l'allocation par liste chaînée - Les pointeurs de blocs sont stockés dans une table dédiée située au début du FS - taille de la table d'allocation des fichiers (FAT) - - \footnotesize une entrée FAT par bloc de données - - \footnotesize liste chaînée d'entrées FAT par fichier - - \footnotesize valeur spéciale indique la fin de la liste (EOC = *End of Chain*) + - <small>une entrée FAT par bloc de données</small> + - <small> liste chaînée d'entrées FAT par fichier</small> + - <small> valeur spéciale indique la fin de la liste (EOC = *End of Chain*)</small> - Système fichiers de MS-DOS et Winows 95, utilisé dans cartes SD et clés USB - Nombreuses variantes : FAT16, FAT32, exFAT, etc. -::: -::: {.column width="37%"} +</div> +<div> -\centering +<!-- .element width="90%" --> -\vspace{.5cm} +<small>Structure sur disque du FS FAT</small> -\small +</div> +</div> -Structure sur disque du FS FAT +-- -\vspace{.5cm} +## 2.b. Contenu de la FAT : exemple -{ width=100% } + -::: -:::::: - -[//]: # ---------------------------------------------------------------- -## 2b | Contenu de la FAT : exemple - -\centering -{ width=100% } +-- -[//]: # ---------------------------------------------------------------- -## 2b | FS de type FAT : exemple +## 2.b. FS de type FAT : exemple -\small +<div style="font-size:0.8em"> Soit le FS de type FAT suivant : @@ -240,23 +244,23 @@ Soit le FS de type FAT suivant : - Chaque entrée dans la FAT est codée sur 16 bits - une valeur est réservée pour représenter la EOC (*End Of Chain*) -::: incremental +</div> **Questions** -1. Quelle est la taille de la FAT en bytes pour ce FS\ ? - - \footnotesize \textcolor{mygreen}{$1000*(16 bits)$ = 2000 bytes} +1. Quelle est la taille de la FAT en bytes pour ce FS ? \ +`$1000*(16 bits) = 2000$` bytes <!-- .element: class="fragment" data-fragment-index="0" --> -1. Quelle est la taille de fichier maximum supportée pour ce FS (en bytes, KB et MB)\ ? - - \footnotesize \textcolor{mygreen}{$1000*4096$ = 4096000 bytes, 4000 KB, 3.9 MB} +1. Quelle est la taille de fichier maximum supportée pour ce FS (en bytes, KB et MB) ? \ +`$1000*4096 = 4096000$` bytes, `$4000$` KB, `$3.9`$ MB <!-- .element: class="fragment" data-fragment-index="0" --> -1. Combien de blocs de données cette FAT pourrait-elle gérer au maximum théoriquement\ ? - - \footnotesize \textcolor{mygreen}{$(2^{16})-1$ = 65535} +1. Combien de blocs de données cette FAT pourrait-elle gérer au maximum théoriquement ? \ +`$(2^{16})-1$ = 65535` <!-- .element: class="fragment" data-fragment-index="0" --> -::: -[//]: # ---------------------------------------------------------------- -## 2b | Allocation par FAT : synthèse +-- + +## 2.b. Allocation par FAT : synthèse - \textbf{\textcolor{mygreen}{Avantages}} - relativement facile à implémenter @@ -270,8 +274,9 @@ Soit le FS de type FAT suivant : - la FAT doit être chargée en RAM (sinon performances catastrophiques) - fragmentation interne lorsque taille fichier < taille bloc -[//]: # ---------------------------------------------------------------- -## 3 | Allocation indexée +-- + +## 3. Allocation indexée - Chaque fichier est associé à un **inode** de taille fixe - L'inode contient @@ -283,8 +288,9 @@ Soit le FS de type FAT suivant : \centering { width=50% } -[//]: # ---------------------------------------------------------------- -## 3b | Allocation indexée multi-niveau +-- + +## 3.b. Allocation indexée multi-niveau \small @@ -294,8 +300,9 @@ Soit le FS de type FAT suivant : \centering { width=90% } -[//]: # ---------------------------------------------------------------- -## 3b | Allocation indexée multi-niveau : exemple +-- + +## 3.b Allocation indexée multi-niveau : exemple \small @@ -323,8 +330,9 @@ Soit le FS de type indexé multi-niveau suivant : - \footnotesize \textcolor{mygreen}{$1024/64$ = 16} --> -[//]: # ---------------------------------------------------------------- -## 3b | Allocation indexée : synthèse +-- + +## 3.b. Allocation indexée : synthèse - \textbf{\textcolor{mygreen}{Avantages}} - relativement facile à implémenter @@ -338,8 +346,9 @@ Soit le FS de type indexé multi-niveau suivant : - sinon, accès potentiellement lent - fragmentation interne lorsque taille fichier < taille bloc -[//]: # ---------------------------------------------------------------- -## 3c | Allocation par extent +-- + +## 3.c. Allocation par extent - Principe similaire à l'allocation indexée - **Différence** : un pointeur référence un **\textit{extent}** plutôt qu'un bloc @@ -351,8 +360,9 @@ Soit le FS de type indexé multi-niveau suivant : - **Avantages** : moins de blocs à stocker si la plupart des allocations sont contiguës - Utilisé par les FS "modernes" : ext4, btrfs, ntfs, xfs, etc. -[//]: # ---------------------------------------------------------------- -## 3c | Allocation par extent : synthèse +-- + +## 3.c. Allocation par extent : synthèse - \textbf{\textcolor{mygreen}{Avantages}} - les fichiers peuvent grandir (tant qu'il y a des extents libres) @@ -365,7 +375,8 @@ Soit le FS de type indexé multi-niveau suivant : - \ plus complexe que l'allocation indexée - fragmentation interne lorsque taille fichier < taille bloc -[//]: # ---------------------------------------------------------------- +-- + ## Ressources \small diff --git a/9.filesystems/index.html b/9.filesystems/index.html index 74c6652..04b3d67 100644 --- a/9.filesystems/index.html +++ b/9.filesystems/index.html @@ -3,7 +3,6 @@ <head> <meta charset="utf-8"> - <meta name="generator" content="pandoc"> <meta name="author" content="Guillaume Chanel"> <title>Systèmes de fichiers</title> <meta name="apple-mobile-web-app-capable" content="yes"> @@ -39,6 +38,13 @@ <body> <div class="reveal"> <div class="slides"> + <section> + <section> + <h1>Systèmes de fichiers</h1> + <p>Guillaume Chanel</p> + <p>Remerciements à Florent Glück</p> + </section> + </section> <section data-markdown="01_Systemes_fichiers_intro.md" data-separator-vertical="^\r?\n--\r?\n$"></section> <section data-markdown="02_Systemes_fichiers_strategies_alloc.md" data-separator-vertical="^\r?\n--\r?\n$"></section> <section data-markdown="03_Systemes_fichiers_struct_disque.md" data-separator-vertical="^\r?\n--\r?\n$"></section> -- GitLab