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
<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
- 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
![](images/internal_fragmentation.png){ width=50% }
![](images/internal_fragmentation.png)<!-- .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
![](images/external_fragmentation.png){ width=80% }
<div>
:::
::::::
![](images/external_fragmentation.png)
</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
![](images/contiguous_alloc.png){ width=70% }
## 1. Allocation contiguë : exemple
[//]: # ----------------------------------------------------------------
## 1 | Allocation contiguë : synthèse
![](images/contiguous_alloc.png)<!-- .element width="60%" -->
--
## 1. Allocation contiguë : synthèse
<fieldset class="OK">
<legend>Avantages</legend>
- \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}}
</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}
![](images/linked_list.png){ width=70% }
\vspace{.3cm}
![](images/linked_list.png)
[//]: # ----------------------------------------------------------------
## 2 | Allocation par liste chaînée : exemple
--
\centering
![](images/linked_list_alloc.png){ width=70% }
## 2. Allocation par liste chaînée : exemple
[//]: # ----------------------------------------------------------------
## 2 | Allocation par liste chaînée : synthèse
![](images/linked_list_alloc.png)<!-- .element width="55%" -->
--
## 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
- facile à implémenter, mais le stockage des pointeurs est délicat
- 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 aléatoire lent : adresse difficile à calculer
- fragmentation interne lorsque taille fichier < taille bloc
[//]: # ----------------------------------------------------------------
## 2b | Allocation par FAT
</fieldset>
:::::: {.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
- 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
![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)
:::
::::::
--
[//]: # ----------------------------------------------------------------
## 2b | Contenu de la FAT : exemple
## 2.b. FS de type FAT : exemple
\centering
![](images/FAT_alloc.png){ width=100% }
[//]: # ----------------------------------------------------------------
## 2b | 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
![](images/indexed_alloc.png){ 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
![](images/multi_indexed_alloc.png){ 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
......
......@@ -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>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment