Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
course
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
gc_courses
sys-exploit
course
Commits
f93b3b12
Commit
f93b3b12
authored
10 months ago
by
Guillaume Chanel
Browse files
Options
Downloads
Patches
Plain Diff
WIP: add part 4 on minix
parent
e91eac4b
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
9.filesystems/04_Systemes_fichiers_minix.md
+82
-81
82 additions, 81 deletions
9.filesystems/04_Systemes_fichiers_minix.md
9.filesystems/Ressources.md
+5
-3
5 additions, 3 deletions
9.filesystems/Ressources.md
with
87 additions
and
84 deletions
9.filesystems/04_Systemes_fichiers_minix.md
+
82
−
81
View file @
f93b3b12
---
# MINIX-fs
author
:
Florent Gluck - Florent.Gluck@hesge.ch
title
:
Systèmes de fichiers - MINIX-fs
<!--
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
---
## TODO
## TODO
...
@@ -27,7 +11,10 @@ pandoc-latex-fontsize:
...
@@ -27,7 +11,10 @@ pandoc-latex-fontsize:
-
"tree --inodes -p -s -a" affiche arborescence avec n°inodes, permissions+type, tailles
-
"tree --inodes -p -s -a" affiche arborescence avec n°inodes, permissions+type, tailles
-
"-a" affiche également les fichiers cachés
-
"-a" affiche également les fichiers cachés
[
//
]:
#
----------------------------------------------------------------
-->
--
## Introduction à MINIX-fs
## Introduction à MINIX-fs
-
MINIX-fs est le système de fichiers (FS) natif du système d'exploitation MINIX écrit par Andrew S. Tanenbaum en 1987
-
MINIX-fs est le système de fichiers (FS) natif du système d'exploitation MINIX écrit par Andrew S. Tanenbaum en 1987
...
@@ -35,7 +22,8 @@ pandoc-latex-fontsize:
...
@@ -35,7 +22,8 @@ pandoc-latex-fontsize:
-
de répliquer la structure du FS de UNIX, mais sans les fonctionnalités avancées et complexes de ce dernier
-
de répliquer la structure du FS de UNIX, mais sans les fonctionnalités avancées et complexes de ce dernier
-
de fournir une aide à l'enseignement des systèmes de fichiers et des OS
-
de fournir une aide à l'enseignement des systèmes de fichiers et des OS
[
//
]:
#
----------------------------------------------------------------
--
## Linux et MINIX-fs
## Linux et MINIX-fs
-
Les premières versions du noyau Linux (1992) utilisaient MINIX-fs comme FS
-
Les premières versions du noyau Linux (1992) utilisaient MINIX-fs comme FS
...
@@ -46,7 +34,8 @@ pandoc-latex-fontsize:
...
@@ -46,7 +34,8 @@ pandoc-latex-fontsize:
-
2006 : la version instable de ext4 est publiée
-
2006 : la version instable de ext4 est publiée
-
2008 : la version stable de ext4 est publiée
-
2008 : la version stable de ext4 est publiée
[
//
]:
#
----------------------------------------------------------------
--
## Versions de MINIX-fs
## Versions de MINIX-fs
-
Il existe 3 versions de MINIX-fs : v1, v2 et v3
-
Il existe 3 versions de MINIX-fs : v1, v2 et v3
...
@@ -55,45 +44,40 @@ pandoc-latex-fontsize:
...
@@ -55,45 +44,40 @@ pandoc-latex-fontsize:
-
variante avec noms de fichiers de 14 caractères max (superblock magic value
`0x137F`
)
-
variante avec noms de fichiers de 14 caractères max (superblock magic value
`0x137F`
)
-
variante avec noms de fichiers de 30 caractères max (superblock magic value
`0x138F`
)
-
variante avec noms de fichiers de 30 caractères max (superblock magic value
`0x138F`
)
[
//
]:
#
----------------------------------------------------------------
--
## Comparaison MINIX-fs et ext2/3/4
## Comparaison MINIX-fs et ext2/3/4
Valeurs max pour les caractéristiques principales des FS :
Valeurs max pour les caractéristiques principales des FS :
\f
ootnotesize
Name | FS | File | Block | Extent | File length
--------------|--------|-------- |-------------|---------- |---------------
MINIX-fs v1.0 |256 MB |256 MB |1 KB (fixed) |n/a |14/30
ext |2 GB |2 GB |? |n/a |255
ext2 |32 TB |2 TB |8 KB |n/a |255
ext3 |32 TB |2 TB |8 KB |n/a |255
ext4 |1 EB |16 TB |4 KB |128 MB |255
**Name**
**FS**
**File**
**Block**
**Extent**
**File length**
<br>
------------- --------------- -------------------- --------------- ---------- ---------------
<div
style=
"font-size:0.85em"
>
Remarque : ext3 est simplement ext2 avec l'ajout d'un journal
</div>
MINIX-fs v1.0 256 MB 256 MB 1 KB (fixed) n/a 14/30
ext 2 GB 2 GB ? n/a 255
ext2 32 TB 2 TB 8 KB n/a 255
ext3 32 TB 2 TB 8 KB n/a 255
ext4 1 EB 16 TB 4 KB 128 MB 255
\s
mall
--
Remarque : ext3 est simplement ext2 avec l'ajout d'un journal
[
//
]:
#
----------------------------------------------------------------
## Structure générale
## Structure générale
\s
mall
Structure générale sur disque de MINIX-fs v1.0
Structure générale sur disque de MINIX-fs v1.0
\v
space{.5cm}
\c
entering


{ width=100% }
--
[
//
]:
#
----------------------------------------------------------------
## Structure des inodes
## Structure des inodes
\s
mall
Structure d'un inode dans MINIX-fs v1.0 :
Structure d'un inode dans MINIX-fs v1.0 :
\v
space{.2cm}
```
c
```
{.c .verysmall}
struct
minix_inode
{
struct
minix_inode
{
u16
i_mode
;
// file type and permissions for file
u16
i_mode
;
// file type and permissions for file
u16
i_uid
;
// user id
u16
i_uid
;
// user id
...
@@ -111,29 +95,29 @@ struct minix_inode {
...
@@ -111,29 +95,29 @@ struct minix_inode {
-
**Important**
: structure sur disque stockée selon l'ordre
*little-endian*
-
**Important**
: structure sur disque stockée selon l'ordre
*little-endian*
-
Taille d'un inode en bytes ?
-
Taille d'un inode en bytes ?
[
//
]:
#
----------------------------------------------------------------
--
## Structure du mode du fichier
## Structure du mode du fichier
Format du champs
`i_mode`
(16 bits) de l'inode :
Format du champs
`i_mode`
(16 bits) de l'inode :
\f
ootnotesize
Bits | Description | t
----------------| -------------------------- |---------------------------
`12-15`
| Type de fichier : |
`0x1`
: named pipe (FIFO)
`` | a |`0x2` : char device
b | b |`0x4` : directory
c | c |`0x6` : block device
d | d |`0x8` : regular file
we | e |`0xA` : symbolic link
`11` | SUID bit |
`10` | SGID bit |
`9` | Sticky bit |
`6-8` | user permissions (rwx) |
`3-5` | group permissions (rwx) |
`0-2` | others permissions (rwx) |
--
**Bits**
**Description**
---------------- -------------------------- ---------------------------
`12-15`
Type de fichier :
`0x1`
: named pipe (FIFO)
`0x2`
: char device
`0x4`
: directory
`0x6`
: block device
`0x8`
: regular file
`0xA`
: symbolic link
`11`
SUID bit
`10`
SGID bit
`9`
Sticky bit
`6-8`
user permissions (rwx)
`3-5`
group permissions (rwx)
`0-2`
others permissions (rwx)
[
//
]:
#
----------------------------------------------------------------
## Structure des entrées de répertoires
## Structure des entrées de répertoires
Structure d'une entrée de répertoire dans MINIX-fs v1.0 :
Structure d'une entrée de répertoire dans MINIX-fs v1.0 :
...
@@ -152,7 +136,8 @@ struct minix_dir_entry {
...
@@ -152,7 +136,8 @@ struct minix_dir_entry {
- Taille d'un `dir_entry` en bytes ?
- Taille d'un `dir_entry` en bytes ?
[
//
]:
#
----------------------------------------------------------------
--
## Structure du superbloc
## Structure du superbloc
Structure du superbloc dans MINIX-fs v1.0 :
Structure du superbloc dans MINIX-fs v1.0 :
...
@@ -176,7 +161,8 @@ struct minix_super_block {
...
@@ -176,7 +161,8 @@ struct minix_super_block {
-
Taille du superbloc en bytes ?
-
Taille du superbloc en bytes ?
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de superbloc
## Exemple de superbloc
-
Soit un disque de 20 MB et une taille de bloc de 1 KB
\
-
Soit un disque de 20 MB et une taille de bloc de 1 KB
\
...
@@ -207,7 +193,8 @@ struct minix_super_block {
...
@@ -207,7 +193,8 @@ struct minix_super_block {
[
^1
]:
\scriptsize
permet d'arrondir au prochain multiple de la taille d'un inode
[
^1
]:
\scriptsize
permet d'arrondir au prochain multiple de la taille d'un inode
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de superbloc
## Exemple de superbloc
```
{.c .tiny}
```
{.c .tiny}
...
@@ -233,7 +220,8 @@ struct minix_super_block {
...
@@ -233,7 +220,8 @@ struct minix_super_block {
\c
entering
\c
entering

{ width=100% }

{ width=100% }
[
//
]:
#
----------------------------------------------------------------
--
## Exemple d'inode - fichier répertoire
## Exemple d'inode - fichier répertoire
Contenu de l'inode 1, la racine du FS
Contenu de l'inode 1, la racine du FS
...
@@ -257,7 +245,8 @@ struct minix_inode {
...
@@ -257,7 +245,8 @@ struct minix_inode {
};
};
```
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de bloc de données - contenu répertoire
## Exemple de bloc de données - contenu répertoire
\f
ootnotesize
\f
ootnotesize
...
@@ -289,7 +278,8 @@ struct minix_inode {
...
@@ -289,7 +278,8 @@ struct minix_inode {
-
7 répertoires :
`root`
,
`bin`
,
`usr`
,
`etc`
,
`tmp`
,
`dev`
(inodes 1, 2, 3, 4, 0xA, 0xF, 0x32)
-
7 répertoires :
`root`
,
`bin`
,
`usr`
,
`etc`
,
`tmp`
,
`dev`
(inodes 1, 2, 3, 4, 0xA, 0xF, 0x32)
-
8
`dir_entry`
inutilisées (inodes à 0) ; rappel : une entrée fait 16 bytes
-
8
`dir_entry`
inutilisées (inodes à 0) ; rappel : une entrée fait 16 bytes
[
//
]:
#
----------------------------------------------------------------
--
## Exemple d'inode - fichier répertoire
## Exemple d'inode - fichier répertoire
Contenu de l'inode 2, répertoire
`/root`
Contenu de l'inode 2, répertoire
`/root`
...
@@ -313,7 +303,8 @@ struct minix_inode {
...
@@ -313,7 +303,8 @@ struct minix_inode {
};
};
```
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de bloc de données - contenu répertoire
## Exemple de bloc de données - contenu répertoire
\s
mall
\s
mall
...
@@ -343,7 +334,8 @@ struct minix_inode {
...
@@ -343,7 +334,8 @@ struct minix_inode {
-
Il y a 2 fichiers :
`hello.c`
(inode 0xB) et
`.bash_login`
(inode 0xE)
-
Il y a 2 fichiers :
`hello.c`
(inode 0xB) et
`.bash_login`
(inode 0xE)
-
Il y a 4
`dir_entry`
inutilisées (inodes à 0)
-
Il y a 4
`dir_entry`
inutilisées (inodes à 0)
[
//
]:
#
----------------------------------------------------------------
--
## Exemple d'inode - fichier régulier
## Exemple d'inode - fichier régulier
Contenu de l'inode 11 (0xB)
Contenu de l'inode 11 (0xB)
...
@@ -366,7 +358,8 @@ struct minix_inode {
...
@@ -366,7 +358,8 @@ struct minix_inode {
};
};
```
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de bloc de données - contenu fichier régulier
## Exemple de bloc de données - contenu fichier régulier
\s
mall
\s
mall
...
@@ -393,7 +386,8 @@ Contenu du 1er bloc de données référencé par l'inode 11\
...
@@ -393,7 +386,8 @@ Contenu du 1er bloc de données référencé par l'inode 11\
00091CD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00091CD0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
```
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple d'inode - fichier régulier
## Exemple d'inode - fichier régulier
Contenu de l'inode 16
Contenu de l'inode 16
...
@@ -417,7 +411,8 @@ struct minix_inode {
...
@@ -417,7 +411,8 @@ struct minix_inode {
};
};
```
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de bloc de données - contenu fichier régulier
## Exemple de bloc de données - contenu fichier régulier
\s
mall
\s
mall
...
@@ -444,7 +439,8 @@ Contenu du bloc indirect référencé par l'inode 11\
...
@@ -444,7 +439,8 @@ Contenu du bloc indirect référencé par l'inode 11\
-
Prochains blocs de données : 0x254, 0x255, 0x256, 0x257, ...
-
Prochains blocs de données : 0x254, 0x255, 0x256, 0x257, ...
[
//
]:
#
----------------------------------------------------------------
--
## Important : inodes
## Important : inodes
\s
mall
\s
mall
...
@@ -464,7 +460,8 @@ En conséquence :
...
@@ -464,7 +460,8 @@ En conséquence :
-
Pour lire le contenu de l'inode
`n`
, il faut lire l'entrée à l'indice
`(n-1)`
dans la table des inodes
-
Pour lire le contenu de l'inode
`n`
, il faut lire l'entrée à l'indice
`(n-1)`
dans la table des inodes
-
Pour savoir si l'inode
`n`
est utilisé, il faut lire le bit à l'indice
`n`
dans le bitmap des inodes
-
Pour savoir si l'inode
`n`
est utilisé, il faut lire le bit à l'indice
`n`
dans le bitmap des inodes
[
//
]:
#
----------------------------------------------------------------
--
## Important : blocs de données
## Important : blocs de données
\s
mall
\s
mall
...
@@ -493,7 +490,8 @@ En conséquence[^2] :
...
@@ -493,7 +490,8 @@ En conséquence[^2] :
-
le bit 3 du bitmap correspond donc au bloc 113, etc.
-
le bit 3 du bitmap correspond donc au bloc 113, etc.
-->
-->
[
//
]:
#
----------------------------------------------------------------
--
## Rappel : *endianness* (1/2)
## Rappel : *endianness* (1/2)
-
L'
*endianness*
défini la manière dont les entiers sont stockés en mémoire
-
L'
*endianness*
défini la manière dont les entiers sont stockés en mémoire
...
@@ -508,7 +506,8 @@ En conséquence[^2] :
...
@@ -508,7 +506,8 @@ En conséquence[^2] :
-
le byte le plus significatif (d'un mot) est stocké à l'adresse la plus haute
-
le byte le plus significatif (d'un mot) est stocké à l'adresse la plus haute
-
le byte le moins significatif est stocké à l'adresse la plus basse
-
le byte le moins significatif est stocké à l'adresse la plus basse
[
//
]:
#
----------------------------------------------------------------
--
## Rappel : *endianness* (2/2)
## Rappel : *endianness* (2/2)
Exemple de valeurs 8 bits, 16 bits et 32 bits, en représentation hexadécimale, où les adresses "grandissent" de gauche à droite :
Exemple de valeurs 8 bits, 16 bits et 32 bits, en représentation hexadécimale, où les adresses "grandissent" de gauche à droite :
...
@@ -522,7 +521,8 @@ Exemple de valeurs 8 bits, 16 bits et 32 bits, en représentation hexadécimale,
...
@@ -522,7 +521,8 @@ Exemple de valeurs 8 bits, 16 bits et 32 bits, en représentation hexadécimale,
16 bits (2 bytes)
`4c3f`
`4c 3f`
`3f 4c`
16 bits (2 bytes)
`4c3f`
`4c 3f`
`3f 4c`
32 bits (4 bytes)
`4c3f85ed`
`4c 3f 85 ed`
`ed 85 3f 4c`
32 bits (4 bytes)
`4c3f85ed`
`4c 3f 85 ed`
`ed 85 3f 4c`
[
//
]:
#
----------------------------------------------------------------
--
## Sérialisation/déserialisation de structure
## Sérialisation/déserialisation de structure
-
**Sérialisation**
de structure = écriture, en une opération, d'une structure sur un fichier, un socket, un pipe, etc.
-
**Sérialisation**
de structure = écriture, en une opération, d'une structure sur un fichier, un socket, un pipe, etc.
...
@@ -533,7 +533,8 @@ Exemple de valeurs 8 bits, 16 bits et 32 bits, en représentation hexadécimale,
...
@@ -533,7 +533,8 @@ Exemple de valeurs 8 bits, 16 bits et 32 bits, en représentation hexadécimale,
-
**Déserialisation**
de structure = lecture, en une opération, depuis un fichier, un socket, un pipe, etc. dans une structure
-
**Déserialisation**
de structure = lecture, en une opération, depuis un fichier, un socket, un pipe, etc. dans une structure
-
typiquement via un appel à
`read`
ou
`fread`
-
typiquement via un appel à
`read`
ou
`fread`
[
//
]:
#
----------------------------------------------------------------
--
## Danger avec la sérialisation/déserialisation
## Danger avec la sérialisation/déserialisation
```
{.c .tiny}
```
{.c .tiny}
...
@@ -558,7 +559,8 @@ int main() {
...
@@ -558,7 +559,8 @@ int main() {
-
Conséquence :
**\textcolor{myred}{toujours}**
utiliser l'attribut
`__packed__`
sur les structures sérialisées
\
!
-
Conséquence :
**\textcolor{myred}{toujours}**
utiliser l'attribut
`__packed__`
sur les structures sérialisées
\
!
:::
:::
[
//
]:
#
----------------------------------------------------------------
--
## Ressources
## Ressources
\s
mall
\s
mall
...
@@ -568,5 +570,4 @@ int main() {
...
@@ -568,5 +570,4 @@ int main() {
\s
mall
\s
mall
-
`minix-fs`
on-disk structures
\
\f
ootnotesize
[
\textcolor{myblue}{https://github.com/util-linux/util-linux/blob/master/include/minix.h}
](
https://github.com/util-linux/util-linux/blob/master/include/minix.h
)
This diff is collapsed.
Click to expand it.
9.filesystems/Ressources.md
+
5
−
3
View file @
f93b3b12
...
@@ -3,9 +3,11 @@
...
@@ -3,9 +3,11 @@
-
[
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
](
http://pages.cs.wisc.edu/~remzi/OSTEP/
)
, Remzi H. and Andrea C. Arpaci-Dusseau. Arpaci-Dusseau Books
livre disponible à la bibliothèque
livre disponible à la bibliothèque
-
`mkfs.minix`
[
source code
](
https://github.com/util-linux/util-linux/blob/master/disk-utils/mkfs.minix.c
)
-
[
The Second Extended File System - Internal Layout
](
https://www.nongnu.org/ext2-doc/ext2.html
)
-
[
The Second Extended File System - Internal Layout
](
https://www.nongnu.org/ext2-doc/ext2.html
)
-
[
Ext4 (and Ext2/Ext3) Wiki
](
https://ext4.wiki.kernel.org/index.php/Main_Page
)
-
[
Ext4 (and Ext2/Ext3) Wiki
](
https://ext4.wiki.kernel.org/index.php/Main_Page
)
-
`mkfs.minix`
[
source code
](
https://github.com/util-linux/util-linux/blob/master/disk-utils/mkfs.minix.c
)
-
`minix-fs`
[
on-disk structures
](
https://github.com/util-linux/util-linux/blob/master/include/minix.h
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment