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
8 months ago
by
Guillaume Chanel
Browse files
Options
Downloads
Patches
Plain Diff
WIP: add part 4 on minix
parent
e91eac4b
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide 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
---
author
:
Florent Gluck - Florent.Gluck@hesge.ch
# MINIX-fs
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
...
...
@@ -27,7 +11,10 @@ pandoc-latex-fontsize:
-
"tree --inodes -p -s -a" affiche arborescence avec n°inodes, permissions+type, tailles
-
"-a" affiche également les fichiers cachés
[
//
]:
#
----------------------------------------------------------------
-->
--
## 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
...
...
@@ -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 fournir une aide à l'enseignement des systèmes de fichiers et des OS
[
//
]:
#
----------------------------------------------------------------
--
## Linux et MINIX-fs
-
Les premières versions du noyau Linux (1992) utilisaient MINIX-fs comme FS
...
...
@@ -46,7 +34,8 @@ pandoc-latex-fontsize:
-
2006 : la version instable de ext4 est publiée
-
2008 : la version stable de ext4 est publiée
[
//
]:
#
----------------------------------------------------------------
--
## Versions de MINIX-fs
-
Il existe 3 versions de MINIX-fs : v1, v2 et v3
...
...
@@ -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 30 caractères max (superblock magic value
`0x138F`
)
[
//
]:
#
----------------------------------------------------------------
--
## Comparaison MINIX-fs et ext2/3/4
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**
------------- --------------- -------------------- --------------- ---------- ---------------
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
<br>
<div
style=
"font-size:0.85em"
>
Remarque : ext3 est simplement ext2 avec l'ajout d'un journal
</div>
\s
mall
Remarque : ext3 est simplement ext2 avec l'ajout d'un journal
--
[
//
]:
#
----------------------------------------------------------------
## Structure générale
\s
mall
Structure générale sur disque de MINIX-fs v1.0
\v
space{.5cm}
\c
entering

{ width=100% }

--
[
//
]:
#
----------------------------------------------------------------
## Structure des inodes
\s
mall
Structure d'un inode dans MINIX-fs v1.0 :
\v
space{.2cm}
```
{.c .verysmall}
```
c
struct
minix_inode
{
u16
i_mode
;
// file type and permissions for file
u16
i_uid
;
// user id
...
...
@@ -111,29 +95,29 @@ struct minix_inode {
-
**Important**
: structure sur disque stockée selon l'ordre
*little-endian*
-
Taille d'un inode en bytes ?
[
//
]:
#
----------------------------------------------------------------
--
## Structure du mode du fichier
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 d'une entrée de répertoire dans MINIX-fs v1.0 :
...
...
@@ -152,7 +136,8 @@ struct minix_dir_entry {
- Taille d'un `dir_entry` en bytes ?
[
//
]:
#
----------------------------------------------------------------
--
## Structure du superbloc
Structure du superbloc dans MINIX-fs v1.0 :
...
...
@@ -176,7 +161,8 @@ struct minix_super_block {
-
Taille du superbloc en bytes ?
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de superbloc
-
Soit un disque de 20 MB et une taille de bloc de 1 KB
\
...
...
@@ -207,7 +193,8 @@ struct minix_super_block {
[
^1
]:
\scriptsize
permet d'arrondir au prochain multiple de la taille d'un inode
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de superbloc
```
{.c .tiny}
...
...
@@ -233,7 +220,8 @@ struct minix_super_block {
\c
entering

{ width=100% }
[
//
]:
#
----------------------------------------------------------------
--
## Exemple d'inode - fichier répertoire
Contenu de l'inode 1, la racine du FS
...
...
@@ -257,7 +245,8 @@ struct minix_inode {
};
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de bloc de données - contenu répertoire
\f
ootnotesize
...
...
@@ -289,7 +278,8 @@ struct minix_inode {
-
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
[
//
]:
#
----------------------------------------------------------------
--
## Exemple d'inode - fichier répertoire
Contenu de l'inode 2, répertoire
`/root`
...
...
@@ -313,7 +303,8 @@ struct minix_inode {
};
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de bloc de données - contenu répertoire
\s
mall
...
...
@@ -343,7 +334,8 @@ struct minix_inode {
-
Il y a 2 fichiers :
`hello.c`
(inode 0xB) et
`.bash_login`
(inode 0xE)
-
Il y a 4
`dir_entry`
inutilisées (inodes à 0)
[
//
]:
#
----------------------------------------------------------------
--
## Exemple d'inode - fichier régulier
Contenu de l'inode 11 (0xB)
...
...
@@ -366,7 +358,8 @@ struct minix_inode {
};
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de bloc de données - contenu fichier régulier
\s
mall
...
...
@@ -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 ................
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple d'inode - fichier régulier
Contenu de l'inode 16
...
...
@@ -417,7 +411,8 @@ struct minix_inode {
};
```
[
//
]:
#
----------------------------------------------------------------
--
## Exemple de bloc de données - contenu fichier régulier
\s
mall
...
...
@@ -444,7 +439,8 @@ Contenu du bloc indirect référencé par l'inode 11\
-
Prochains blocs de données : 0x254, 0x255, 0x256, 0x257, ...
[
//
]:
#
----------------------------------------------------------------
--
## Important : inodes
\s
mall
...
...
@@ -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 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
\s
mall
...
...
@@ -493,7 +490,8 @@ En conséquence[^2] :
-
le bit 3 du bitmap correspond donc au bloc 113, etc.
-->
[
//
]:
#
----------------------------------------------------------------
--
## Rappel : *endianness* (1/2)
-
L'
*endianness*
défini la manière dont les entiers sont stockés en mémoire
...
...
@@ -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 moins significatif est stocké à l'adresse la plus basse
[
//
]:
#
----------------------------------------------------------------
--
## 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 :
...
...
@@ -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`
32 bits (4 bytes)
`4c3f85ed`
`4c 3f 85 ed`
`ed 85 3f 4c`
[
//
]:
#
----------------------------------------------------------------
--
## 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.
...
...
@@ -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
-
typiquement via un appel à
`read`
ou
`fread`
[
//
]:
#
----------------------------------------------------------------
--
## Danger avec la sérialisation/déserialisation
```
{.c .tiny}
...
...
@@ -558,7 +559,8 @@ int main() {
-
Conséquence :
**\textcolor{myred}{toujours}**
utiliser l'attribut
`__packed__`
sur les structures sérialisées
\
!
:::
[
//
]:
#
----------------------------------------------------------------
--
## Ressources
\s
mall
...
...
@@ -568,5 +570,4 @@ int main() {
\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 @@
-
[
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
-
`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
)
-
[
Ext4 (and Ext2/Ext3) Wiki
](
https://ext4.wiki.kernel.org/index.php/Main_Page
)
\ No newline at end of file
-
[
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