Skip to content
Snippets Groups Projects
Commit 5f71a8de authored by Guillaume Chanel's avatar Guillaume Chanel
Browse files

WIP: second part of filesystems

parent 4b03fddd
No related branches found
No related tags found
No related merge requests found
# Introduction
--
## Historique ## Historique
<div class="cols"> <div class="cols">
......
--- <!--
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 ## TODO
- Update FAT diagram: - Update FAT diagram:
...@@ -26,8 +9,12 @@ pandoc-latex-fontsize: ...@@ -26,8 +9,12 @@ pandoc-latex-fontsize:
- update diagram to show the data blocks to "scale", especially vs an inode - 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 - 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 - 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 ## Système de fichiers
- Un système de fichiers (FS) est un ensemble de fichiers - Un système de fichiers (FS) est un ensemble de fichiers
...@@ -38,7 +25,8 @@ pandoc-latex-fontsize: ...@@ -38,7 +25,8 @@ pandoc-latex-fontsize:
- un répertoires contient des entrées de répertoire (cf. suite du cours) - 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 - Fichiers et répertoires sont représentés de la même manière, mais leurs contenus sont différents
[//]: # ---------------------------------------------------------------- --
## Fichier ## Fichier
Un fichier est composé de deux parties : Un fichier est composé de deux parties :
...@@ -49,7 +37,8 @@ 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 - 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 - répertoire : blocs contenant les références vers les fichiers présents dans le répertoire
[//]: # ---------------------------------------------------------------- --
## Défi ## Défi
- Comment organiser un FS hiérarchique en utilisant des blocs comme unité de base ? - 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 : ...@@ -57,7 +46,8 @@ Un fichier est composé de deux parties :
- en termes d'espace (pas d'espace perdu) - en termes d'espace (pas d'espace perdu)
- en terme de lecture et d'écriture de fichiers - en terme de lecture et d'écriture de fichiers
[//]: # ---------------------------------------------------------------- --
## Stratégies d'allocation des blocs de données ## 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** - 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 : ...@@ -65,7 +55,8 @@ Un fichier est composé de deux parties :
- être efficace en termes d'espace - être efficace en termes d'espace
- garantir un accès rapide aux fichiers - garantir un accès rapide aux fichiers
[//]: # ---------------------------------------------------------------- --
## Métriques d'allocation de blocs ## Métriques d'allocation de blocs
Métriques principales: Métriques principales:
...@@ -77,43 +68,45 @@ Métriques principales: ...@@ -77,43 +68,45 @@ Métriques principales:
- Fragmentation - Fragmentation
- Efficacité du stockage/*overhead* - Efficacité du stockage/*overhead*
[//]: # ---------------------------------------------------------------- --
## Fragmentation interne ## Fragmentation interne
:::::: {.columns} <div class="cols">
::: {.column width="50%"} <div>
- L'espace alloué peut être plus grand que l'espace demandé - L'espace alloué peut être plus grand que l'espace demandé
- **L'espace alloué non utilisé est gaspillé !** - **L'espace alloué non utilisé est gaspillé !**
::: </div>
::: {.column width="50%"} <div>
\centering ![](images/internal_fragmentation.png)<!-- .element width="80%" -->
![](images/internal_fragmentation.png){ width=50% }
::: </div>
:::::: </div>
--
[//]: # ----------------------------------------------------------------
## Fragmentation externe ## Fragmentation externe
:::::: {.columns} <div class="cols">
::: {.column width="50%"} <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 - 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 !** - **Impossible de satisfaire la demande d'allocation !**
::: </div>
::: {.column width="50%"}
\centering <div>
![](images/external_fragmentation.png){ width=80% }
::: ![](images/external_fragmentation.png)
::::::
</div>
</div>
--
[//]: # ----------------------------------------------------------------
## Principales stratégies d'allocation de blocs ## Principales stratégies d'allocation de blocs
- Le choix de la stratégie d'allocation dépend : - Le choix de la stratégie d'allocation dépend :
...@@ -126,36 +119,47 @@ Métriques principales: ...@@ -126,36 +119,47 @@ Métriques principales:
1. liste chaînée 1. liste chaînée
1. indexée 1. indexée
[//]: # ---------------------------------------------------------------- --
## 1 | Allocation contiguë
## 1. Allocation contiguë
- Chaque fichier utilise un ensemble de blocs contigus - Chaque fichier utilise un ensemble de blocs contigus
- Un fichier stocke : - Un fichier stocke :
- l'index du premier bloc du fichier - l'index du premier bloc du fichier
- la taille du fichier - la taille du fichier
[//]: # ---------------------------------------------------------------- --
## 1 | Allocation contiguë : exemple
\centering ## 1. Allocation contiguë : exemple
![](images/contiguous_alloc.png){ width=70% }
[//]: # ---------------------------------------------------------------- ![](images/contiguous_alloc.png)<!-- .element width="60%" -->
## 1 | Allocation contiguë : synthèse
--
## 1. Allocation contiguë : synthèse
<fieldset class="OK">
<legend>Avantages</legend>
- \textbf{\textcolor{mygreen}{Avantages}}
- très facile à implémenter - très facile à implémenter
- accès séquentiel rapide - accès séquentiel rapide
- accès aléatoire rapide - accès aléatoire rapide
- faible *overhead* stockage (structure de données très simple) - faible *overhead* stockage (structure de données très simple)
- \textbf{\textcolor{myred}{Inconvénients}} </fieldset>
<p></p>
<fieldset class="warning fragment">
<legend>Inconvénients</legend>
- les fichiers ne peuvent pas (ou peu) grandir - les fichiers ne peuvent pas (ou peu) grandir
- fragmentation externe importante - fragmentation externe importante
- fragmentation interne lorsque taille fichier < taille bloc - fragmentation interne lorsque taille fichier < taille bloc
[//]: # ---------------------------------------------------------------- </fieldset>
## 2 | Allocation par liste chaînée
--
## 2. Allocation par liste chaînée
- Un fichier stocke : - Un fichier stocke :
- un pointeur sur le premier bloc - un pointeur sur le premier bloc
...@@ -164,74 +168,74 @@ Métriques principales: ...@@ -164,74 +168,74 @@ Métriques principales:
- Les blocs sont stockés dans une liste chaînée - Les blocs sont stockés dans une liste chaînée
- chaque bloc possède un pointeur sur le bloc suivant - chaque bloc possède un pointeur sur le bloc suivant
\vspace{.5cm} ![](images/linked_list.png)
![](images/linked_list.png){ width=70% }
\vspace{.3cm}
[//]: # ---------------------------------------------------------------- --
## 2 | Allocation par liste chaînée : exemple
\centering ## 2. Allocation par liste chaînée : exemple
![](images/linked_list_alloc.png){ width=70% }
[//]: # ---------------------------------------------------------------- ![](images/linked_list_alloc.png)<!-- .element width="55%" -->
## 2 | Allocation par liste chaînée : synthèse
--
## 2. Allocation par liste chaînée : synthèse
<fieldset class="OK">
<legend>Avantages</legend>
- \textbf{\textcolor{mygreen}{Avantages}}
- les fichiers peuvent facilement grandir, sans limite - les fichiers peuvent facilement grandir, sans limite
- facile à implémenter, mais le stockage des pointeurs est délicat - facile à implémenter, mais le stockage des pointeurs est délicat
- pas de fragmentation externe - pas de fragmentation externe
- \textbf{\textcolor{myred}{Inconvénients}} </fieldset>
<p></p>
<fieldset class="warning fragment">
<legend>Inconvénients</legend>
- accès séquentiel lent - accès séquentiel lent
- accès aléatoire lent : adresse difficile à calculer - accès aléatoire lent : adresse difficile à calculer
- fragmentation interne lorsque taille fichier < taille bloc - fragmentation interne lorsque taille fichier < taille bloc
[//]: # ---------------------------------------------------------------- </fieldset>
## 2b | Allocation par FAT
:::::: {.columns} --
::: {.column width="63%"}
\small ## 2.b. Allocation par FAT
<div class="cols">
<div style="width:200%">
- Variante de l'allocation par liste chaînée - 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 - 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) - taille de la table d'allocation des fichiers (FAT)
- \footnotesize une entrée FAT par bloc de données - <small>une entrée FAT par bloc de données</small>
- \footnotesize liste chaînée d'entrées FAT par fichier - <small> liste chaînée d'entrées FAT par fichier</small>
- \footnotesize valeur spéciale indique la fin de la liste (EOC = *End of Chain*) - <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 - Système fichiers de MS-DOS et Winows 95, utilisé dans cartes SD et clés USB
- Nombreuses variantes : FAT16, FAT32, exFAT, etc. - Nombreuses variantes : FAT16, FAT32, exFAT, etc.
::: </div>
::: {.column width="37%"} <div>
\centering ![Structure sur disque du FS FAT](images/FAT_disk_layout.png)<!-- .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
![](images/FAT_disk_layout.png){ width=100% } ![](images/FAT_alloc.png)
::: --
::::::
[//]: # ---------------------------------------------------------------- ## 2.b. FS de type FAT : exemple
## 2b | Contenu de la FAT : exemple
\centering <div style="font-size:0.8em">
![](images/FAT_alloc.png){ width=100% }
[//]: # ----------------------------------------------------------------
## 2b | FS de type FAT : exemple
\small
Soit le FS de type FAT suivant : Soit le FS de type FAT suivant :
...@@ -240,23 +244,23 @@ 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 - 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*) - une valeur est réservée pour représenter la EOC (*End Of Chain*)
::: incremental </div>
**Questions** **Questions**
1. Quelle est la taille de la FAT en bytes pour ce FS\ ? 1. Quelle est la taille de la FAT en bytes pour ce FS ? \
- \footnotesize \textcolor{mygreen}{$1000*(16 bits)$ = 2000 bytes} `$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)\ ? 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} `$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\ ? 1. Combien de blocs de données cette FAT pourrait-elle gérer au maximum théoriquement ? \
- \footnotesize \textcolor{mygreen}{$(2^{16})-1$ = 65535} `$(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}} - \textbf{\textcolor{mygreen}{Avantages}}
- relativement facile à implémenter - relativement facile à implémenter
...@@ -270,8 +274,9 @@ Soit le FS de type FAT suivant : ...@@ -270,8 +274,9 @@ Soit le FS de type FAT suivant :
- la FAT doit être chargée en RAM (sinon performances catastrophiques) - la FAT doit être chargée en RAM (sinon performances catastrophiques)
- fragmentation interne lorsque taille fichier < taille bloc - fragmentation interne lorsque taille fichier < taille bloc
[//]: # ---------------------------------------------------------------- --
## 3 | Allocation indexée
## 3. Allocation indexée
- Chaque fichier est associé à un **inode** de taille fixe - Chaque fichier est associé à un **inode** de taille fixe
- L'inode contient - L'inode contient
...@@ -283,8 +288,9 @@ Soit le FS de type FAT suivant : ...@@ -283,8 +288,9 @@ Soit le FS de type FAT suivant :
\centering \centering
![](images/indexed_alloc.png){ width=50% } ![](images/indexed_alloc.png){ width=50% }
[//]: # ---------------------------------------------------------------- --
## 3b | Allocation indexée multi-niveau
## 3.b. Allocation indexée multi-niveau
\small \small
...@@ -294,8 +300,9 @@ Soit le FS de type FAT suivant : ...@@ -294,8 +300,9 @@ Soit le FS de type FAT suivant :
\centering \centering
![](images/multi_indexed_alloc.png){ width=90% } ![](images/multi_indexed_alloc.png){ width=90% }
[//]: # ---------------------------------------------------------------- --
## 3b | Allocation indexée multi-niveau : exemple
## 3.b Allocation indexée multi-niveau : exemple
\small \small
...@@ -323,8 +330,9 @@ Soit le FS de type indexé multi-niveau suivant : ...@@ -323,8 +330,9 @@ Soit le FS de type indexé multi-niveau suivant :
- \footnotesize \textcolor{mygreen}{$1024/64$ = 16} - \footnotesize \textcolor{mygreen}{$1024/64$ = 16}
--> -->
[//]: # ---------------------------------------------------------------- --
## 3b | Allocation indexée : synthèse
## 3.b. Allocation indexée : synthèse
- \textbf{\textcolor{mygreen}{Avantages}} - \textbf{\textcolor{mygreen}{Avantages}}
- relativement facile à implémenter - relativement facile à implémenter
...@@ -338,8 +346,9 @@ Soit le FS de type indexé multi-niveau suivant : ...@@ -338,8 +346,9 @@ Soit le FS de type indexé multi-niveau suivant :
- sinon, accès potentiellement lent - sinon, accès potentiellement lent
- fragmentation interne lorsque taille fichier < taille bloc - fragmentation interne lorsque taille fichier < taille bloc
[//]: # ---------------------------------------------------------------- --
## 3c | Allocation par extent
## 3.c. Allocation par extent
- Principe similaire à l'allocation indexée - Principe similaire à l'allocation indexée
- **Différence** : un pointeur référence un **\textit{extent}** plutôt qu'un bloc - **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 : ...@@ -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 - **Avantages** : moins de blocs à stocker si la plupart des allocations sont contiguës
- Utilisé par les FS "modernes" : ext4, btrfs, ntfs, xfs, etc. - 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}} - \textbf{\textcolor{mygreen}{Avantages}}
- les fichiers peuvent grandir (tant qu'il y a des extents libres) - 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 : ...@@ -365,7 +375,8 @@ Soit le FS de type indexé multi-niveau suivant :
- \ plus complexe que l'allocation indexée - \ plus complexe que l'allocation indexée
- fragmentation interne lorsque taille fichier < taille bloc - fragmentation interne lorsque taille fichier < taille bloc
[//]: # ---------------------------------------------------------------- --
## Ressources ## Ressources
\small \small
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="generator" content="pandoc">
<meta name="author" content="Guillaume Chanel"> <meta name="author" content="Guillaume Chanel">
<title>Systèmes de fichiers</title> <title>Systèmes de fichiers</title>
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes">
...@@ -39,6 +38,13 @@ ...@@ -39,6 +38,13 @@
<body> <body>
<div class="reveal"> <div class="reveal">
<div class="slides"> <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="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="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> <section data-markdown="03_Systemes_fichiers_struct_disque.md" data-separator-vertical="^\r?\n--\r?\n$"></section>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment