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
-![](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%" -->
 
-- \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}  
-  ![](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%" -->
 
-- \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
+![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
-
-\centering
-![](images/FAT_alloc.png){ 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
 ![](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
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