From 4d2fba65212646289ddbc8e24d1259c225c7e419 Mon Sep 17 00:00:00 2001 From: Guillaume Chanel <Guillaume.Chanel@unige.ch> Date: Thu, 22 Aug 2024 18:33:45 +0200 Subject: [PATCH] First presentation almost over --- 9.filesystems/01_Systemes_fichiers_intro.md | 163 ++++++++------------ 9.filesystems/index.html | 2 +- 2 files changed, 66 insertions(+), 99 deletions(-) diff --git a/9.filesystems/01_Systemes_fichiers_intro.md b/9.filesystems/01_Systemes_fichiers_intro.md index d4b2b15..ee5b71c 100644 --- a/9.filesystems/01_Systemes_fichiers_intro.md +++ b/9.filesystems/01_Systemes_fichiers_intro.md @@ -1,30 +1,7 @@ ---- -author: Florent Gluck - Florent.Gluck@hesge.ch - -title: Systèmes de fichiers - Introduction - -date: \vspace{.5cm} \footnotesize \today - -institute: \vspace{0.5cm} \tiny \textsuperscript{*}Remerciements à Mickaël Hoerdt - -pandoc-latex-fontsize: - - classes: [tiny] - size: tiny - - classes: [verysmall] - size: scriptsize - - classes: [small] - size: footnotesize - - classes: [huge, important] - size: huge ---- - -[//]: # ---------------------------------------------------------------- ## Historique -\small - -:::::: {.columns} -::: {.column width="55%"} +<div class="cols"> +<small> - Les systèmes de fichiers ont été conçu pour accéder, avec une interface simple, à des périphériques de stockage de masse (persistents) - Premiers périphériques de stockage de masse étaient basé sur des disques magnétiques appelés *Hard Disk Drive* @@ -32,71 +9,67 @@ pandoc-latex-fontsize: - Adressable par le triplet CHS :\ { Cylinder, Head, Sector } -::: -::: {.column width="45%"} +</small> +<div> -{ width=70% } +<small> -\tiny + <!-- .element width="70%" --> -a. Plateaux -a. Bras mobile -a. Têtes de lecture/écriture reliées par le bras mobile -a. Cylindre = coupe transversale des plateaux -a. Pistes = groupe de secteurs contigüs -a. Secteur angulaire +A. Plateaux +B. Bras mobile +C. Têtes de lecture/écriture reliées par le bras mobile +D. Cylindre = coupe transversale des plateaux +E. Pistes = groupe de secteurs contigüs +F. Secteur angulaire -::: -:::::: +</small> -[//]: # ---------------------------------------------------------------- -## Historique : premier disque dur +</div> +</div> -\footnotesize + +-- + +## Historique : premier disque dur Premier disque dur conçu en 1956 pour le super-computer IBM 305 Ramac -- Capacité : 4.8MB - - \scriptsize 50 plateaux de 60cm (24"), contenant chacun 100 pistes/faces, contenant chacune 5 secteurs de 100 octets +- Capacité : 4.8MB <!-- .element font-size="5" --> + - 50 plateaux de 60cm (24"), contenant chacun 100 pistes/faces, contenant chacune 5 secteurs de 100 octets - Débit : 8.8KB/sec. - Vitesse : 1200 tours/min. - 2 têtes lecture/écriture, 1 sec. pour passer d'un plateau à l'autre - Prix du système complet : $33'200/mois -\centering -{ width=50% } +<!-- .element width="40%" --> -[//]: # ---------------------------------------------------------------- -## Aujourd'hui +-- -\small +## Aujourd'hui - Les **disques durs mécanique (HDD)** utilisent les mêmes principes (cylindres, pistes, têtes, des secteurs), mais : - - \footnotesize performances et capacités ont augmenté exponentiellement + - performances et capacités ont augmenté exponentiellement - adressage physique CHS remplacé par adressage logique : LBA (*Logical Block Addressing*) - taille physique d'un secteur est souvent 4KB avec émulation à 512 bytes par le firmware -- Les **disques durs à base de flash[^1] (SSD)** ne comportent pas de partie mécanique, mais présentent aussi des secteurs de 512 bytes adressés logiquement en LBA (émulation réalisée par le firmware) - - \footnotesize la plupart des périphiques de stockage à base de flash sont similaires (clés USB, cartes SD, etc.) +- Les **disques durs à base de [flash](https://www.arrow.com/en/research-and-events/articles/nand-memory-explained-understanding-pros-and-cons-of-nand) (SSD)** ne comportent pas de partie mécanique, mais présentent aussi des secteurs de 512 bytes adressés logiquement en LBA (émulation réalisée par le firmware) + - la plupart des périphiques de stockage à base de flash sont similaires (clés USB, cartes SD, etc.) -[^1]: \tiny Flash de type NAND: [\textcolor{myblue}{https://www.arrow.com/en/research-and-events/articles/nand-memory-explained-understanding-pros-and-cons-of-nand}](https://www.arrow.com/en/research-and-events/articles/nand-memory-explained-understanding-pros-and-cons-of-nand) +-- -[//]: # ---------------------------------------------------------------- ## Structure d'un disque -\small - - Un disque est divisé en unités de taille identique appelées **secteurs** - La taille typique d'un secteur est 512 bytes, mais il existe des secteurs plus grands (2KB, 4KB, etc.) - Un secteur est la plus petite unité physique pouvant être lue ou écrite - La lecture ou l'écriture d'un secteur est une opération **atomique** -\vspace{.2cm} +<!-- .element width="80%" --> -\centering -{ width=80% } -[//]: # ---------------------------------------------------------------- +-- + ## UNIX et blocs - Dans un OS de type UNIX, on parle de blocs plutôt que de secteurs @@ -105,27 +78,25 @@ Premier disque dur conçu en 1956 pour le super-computer IBM 305 Ramac gestion de lecture/écriture par blocs - Permet d'être indépendant du type de périphérique $\rightarrow$ généricité -[//]: # ---------------------------------------------------------------- -## Secteurs, blocs et clusters -\small +-- + +## Secteurs, blocs et clusters -- L'unité d'allocation de base des systèmes de fichiers n'est pas le secteur, mais une unité plus grande (ou égale) appelée **bloc**[^2] +- L'unité d'allocation de base des systèmes de fichiers n'est pas le secteur, mais une unité plus grande (ou égale) appelée **bloc**<sup>1</sup> - **Un bloc est une collection contiguë de secteurs** - Un système de fichiers (FS) divise l'espace disque en blocs de taille égale - Généralement, un bloc fait entre 1KB et 8KB - La commande `stat fichier` affiche la taille d'un bloc du FS où se trouve `fichier` (champ *IO Block*) -\vspace{.1cm} +<!-- .element width="80%" --> -\centering -{ width=80% } -\vspace{.3cm} +<small>1: Microsoft appelle un bloc un *cluster*</small> -[^2]: \footnotesize Microsoft appelle un bloc un *cluster* -[//]: # ---------------------------------------------------------------- +-- + ## Interface périphérique bloc Si on fait abstraction de la gestion du cache, l'interface d'accès à un périphérique de type bloc est très simple : @@ -137,7 +108,9 @@ Si on fait abstraction de la gestion du cache, l'interface d'accès à un périp - `read_blocks(dev, block_nb, buf, count)` - `write_blocks(dev, block_nb, buf, count)` -[//]: # ---------------------------------------------------------------- + +-- + ## Adressage - Les blocs d'un périphérique de taille $N$ blocs de $n$ bytes chacun, sont adressables de $0$ à $N-1$ (comme un tableau en C) @@ -145,71 +118,65 @@ Si on fait abstraction de la gestion du cache, l'interface d'accès à un périp - La lecture/écriture du bloc $0$ traite les bytes de l'offset $0$ à l'offset $n-1$ du périphérique - La lecture/écriture du bloc $b$ traite les bytes de l'offset $n*b$ à l'offset $n*(b+1)-1$ -\vspace{.3cm} +<!-- .element width="70%" --> -\centering -{ width=70% } -[//]: # ---------------------------------------------------------------- -## Adressage : exemple +-- -::: incremental +## Adressage : exemple -Exemple : périphérique de 10MB ($1024*1024*10$ bytes), taille de bloc de 1024 bytes +Exemple : périphérique de 10MB (1024 * 1024 * 10 bytes), taille de bloc de 1024 bytes - Quelle est l'intervalle des offsets des bytes du bloc numéro 17 ? - - \textcolor{myorange}{$[1024*17,1024*(17+1)-1] = [17408,18431]$} + - `$[1024*17,1024*(17+1)-1] = [17408,18431]$` - Dans quel bloc se trouve le byte localisé à l'offset 7000 du périphérique ? - - \textcolor{myorange}{$7000/1024 = 6.8359375 = 6$} + - `$7000/1024 = 6.8359375 = 6$` - À quel offset du bloc est localisé le byte se trouvant à l'offset 7000 du périphérique ? - - \textcolor{myorange}{$7000\ \%\ 1024 = 856$} + - `$7000 \% 1024 = 856$` -::: +<!-- .element width="70%" --> -\vspace{.3cm} -\centering -{ width=70% } +-- -[//]: # ---------------------------------------------------------------- ## Abstraction (1/2) - Avec cet adressage logique, on peut facilement émuler un périphérique bloc à partir d'un fichier image - On peut y accéder via les appels systèmes usuels `read` et `write` - Ces appels système peuvent simplement être mappés sur les fonctions décrites précédemment : - - \small `init_block_dev(dev, size)` $\longrightarrow$ `fd = open(file)` + - `init_block_dev(dev, size)` $\longrightarrow$ `fd = open(file)` - `read_blocks(dev, block_nb, buf, count)` $\longrightarrow$ `read(fd)` - `write_blocks(dev, block_nb, buf, count)` $\longrightarrow$ `write(fd)` -[//]: # ---------------------------------------------------------------- + +-- + ## Abstraction (2/2) - Le fichier image peut-être distant, si on implémente l'abstraction au dessus des sockets et d'un protocole qui reste très simple : - - \small `init_block_dev(dev, size)` $\longrightarrow$ `s = socket()` + - `init_block_dev(dev, size)` $\longrightarrow$ `s = socket()` - `read_blocks(block_nb, buf, count)` $\longrightarrow$ `read(s)` - `write_blocks(block_nb, buf, count)` $\longrightarrow$ `write(s)` -[//]: # ---------------------------------------------------------------- + +-- + ## Conclusion -::: incremental +- On peut lire/écrire des blocs adressés logiquement, mais on est encore loin d'un FS <!-- .element: class="fragment" data-fragment-index="0" --> +- Comment à partir de ces opérations simples, peut-on construire un FS ? <!-- .element: class="fragment" data-fragment-index="2" --> +- Pour cela, il est nécessaire de comprendre l'allocation des blocs de données ainsi que l'organisation sur disque d'un FS <!-- .element: class="fragment" data-fragment-index="3" --> -- On peut lire/écrire des blocs adressés logiquement, mais on est encore loin d'un FS -- Comment à partir de ces opérations simples, peut-on construire un FS ? -- Pour cela, il est nécessaire de comprendre l'allocation des blocs de données ainsi que l'organisation sur disque d'un FS -::: +-- -[//]: # ---------------------------------------------------------------- ## Ressources -\small +- [Operating Systems: Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/OSTEP/), Remzi H. and Andrea C. Arpaci-Dusseau. Arpaci-Dusseau Books -- Operating Systems: Three Easy Pieces, Remzi H. and Andrea C. Arpaci-Dusseau. Arpaci-Dusseau Books\ -\footnotesize [\textcolor{myblue}{http://pages.cs.wisc.edu/~remzi/OSTEP/}](http://pages.cs.wisc.edu/~remzi/OSTEP/) - - livre disponible à la bibliothèque +livre disponible à la bibliothèque diff --git a/9.filesystems/index.html b/9.filesystems/index.html index 3e81c03..74c6652 100644 --- a/9.filesystems/index.html +++ b/9.filesystems/index.html @@ -5,7 +5,7 @@ <meta charset="utf-8"> <meta name="generator" content="pandoc"> <meta name="author" content="Guillaume Chanel"> - <title>Drivers et modules</title> + <title>Systèmes de fichiers</title> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui"> -- GitLab