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

First presentation almost over

parent 4cf076a7
No related branches found
No related tags found
No related merge requests found
---
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 ## Historique
\small <div class="cols">
<small>
:::::: {.columns}
::: {.column width="55%"}
- 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) - 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* - 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: ...@@ -32,71 +9,67 @@ pandoc-latex-fontsize:
- Adressable par le triplet CHS :\ - Adressable par le triplet CHS :\
{ Cylinder, Head, Sector } { Cylinder, Head, Sector }
::: </small>
::: {.column width="45%"} <div>
![](images/hdd.png){ width=70% } <small>
\tiny ![](images/hdd.png) <!-- .element width="70%" -->
a. Plateaux A. Plateaux
a. Bras mobile B. Bras mobile
a. Têtes de lecture/écriture reliées par le bras mobile C. Têtes de lecture/écriture reliées par le bras mobile
a. Cylindre = coupe transversale des plateaux D. Cylindre = coupe transversale des plateaux
a. Pistes = groupe de secteurs contigüs E. Pistes = groupe de secteurs contigüs
a. Secteur angulaire F. Secteur angulaire
::: </small>
::::::
[//]: # ---------------------------------------------------------------- </div>
## Historique : premier disque dur </div>
\footnotesize
--
## Historique : premier disque dur
Premier disque dur conçu en 1956 pour le super-computer IBM 305 Ramac Premier disque dur conçu en 1956 pour le super-computer IBM 305 Ramac
- Capacité : 4.8MB - Capacité : 4.8MB <!-- .element font-size="5" -->
- \scriptsize 50 plateaux de 60cm (24"), contenant chacun 100 pistes/faces, contenant chacune 5 secteurs de 100 octets - 50 plateaux de 60cm (24"), contenant chacun 100 pistes/faces, contenant chacune 5 secteurs de 100 octets
- Débit : 8.8KB/sec. - Débit : 8.8KB/sec.
- Vitesse : 1200 tours/min. - Vitesse : 1200 tours/min.
- 2 têtes lecture/écriture, 1 sec. pour passer d'un plateau à l'autre - 2 têtes lecture/écriture, 1 sec. pour passer d'un plateau à l'autre
- Prix du système complet : $33'200/mois - Prix du système complet : $33'200/mois
\centering ![](images/IBM-305-RAMAC.jpg)<!-- .element width="40%" -->
![](images/IBM-305-RAMAC.jpg){ width=50% }
[//]: # ---------------------------------------------------------------- --
## Aujourd'hui
\small ## Aujourd'hui
- Les **disques durs mécanique (HDD)** utilisent les mêmes principes (cylindres, pistes, têtes, des secteurs), mais : - 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*) - 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 - 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) - 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)
- \footnotesize la plupart des périphiques de stockage à base de flash sont similaires (clés USB, cartes SD, etc.) - 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 ## Structure d'un disque
\small
- Un disque est divisé en unités de taille identique appelées **secteurs** - 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.) - 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 - 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** - La lecture ou l'écriture d'un secteur est une opération **atomique**
\vspace{.2cm} ![](images/sectors.png)<!-- .element width="80%" -->
\centering
![](images/sectors.png){ width=80% }
[//]: # ---------------------------------------------------------------- --
## UNIX et blocs ## UNIX et blocs
- Dans un OS de type UNIX, on parle de blocs plutôt que de secteurs - 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 ...@@ -105,27 +78,25 @@ Premier disque dur conçu en 1956 pour le super-computer IBM 305 Ramac
gestion de lecture/écriture par blocs gestion de lecture/écriture par blocs
- Permet d'être indépendant du type de périphérique $\rightarrow$ généricité - 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 bloc est une collection contiguë de secteurs**
- Un système de fichiers (FS) divise l'espace disque en blocs de taille égale - 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 - 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*) - La commande `stat fichier` affiche la taille d'un bloc du FS où se trouve `fichier` (champ *IO Block*)
\vspace{.1cm} ![](images/block_and_cluster.png)<!-- .element width="80%" -->
\centering
![](images/block_and_cluster.png){ 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 ## 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 : 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 ...@@ -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)` - `read_blocks(dev, block_nb, buf, count)`
- `write_blocks(dev, block_nb, buf, count)` - `write_blocks(dev, block_nb, buf, count)`
[//]: # ----------------------------------------------------------------
--
## Adressage ## 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) - 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 ...@@ -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 $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$ - La lecture/écriture du bloc $b$ traite les bytes de l'offset $n*b$ à l'offset $n*(b+1)-1$
\vspace{.3cm} ![](images/addressing.png)<!-- .element width="70%" -->
\centering
![](images/addressing.png){ 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 ? - 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 ? - 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 ? - À 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$`
::: ![](images/addressing_example.png)<!-- .element width="70%" -->
\vspace{.3cm}
\centering
![](images/addressing_example.png){ width=70% }
--
[//]: # ----------------------------------------------------------------
## Abstraction (1/2) ## Abstraction (1/2)
- Avec cet adressage logique, on peut facilement émuler un périphérique bloc à partir d'un fichier image - 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` - 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 : - 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)` - `read_blocks(dev, block_nb, buf, count)` $\longrightarrow$ `read(fd)`
- `write_blocks(dev, block_nb, buf, count)` $\longrightarrow$ `write(fd)` - `write_blocks(dev, block_nb, buf, count)` $\longrightarrow$ `write(fd)`
[//]: # ----------------------------------------------------------------
--
## Abstraction (2/2) ## Abstraction (2/2)
- Le fichier image peut-être distant, si on implémente l'abstraction au dessus des sockets et d'un protocole qui - 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 : 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)` - `read_blocks(block_nb, buf, count)` $\longrightarrow$ `read(s)`
- `write_blocks(block_nb, buf, count)` $\longrightarrow$ `write(s)` - `write_blocks(block_nb, buf, count)` $\longrightarrow$ `write(s)`
[//]: # ----------------------------------------------------------------
--
## Conclusion ## 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 ## 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\ livre disponible à la bibliothèque
\footnotesize [\textcolor{myblue}{http://pages.cs.wisc.edu/~remzi/OSTEP/}](http://pages.cs.wisc.edu/~remzi/OSTEP/)
- livre disponible à la bibliothèque
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="generator" content="pandoc"> <meta name="generator" content="pandoc">
<meta name="author" content="Guillaume Chanel"> <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-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <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"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment