Un micro-kernel fonctionnel basé sur une architecture x86, développé en C et assembleur.
- Micro-kernel : Architecture modulaire avec composants séparés
- Mode protégé x86 : Fonctionnement en 32 bits
- Gestion mémoire : Allocateur dynamique avec heap
- Ordonnanceur : Round-robin avec gestion des processus
- Interruptions : Gestion complète des IRQ et exceptions
- Drivers : VGA, clavier, timer
main.c: Point d'entrée et initialisationscheduler.c: Ordonnanceur de processusinterrupts.c: Gestion des interruptions
memory.c: Allocateur dynamique (kmalloc/kfree)- Heap de 1MB avec fusion automatique des blocs
vga.c: Driver d'affichage VGA couleur- Support clavier avec table de conversion
- Timer système pour l'ordonnanceur
boot.s: Bootloader minimal- Passage en mode protégé
- Chargement de la GDT
ACE/
├── boot/ # Bootloader
│ └── boot.s
├── kernel/ # Noyau principal
│ ├── main.c
│ ├── scheduler.c
│ └── interrupts.c
├── drivers/ # Pilotes
│ └── vga.c
├── mm/ # Gestion mémoire
│ └── memory.c
├── include/ # Fichiers d'en-tête
│ ├── kernel.h
│ ├── memory.h
│ ├── scheduler.h
│ ├── interrupts.h
│ └── vga.h
├── build/ # Fichiers compilés
├── Makefile # Script de compilation
├── linker.ld # Script de liaison
└── README.md # Cette documentation
- GCC avec support 32 bits
- GNU Binutils (as, ld, objcopy)
- Make
- QEMU (optionnel, pour l'exécution)
Ubuntu/Debian :
sudo apt-get install gcc-multilib binutils make qemu-system-x86macOS :
brew install i686-elf-gcc qemu# Compiler tout le projet
make all
# Créer une image disque bootable
make iso
# Exécuter avec QEMU
make run
# Nettoyer les fichiers générés
make cleanmake run- Créer une nouvelle VM x86
- Utiliser
build/ace.imgcomme disquette de boot - Démarrer la VM
- Affichage : Messages du kernel en couleur
- Clavier : Saisie de texte basique
- Processus : Ordonnancement automatique
- Mémoire : Allocation dynamique
- Bootloader : Passage en mode protégé
- Kernel : Initialisation des sous-systèmes
- VGA : Configuration de l'affichage
- Mémoire : Initialisation du heap
- Interruptions : Configuration IDT et PIC
- Ordonnanceur : Création du processus idle
- États : READY, RUNNING, BLOCKED, TERMINATED
- Algorithme : Round-robin avec tranches de temps
- Contexte : Sauvegarde des registres x86
- Pile : 4KB par processus
- Heap : 1MB à partir de 0x100000
- Allocation : First-fit avec division des blocs
- Libération : Fusion automatique des blocs adjacents
- Alignement : 4 bytes pour les performances
- IDT : 256 entrées configurées
- PIC : Remapping des IRQ (32-47)
- Timer : IRQ0 pour l'ordonnanceur
- Clavier : IRQ1 avec table de conversion
- Créer le fichier dans
drivers/ - Ajouter l'en-tête dans
include/ - Initialiser dans
kernel_main() - Le Makefile détecte automatiquement
- Définir dans
include/syscalls.h - Implémenter dans
kernel/syscalls.c - Configurer l'interruption 0x80
- Messages avec
vga_print() kernel_panic()pour les erreurs critiques- QEMU monitor pour l'inspection
- Architecture : x86 32 bits uniquement
- Système de fichiers : Non implémenté
- Réseau : Non supporté
- Mode utilisateur : Tous les processus en mode kernel
- Pagination : Gestion mémoire simplifiée
- Système de fichiers VFS
- Mode utilisateur et protection
- Pagination mémoire
- Drivers réseau
- Shell interactif
- Support multiprocesseur
Ce projet est développé à des fins éducatives. Libre d'utilisation et de modification.
Les contributions sont les bienvenues ! Merci de :
- Fork le projet
- Créer une branche pour votre fonctionnalité
- Tester vos modifications
- Soumettre une pull request
ACE Micro-Kernel - Un kernel simple mais fonctionnel pour l'apprentissage des systèmes d'exploitation.
