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

Finalize part 1

parent 4d2fba65
No related branches found
No related tags found
No related merge requests found
...@@ -9,21 +9,18 @@ ...@@ -9,21 +9,18 @@
- Adressable par le triplet CHS :\ - Adressable par le triplet CHS :\
{ Cylinder, Head, Sector } { Cylinder, Head, Sector }
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> </small>
<div> <div>
<small> ![](images/hdd.png) <!-- .element width="90%" -->
![](images/hdd.png) <!-- .element width="70%" -->
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>
</div> </div>
</div> </div>
...@@ -113,10 +110,10 @@ Si on fait abstraction de la gestion du cache, l'interface d'accès à un périp ...@@ -113,10 +110,10 @@ Si on fait abstraction de la gestion du cache, l'interface d'accès à un périp
## 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)
- La lecture/écriture se fait uniquement par bloc, donc par unité de $n$ bytes - La lecture/écriture se fait uniquement par bloc, donc par unité de $n$ bytes
- 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$`
![](images/addressing.png)<!-- .element width="70%" --> ![](images/addressing.png)<!-- .element width="70%" -->
...@@ -127,12 +124,12 @@ Si on fait abstraction de la gestion du cache, l'interface d'accès à un périp ...@@ -127,12 +124,12 @@ Si on fait abstraction de la gestion du cache, l'interface d'accès à un périp
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 ? \
- `$[1024*17,1024*(17+1)-1] = [17408,18431]$` `$[1024*17,1024*(17+1)-1] = [17408,18431]$` <!-- .element: class="fragment" data-fragment-index="0" -->
- 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 ? \
- `$7000/1024 = 6.8359375 = 6$` `$7000/1024 = 6.8359375 = 6$` <!-- .element: class="fragment" data-fragment-index="1" -->
- À 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 ? \
- `$7000 \% 1024 = 856$` `$7000 \% 1024 = 856$` <!-- .element: class="fragment" data-fragment-index="2" -->
![](images/addressing_example.png)<!-- .element width="70%" --> ![](images/addressing_example.png)<!-- .element width="70%" -->
...@@ -144,13 +141,15 @@ Exemple : périphérique de 10MB (1024 * 1024 * 10 bytes), taille de bloc de 102 ...@@ -144,13 +141,15 @@ Exemple : périphérique de 10MB (1024 * 1024 * 10 bytes), taille de bloc de 102
- 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 :
<div style="font-size: 0.9em">
- `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)`
</div>
-- --
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment