corectionsujets2
This commit is contained in:
@@ -4,15 +4,20 @@ Traduction française du sujet. Le PDF reste la source en cas de doute.
|
||||
|
||||
| | |
|
||||
|--|--|
|
||||
| Fichier d’origine à la racine | `kfs-2sujet.pdf` |
|
||||
| Copie de travail | [originaux/kfs-2_subject.pdf](originaux/kfs-2_subject.pdf) |
|
||||
| PDF | [originaux/kfs-2_subject.pdf](originaux/kfs-2_subject.pdf) |
|
||||
| Auteurs | 42 Staff, pedago@42.fr |
|
||||
| Version | 2 |
|
||||
| Date du PDF | 26 juillet 2022 |
|
||||
| Pages | 10 |
|
||||
| Résumé (anglais) | Let’s code the stack ! |
|
||||
|
||||
Visuels : [C1](captures/01-couverture-42.png), [C2](captures/02-habillage-page.png), et la même image [C3](captures/03-kfs-choose-wisely.png) dans la section langage. Pas de schéma de GDT.
|
||||

|
||||
|
||||
**Fig. C1 — page de titre.** Aucun texte dans l’image. Interprétation : habillage 42, pas une consigne. Pas de schéma de GDT dans ce PDF.
|
||||
|
||||

|
||||
|
||||
**Fig. C2 — pages intérieures.** Aucun texte. Interprétation : filigrane répété. La fig. C3, plus bas, est la seule image légendée.
|
||||
|
||||
## Liens
|
||||
|
||||
@@ -56,13 +61,13 @@ Ensuite, la pile. Rappel donné tel quel, en anglais dans le PDF, traduit ici :
|
||||
|
||||
> En informatique, une stack est un type abstrait qui sert de collection d’éléments, avec deux opérations principales : push, qui ajoute un élément à la collection, et pop, qui retire l’élément ajouté le plus récemment et pas encore retiré. L’ordre de sortie donne l’autre nom, LIFO (last in, first out).
|
||||
|
||||
« Get it ? Good. Now, let’s move on. »
|
||||
Tu as compris ? Bien. On avance. Le PDF écrit : « Get it ? Good. Now, let’s move on. »
|
||||
|
||||
## III. Objectifs
|
||||
|
||||
Créer, remplir et lier une Global Descriptor Table dans le noyau.
|
||||
|
||||
« Yup, that’s it. Not so much, eh ? »
|
||||
Ouais, c’est tout. Pas grand-chose, hein ? Le PDF écrit : « Yup, that’s it. Not so much, eh ? »
|
||||
|
||||
En fait, il faut comprendre comment la mémoire fonctionne vraiment dans un système, comment la pile et la RAM fonctionnent, comment les utiliser, les remplir, et les lier au BIOS.
|
||||
|
||||
@@ -70,23 +75,35 @@ Oui, le BIOS. Grâce à GRUB, il aidera beaucoup. Heureusement qu’il est déj
|
||||
|
||||
## IV. Instructions générales
|
||||
|
||||
Même cadre que KFS-1, avec quelques formulations différentes.
|
||||
### IV.1 Code et exécution
|
||||
|
||||
### IV.1.1 Émulation
|
||||
#### IV.1.1 Émulation
|
||||
|
||||
Partie non obligatoire. N’importe quel gestionnaire de virtuel convient. KVM est suggéré. Les exemples du sujet utilisent KVM.
|
||||
Cette partie n’est pas obligatoire. N’importe quel gestionnaire de machines virtuelles convient. Le sujet suggère KVM : un Kernel Virtual Manager, avec des fonctions avancées d’exécution et de debug. Tous les exemples ci-dessous utilisent KVM.
|
||||
|
||||
### IV.1.2 Langage
|
||||
#### IV.1.2 Langage
|
||||
|
||||
Le C n’est pas obligatoire pour cette suite de projets. Les documentations sont souvent en C : un autre langage implique de traduire. Exemple C++ : `new` et les classes exigent une interface mémoire que le noyau n’a pas encore. C++, Rust, Go, ou même tout en ASM, sont cités.
|
||||
Le C n’est pas obligatoire. On peut utiliser n’importe quel langage pour cette suite de projets.
|
||||
Tous les langages ne sont pas adaptés à un noyau. On pourrait coder un noyau en Javascript, mais est-ce une bonne idée ?
|
||||
Beaucoup de documentations sont en C. Choisir un autre langage implique de traduire le code tout du long.
|
||||
|
||||
Image [C3](captures/03-kfs-choose-wisely.png) au même endroit que dans KFS-1.
|
||||
Toutes les fonctionnalités d’un langage ne sont pas utilisables dans un noyau basique. Exemple avec le C++ : ce langage utilise `new` pour l’allocation, les classes et les déclarations de structures. Dans ce noyau, il n’y a pas encore d’interface mémoire, donc ces fonctionnalités sont inutilisables pour l’instant.
|
||||
|
||||
Beaucoup de langages peuvent remplacer le C : C++, Rust, Go, etc. On peut même coder le noyau entier en ASM.
|
||||
|
||||

|
||||
|
||||
**Fig. C3 — section Langage.** Même image que dans KFS-1. Texte dans l’image : « YOU MUST CHOOSE... » puis « BUT CHOOSE WISELY. » Interprétation : elle illustre le choix du langage. Pas un schéma de GDT ni de pile. Crédit « quickmeme.com » en bas à droite.
|
||||
|
||||
### IV.2 Compilation
|
||||
|
||||
Compilateur libre. L’auteur utilise gcc et nasm. Un Makefile doit être ajouté au dépôt.
|
||||
#### IV.2.1 Compilateurs
|
||||
|
||||
Mêmes flags, présentés comme un exemple C++ :
|
||||
N’importe quel compilateur. L’auteur utilise personnellement gcc et nasm. Un Makefile doit être ajouté au dépôt.
|
||||
|
||||
#### IV.2.2 Flags
|
||||
|
||||
Pour booter sans dépendance, compiler avec les flags suivants. Les adapter au langage. Ceux-ci sont un exemple pour le C++ :
|
||||
|
||||
- `-fno-builtin`
|
||||
- `-fno-exception`
|
||||
@@ -95,23 +112,24 @@ Mêmes flags, présentés comme un exemple C++ :
|
||||
- `-nostdlib`
|
||||
- `-nodefaultlibs`
|
||||
|
||||
Pas de lien vers une bibliothèque de l’hôte, sinon le noyau ne s’exécute pas.
|
||||
Attention à `-nodefaultlibs` et `-nostdlib`. Le noyau est compilé sur un système hôte, mais il ne peut être lié à aucune bibliothèque de cet hôte, sinon il ne s’exécutera pas.
|
||||
|
||||
### IV.3 Édition de liens
|
||||
|
||||
Il faut créer un linker pour le noyau. On CAN utiliser le binaire `ld` de l’hôte. Il est FORBIDDEN d’utiliser le fichier `.ld` de l’hôte. (KFS-1 disait CANNOT ; KFS-2 dit FORBIDDEN.)
|
||||
On ne peut pas utiliser un linker existant pour lier le noyau. Comme écrit plus haut, le noyau ne booterait pas. Il faut créer un linker pour ce noyau.
|
||||
Attention : on CAN utiliser le binaire `ld` disponible sur l’hôte, mais il est FORBIDDEN d’utiliser le fichier `.ld` de l’hôte. KFS-1 écrivait CANNOT à cet endroit. KFS-2 écrit FORBIDDEN.
|
||||
|
||||
### IV.4 Architecture
|
||||
|
||||
i386 (x86) obligatoire.
|
||||
L’architecture i386 (x86) est obligatoire (on pourra remercier l’auteur plus tard).
|
||||
|
||||
### IV.5 Documentation
|
||||
|
||||
Le wiki OSDev est recommandé par l’auteur. Lien sur le mot `OSDev`.
|
||||
Il existe beaucoup de documentation, bonne et mauvaise. L’auteur estime que le wiki OSDev est l’un des meilleurs. Le mot `OSDev` pointe vers <http://wiki.osdev.org/Main_Page>.
|
||||
|
||||
### IV.6 Code de base
|
||||
|
||||
Il faut prendre le code KFS précédent et travailler à partir de lui.
|
||||
Pour ce sujet, il faut prendre le code KFS précédent et travailler à partir de lui.
|
||||
Ou pas... et tout réécrire depuis le début. Au choix.
|
||||
|
||||
## V. Partie obligatoire
|
||||
@@ -139,13 +157,13 @@ Pas un shell POSIX, juste un shell minimaliste avec quelques commandes, pour le
|
||||
|
||||
Exemple du sujet : y mettre l’affichage de la pile noyau, et d’autres choses comme `reboot`, `halt`, etc.
|
||||
|
||||
« Have fun ! »
|
||||
Amuse-toi. Le PDF écrit : « Have fun ! »
|
||||
|
||||
Encadré PERFECT, identique à KFS-1 : bonus évalué seulement si l’obligatoire est intégralement fonctionnel.
|
||||
Encadré : le bonus n’est évalué que si la partie obligatoire est PERFECT. Perfect veut dire que l’obligatoire a été fait intégralement et fonctionne sans dysfonctionnement. Si tous les prérequis obligatoires ne sont pas validés, le bonus n’est pas évalué du tout.
|
||||
|
||||
## VII. Rendu et évaluation par les pairs
|
||||
|
||||
Rendre le travail dans le dépôt Git. Seul le contenu du dépôt est évalué. Vérifier les noms de dossiers et de fichiers.
|
||||
Rendre le travail dans le dépôt Git, comme d’habitude. Seul le travail à l’intérieur du dépôt est évalué pendant la soutenance. Ne pas hésiter à revérifier les noms des dossiers et des fichiers.
|
||||
|
||||
Rendre le code, un Makefile et une image virtuelle basique pour le noyau.
|
||||
Note du sujet, en capitales dans le PDF : le noyau n’en fait encore rien, donc l’image n’a pas à être taillée comme un éléphant. La borne « 10 MB » est dans la partie obligatoire, pas répétée dans ce paragraphe.
|
||||
|
||||
Reference in New Issue
Block a user