Historique
Le projet fut lancé en juin 1998 par Dimitri Ara, accompagné par
Thomas Petazzoni.
Leur travail consista alors à échanger leurs idées sur le thème des
OS, avant d'entreprendre le développement à proprement parler.
Octobre 2004
Travail par Thomas sur un nouveau système de mapping, reverse mapping
et gestion de la mémoire physique. Le nouveau système a été conçu dans
l'objectif de permettre la mise en place de la synchronisation au
niveau de la gestion de la mémoire virtuelle.
Juillet 2004
Présentation de KOS par David et Thomas aux Rencontres Mondiales du
Logiciel Libre à Bordeaux, dans le cadre du thème Embarqué.
Juin 2004
David et Thomas commencent la rédaction d'une série d'articles publiés
dans Linux Magazine France concernant la programmation d'un OS. Ces
articles illustrent le développement d'un petit système d'exploitation
nommé SOS, qui s'inspire très
fortement de KOS. La série doit compter environ 12 numéros, et
s'étaler sur plus d'un an.
Mardi 1er juin 2004
Présentation de KOS à l'UTBM, par
Thomas.
Dimanche 25 avril 2004
Présentation de KOS à Libr'East, par
Thomas.
de Septembre 2003 à Janvier 2004
Travail de Thomas et Mélanie Bats sur KOS dans le cadre de leurs
études à l'UTBM. Leur travail a porté
sur deux éléments principaux :
- La gestion de la mémoire virtuelle. Ce travail a permis
d'implémenter fork, exec et brk, des
appels systèmes très importants.
- La conversion en XML des interfaces de Karm, avec les outils
nécessaires à la génération du code C correspondant.
Ce travail a donné lieu à la rédaction d'un rapport disponible sur le
site.
Décembre 2003
Au cours d'un Week-end de codage, Julien et Thomas ont amélioré le
support du format de fichier ELF. Ils ont également travaillé sur les
threads utilisateurs et leurs piles, ainsi que sur quelques finitions
de la mémoire virtuelle. Enfin, ils ont commencé à étudier le
fonctionnement du bus PCI.
Octobre 2003
Au cours d'un Week-end de codage, Julien et Thomas ont implémenté
plusieurs primitives importantes, en particulier fork,
exec et brk. Cela a été possible grâce au travail déjà
effectué par Thomas sur le système de gestion de mémoire
virtuelle.
Fin mai 2003
Week-end de codage entre David et Thomas à Montpellier.
Le scheduler a été recodé, en intégrant directement du code de
gestion de waitqueues, et en posant le postulat que seul le thread en
cours d'éxécution n'est pas dans une waitqueue. Les primitives de
synchronisation de kitc ont été entièrement recodées pour qu'elles
utilisent les nouvelles waitqueues. On a donc maintenant à disposition
des sémaphores, mutex et files de messages. Enfin, la façon dont un
thread se termine a été revue, de manière à supprimer du code douteux
du module task. Le CVS actuel compile, et tourne, mais n'est pas
exempt de bugs ;-)
Début mai 2003
Après une longue période d'inactivité, due à une forte occupation
des principaux développeurs, et à un blocage concernant Babel, le
développement de Kos a enfin repris le Week end dernier. En effet,
Julien et Thomas ont réfléchi conjointement à une solution permettant
d'implémenter les drivers et d'exporter diverses interfaces à
l'utilisateur, pour éviter l'utilisation d'un
ioctl()
. Bien entendu, de nombreuses réflexions,
prototypes et test avaient été réalisés auparavant. Finalement, deux
solutions sont apparues :
- La première, très simple, est issue d'une simplification des
diverses réflexions précédentes et propose pour chaque objet du
système (fichier, device, socket, etc..) une structure de donnée
unique appelé "kres", pour kernel ressource. Par ailleurs, à
chaque ouverture d'un objet, une structure de donnée "ures",
pour user ressource est créé.
- La deuxième, un peu plus complexe, essaie de pallier à un
manque de la première solution concernant la factorisation de
code. Elle permet d'empiler des translators, afin d'étendre les
capacités d'un objet.
Au final, la première solution a été retenue à ce moment là, de
manière à ce que le développement puisse avancer sur des bases
simples.
Novembre 2002
WE de codage avec Julien, David et Thomas.
Implementation d'un nouveau module "kares" (pour Kos Abstraction
and Resource Export Services), le nouveau Babel. Cette nouvelle
version est en fait le résultat de l'intégration des idées
implémentées dans le prototype réalisé au mois d'août par David et
Thomas, et des recherches sur le thème de l'espace de nommage
réalisées par Julien. Le nouveau système repose donc sur un nscache,
namespace cache qui donne une représentation en mémoire d'une portion
de l'espace de nommage, et sur des ressources proposant de multiples
interfaces, et un soupçon de réflexivité pour couronner le tout. Une
partie du code est en C++ (sans exceptions, sans RTTI), pour voir ce
que cela peut donner.
Aout 2002
Week End de codage entre David et Thomas
Mise en place d'un modele etandant le Babel actuel pour le dialogue
cpl3/cpl0. Repose sur le principe d'interfaces multiples pour les
ressources, et sur un peu de reflexivite pour eviter d'avoir des GUID
a la COM :) Petit programme de test C++ (linux/x86 seulement) pour
voir (module kos-dev/syscall-test).
Mi-juillet 2002
Une présentation de KOS a eu lieu au LSM (Libre Software Meeting) à
Bordeaux le vendredi 12 juillet. Cette présentation a été réalisée par
Thomas Petazzoni. Les slides de la présentation seront bientôt
disponibles online. Cette rencontre a permis de rencontrer notamment
des développeurs de Hurd (Marcus Brinkmann et Neal Walfield) et donc
de discuter du développement des systèmes d'exploitation.
Début juillet 2002
Reecriture du chargeur elf32 pour le noyau. Permet de charger
n'importe quel objet reloquable elf32, sans hypothese sur les sections
(pas de script ld pour former les modules), ni sur le nombre
d'initlevels.
Juin 2002
Quelques améliorations :
- Amélioration mineure du driver console : on change de console
via Alt+Fx.
- Modification de la façon d'exporter les symboles et correction
du changement de pile, le tout pour compatibilité avec gcc
3.1.
- Grosse amélioration du loader : utilisation massive de table de
hachage pour rechercher les symboles. La relocation est 5 fois
plus rapide qu'avant sous Bochs, et 2 fois plus rapide sur un K7
800Mhz.
- Refonte totale de mod_check qui réutilise le code du loader,
permet de générer des graphiques de dépendances pour chaque
module, et génère une table des symboles utilisables par le
debugger de Bochs.
- Modifications mineures pour compilation sous FreeBSD. Kos
compile donc sous FreeBSD, mais attention à compiler Bochs avec
BX_CPU_LEVEL=6, parce que le gcc de FreeBSD génère des
cmov.
- Nombre d'init/cleanup levels illimités.
- Kos ne fonctionne pas sur les machines avec 512 Mo de RAM, à
cause d'un bug.
Mai 2002
Journée de coding entre Julien et Thomas
- Amélioration du driver console : support du multi console, du
scrolling, etc..
- Interaction entre driver clavier et driver console fonctionnelle
- Desactivation de la fonction de verification dans _tower_mount
(bug!)
- Reorganisation module kos-sys avec séparation libc, libfile,
libtty
- Grosse réflexion concernant le problème de l'interaction entre
une libc Unix standard et les interfaces OO du noyau. Nous
allons clairement devoir revoir certains points, et avoir au
niveau utilisateur un fonctionnement différent de celui
d'Unix. Il faudra alors réaliser une librairie de
compatibilité.
- Le programme CPL3 fait des read() bloquants sur la console, puis
write() pour chaque caractere : bientôt un shell !
- Décompression des sources de gcc et de la libc, pour voir le
chemin restant à parcourir. Courage, on y est presque ;-)
Avril 2002
Un Week-End de coding avec David, Julien et Thomas, puis encore
5 jours de coding entre Julien et Thomas.
- Implémentation de l'interface Babel anon pour les zones de
mémoires anonymes (mappings de /dev/null). Tests réalisés à
partir d'une application CPL3, avec demand paging.
- Intégration propre et finale du module libhash,
permettant la création de table de hachages.
- Refonte totale du système de gestion de l'espace de nommage de
Babel (les shadow resources, en plus d'êtres listees par
translator, s'organisent sous forme d'arbre représentant
l'arborescence). Nouvelles fonctions pour monter/démonter des
systèmes de fichiers, création du fakefs pour avoir un
système de fichier au démarrage.
- Sécurisation du code de Babel quant aux problèmes de
synchronisation.
- Extension du module kitc pour la gestion de sémaphores
et de wait queues.
- Mise en conformité du driver fat avec le nouveau
système de gestion de l'espace de nommage.
- Système de détection automatique du système de fichier.
- Proprification de la façon de monter/démonter une
partition.
- Création d'un loader ELF minimal.
- Amélioration de la libc au niveau utilisateur.
- Création d'un vrai système de syscall, avec passage de
plusieurs arguments, etc..
- Création d'une libcmdline pour analyser les arguments
fournis a Grub au démarrage.
- Correction de bugs divers.
Mars 2002
Une journée de coding entre Julien et Thomas
- Intégration de la dernière version de Babel.
- Mise en conformité des modules vmm et ide avec le
nouveau Babel.
- Création du module part, et mise en conformité avec le
nouveau Babel.
Fin Février 2002
- Proprification drivers FAT et IDE
- Chargement en mémoire et éxécution sous Kos d'un binaire compilé
et linké sous Linux (gcc et ld). C'est le premier vrai programme qui
tourne sous KOS !
- Nouvelle version de rmap pour gérer les problèmes de
synchronisation.
- Possibilité de mapper une page dans l'espace user de n'importe
quelle team depuis n'importe quelle team (map foreign).
Mi-Février 2002
Un mois de coding pour Thomas, dont un Week-End avec David, et
un autre avec Julien.
Durant son mois de coding, Thomas a avancé sur les points suivants
:
- Création d'un driver IDE qui permet de détecter les disques durs
et les lecteurs de CDs, ainsi que la lecture des disques durs.
- Création d'un driver FAT extrêmement simpliste.
- Création de teams indépendants (différents espaces
d'adressage).
Durant le Week-End avec Julien :
- Intégration d'une nouvelle version de Babel, codée au préalable
par Julien
- Début d'intégration du driver IDE dans Babel grâce à une
interface.
Durant le Week-End avec David :
- Création de post_init levels pour l'initialisation. Ceci permet
d'avoir d'une part des fonctions en INIT_LEVELS, exécutées
avant que les interruptions ne soient activées, et des fonctions en
POST_INIT_LEVELS, éxécutées une fois les interruptions
activées. L'initialisation est donc plus propre, et wolfgang réalise
moins de choses. Le module bootstrap créé auparavant pour
lancer les fonctions d'initialisation des modules devient le module
init.
- Meilleure séparation de arch/mm et vmm. Ainsi
arch/mm dispose de fonctions arch_map_virtual_page,
arch_unmap_virtual_page, etc... et vmm propose au reste du
noyau de wrappers map_virtual_page, unmap_virtual_page, etc..
- Les essais effectués par Thomas au cours du mois pour obtenir
plusieurs teams sont concluants : le cloisonnement des teams pour
l'espace user a été vérifié, et la synchronisation de l'espace noyau
entre les différents espace d'adressage est assurée.
- Possibilité de créér des threads noyau dans n'importe quelle
team, grâce à un nouvel argument à create_kernel_thread : la
team destination.
- Implémentation du reverse mapping, qui va nous affranchir
d'une gestion complexe des pages anonymous, accelérer le swapping et
déplacer comme on le souhaite les pages physiques (pour le
DMA).
- Complète refonte de la gestion de la mémoire physique.
- Mapping de la zone noyau 4k-2G en une seule région.
- Nouveau flag dans les slabs indiquant si l'ensemble des pages
constituant un cache sont swappables ou non.
Novembre 2001
Week-end KOS avec David, Julien et Thomas.
- Simplification du modèle de la VMM : plus de drivers de
virtual regions, mais des drivers au niveau des shadow
resources.
- Amélioration du système de debugging : en plus des constantes
statiques (#define) pour activer/désactiver les différents moyens de
debugging (sur console, sur le port e9 de Bochs, sur ligne série),
on dispose maintenant de variables qui permettent au cours de
l'éxécution d'activer/désactiver les différents moyens de
debugging.
- Début de réflexion et de codage d'un pseudo compilateur K
pour l'écriture des drivers KOS. Nos essais avec ocamllex et
ocamlyacc ne sont pas très concluants.
- Les modules task-x86, mm-x86 et lib-x86 sont maintenus réunis
dans un sous répertoire x86. Un lien symbolique arch pointe vers x86
par défaut.
Septembre-Octobre 2001
- Kos, qui ne compilait plus à cause des travaux en cours sur la
VMM, recompile de nouveau.
- Mise en place du nouveau site Web en PHP.
Aout 2001
Semaine KOS avec David, Thomas et Julien :
- Réorganisation des modules comme scheduler, task-x86 ou
idt.
- Gestion de DSR (Deffered Service Routine) et de DST (Deferred
Service Thread).
- Initiatilisation par un module bootstrap (initialisation a
plusieurs niveaux, et retrait de l'identity mapping avant de lancer
le noyau.
- Nouveau kmem utilisant l'algorithme de Bonwick.
- Ecriture de liblist pour gérer les listes chaînées circulaires
plutôt que doublement chaînées.
- Corrections de bugs, et anticipations sur des problèmes de
synchronisation liées au SMP.
- Important brainstorming sur la VMM et Babel, réécriture de Babel
en plusieurs parties.
- Compilation plus "propre" (suppression de warnings même avec gcc
utilisé en mode très "verbeux").
- Support de l'optimisation -fomit-frame-pointer.
- Réorganisation de task-x86 et mm-x86.
Mai-Juillet 2001
- L'allocateur de mémoire pour le noyau kvalloc est prêt.
- Mini driver série (seulement ouput) pour faciliter le debugging
sur machine réelle.
- Corrections de bugs dans la gestion de la mémoire physique
Avril 2001
Semaine KOS avec David, Julien et Thomas :
- Implémentation d'un syscall pour Babel
- Implémentation d'un usleep, de sémaphores et de
messages queues.
- Execution du noyau en mémoire virtuelle (et non dans l'identity
mapping).
- Affichage des adresses de tous les symboles lors de l'éxécution
du loader pour faciliter le debugging.
- Implémentation du handler de double fault pour gérer les
débordements de piles noyau.
- Début du kgc : kernel garbage collector.
- Driver 8042 (pour gérer les souris PS/2 et le clavier).
- Mini-driver clavier.
- Beaucoup de réorganisation dans les sources, et énormement de
debugging !
Mars-Avril 2001
Intégration de Babel dans un module, double fault fonctionnel.
Février 2001
Week-End KOS avec David, Julien et Thomas
- Multithreading au niveau noyau fonctionnel, sauf les
débordements de piles (double fault).
- Grandes avancées dans le développement de Babel
- Correction de plusieurs bugs.
- Début d'expérimentation du double fault.
Janvier 2001
Petit Week-End KOS avec David et Thomas
- Début de gestion de la mémoire virtuelle
(ajout/suppression/modification de régions virtuelles)
- Allocation/désallocation de piles CPL0
- Création de threads noyau
- Gestion du page fault
- Corrections de bugs mineurs.
- Le multithreading au niveau noyau n'est alors pas
fonctionnel.
Toussaint 2000
Petit Week-End KOS avec David,
Julien, Jérome et Thomas.
L'allocateur de mémoire pour le noyau codé par Thomas est
prêt. Discussions intenses au sujet de Babel.
Debut Octobre 2000
David et Thomas améliorent le loader (support de différents types
de modules) et l'optimisent (division par trois de la vitesse de
linkage).
Aout 2000
Deux semaines de programmation avec
Julien, David et Thomas
Le loader est terminé. Nous n'utilisons plus notre propre
bootsecteur, mais utilisons à la place le bootloader
Grub. En effet, Grub nous permet de charger un noyau
(dans notre cas, c'est un loader) et des modules depuis un
système de fichiers sur disquette ou sur disque dur, ou bien depuis le
réseau. De plus, Grub passe directement en mode protégé avant
d'éxécuter le noyau. La phase de boot se passe donc ainsi : chargement
du loader par Grub, chargement des modules par Grub, passage en
mode protégé par Grub, démarrage du loader, passage en mode paginé par
le loader, relocation des modules, puis éxécution du noyau proprement
dit.
Printemps 2000
Grande réflexion sur le projet. On recommence tout sur des bases
plus saines, avec une architecture plus réfléchie, et quelque chose de
mieux concu. Kos sera un système
modulaire : le noyau lui même sera découpé en différents modules
(scheduler, task, vmm, pmm, etc ...), qui seront linkés ensemble au
démarrage par un loader.
12 - 14 Fév 2000
Seconde Assemblée KOS, toujours au Château de Méridon.
Encore une fois trois jours intenses, moins de programmation mais
beaucoup de débats. Malheureusement pas de photos cette fois ci
:-(
29 - 1er Nov 99
Première Assemblée KOS au Château de Méridon.
Un très bon moment, les photos ici!
5 Octobre 1999
Nouveau design pour KOS-web !
29 Septembre 1999
Une nouvelle page aussi importante qu'utile pour l'utilisation de
KOS-cvs a été crée ici.
20 Septembre 1999
Nouvelle version sur KOS-cvs ! Elle est désormais compilable sous
les deux os (DOS et Linux) à partir d'un makefile unique. Elle comprend
également un driver clavier enfin fonctionnel, une version de conio.c
débuggée et un bootsecteur réactualisé (support de kernel plus
volumineux ).
15 Septembre 1999
Le record de 59 abonnées à KOS-ml a été atteind !
Septembre 1999
Le travail reprend, tout le monde est de retour pour
travailler. Une version 0.05 est rapidement disponible avec toutes les
améliorations faites durant l'été.
Mise en place de tous les moyens techniques à disposition
(Web/CVS).
Eté 1999
Le travail est interrompu pour cause de vacances, refonte du site
officiel
Mai,Juin 1999:
Réorganisation du projet, le nombre de participants étant passé de
2 à plus de 30 !!!
18/04/1999
Après de nombreux essais, ce sont finalement Coffeeman et Emmanuel
Marty qui réussissent à faire fontionner un kernel 32bits depuis le
Bootsecteur de KOS, DJGPP est alors utilisé pour compiler KOS
09/04/1999
Grâce au travail des nouveaux développeurs, Thomas Lorblanches
parvient à faire tourner le kernel en Mode Protégé : Une grande
avancée !
06/04/1999
Création de la mailing-list par Julien Munier, appel à la
contribution sur les OS-Ring et NG.
03/04/1999
Abandon officiel du projet par Dimitri Ara, on le regrettera
02/03/1999
Julien Munier rejoint le groupe suite à un message diffusé sur
LVI
25/02/1999
Exécution d'un kernel en C, linké avec JLOC
15/02/1999
Déclaration d'un pile par le Bootsecteur, éxecution d'un kernel
16bits en assembleur
04/01/1999
Détection du processeur (386+ nécessaire)
16/12/1998
Premier Bootsecteur affichant "Loading KOS ..." (version 0.0.1)
11/10/1998
Premier MBR valide