[Kos-announce] Nouveautes du Week End
d2
David.Decotigny@irisa.fr
27 Aug 2001 12:01:33 +0200
Bonjour,
Le Week End dernier, Thomas et moi nous sommes reunis pour faire avancer
kos. Suivent les modifications qui ont ete faites. Au programme :
proprification et VM.
Une petite note prealable : la version cvs actuelle NE COMPILE PAS et
c'est normal : gros chantier en cours (voir ci-dessous). Par
consequent : pas d'image disquette de kos disponible sur le site.
Episode 1/2 :
-------------
1 - Compilation silencieuse
KOS compile desormais avec les options gcc :
-ffreestanding -W -Wundef -Wshadow -Wpointer-arith \
-Wcast-align -Wsign-compare \
-Waggregate-return -Wmissing-prototypes -Wredundant-decls \
-Wnested-externs -Winline -Wold-style-cast -Wall -O2 \
Elles permettent d'afficher plus de warnings pour prevenir des bugs.
Nous avons revu le code du loader et des modules pour que aucun
warning ne soit genere par gcc : gage de meilleure qualite du code.
2 - Listes circulaires (liblist)
Toutes les listes (doublement chainees) sont circulaires dans
kos. Une liste n'est plus representee par un couple head/tail, mais
par un simple noeud identifie comme la tete de la liste => economie
de memoire, pas de noeud "privilegie" dans la liste.
3 - Support de l'optimisation -fomit-frame-pointer
Par defaut, gcc sacrifie un registre a chaque appel de fonction
pour stocker l'etat de la pile avant appel. C'est pratique pour le
debugging (backtrace), mais ca gaspille un registre et ca rajoute
des instructions (movl, pushl, ...).
KOS fonctionne desormais meme quand on compile avec l'optimisation
-fomit-frame-pointer qui desarme ce mecanisme (mise a jour de 2
routines asm).
4 - Correction de bugs
Loader : Mauvaise identification des routines d'init
5 - Code
Reorganisation de mm-x86 (Separation portable/non portable,
migrations vers task-x86).
Cette version est accessible par le tag kos-stable-08-27-01 sur le
cvs : elle compile, elle marche tres bien (40M RAM minimum du aux
tests intensifs kmem).
Episode 2/2 :
-------------
On a attaque la VM ! Ca fait mal.
On a choisi d'empecher toute evolution du reste du cvs : pas de
branche CVS speciale, on a tout mis tel quel sur le cvs. Le cvs
courant constitue donc kos dans l'etat actuel de la VM. Donc :
LE CVS COURANT NE COMPILE PAS
C'est en plein chantier. Voila le resume des operations :
1 - Brainstorming
Plein d'idees adoptees / refutees / re-adoptees /
re-refutees. Thomas a pris des notes.
2 - Redaction d'un modele pour la VM
Voir le fichier doc/kos_vm.dia et .eps . Ca ressemble a de l'UML,
mais c'est de l'UML tout a fait approximatif et surement loin
d'etre academique (voire totalement faux). Mais elle est faite de
telle sorte que Thomas et moi la comprenions.
3 - Debut de codage
On respecte le modele vm-modele.dia . Ecriture de _vmm_as.c,
_vmm_vr.c . Debut de _vmm_sr.c.
=> CA NE COMPILE PAS, et c'est normal, on n'en est qu'a la phase
d'ecriture, meme pas celle de la compilation.
Voila. Ci-dessous le ChangeLog.
Bonne journee,
--------------------- ChangeLog CVS -----------------------
2001-08-26 23:04
* TODO, doc/vm_model.dia, modules/kmem/kmem.h, modules/kos/types.h,
modules/libbst/_splay.c, modules/libbst/_splay.h,
modules/libbst/libbst.h, modules/liblist/Makefile,
modules/task/task.h, modules/vmm/Makefile, modules/vmm/_vmm.c,
modules/vmm/_vmm.h, modules/vmm/_vmm_as.c, modules/vmm/_vmm_init.c,
modules/vmm/_vmm_sr.c, modules/vmm/_vmm_vr.c, modules/vmm/vmm.h --
Ca compile pas (sauf si Dieu existe), mais la vmm est en chantier :
as et vr bien avances. Reste sr + 2 drivers/shadow_resource : kmem
+ /dev/zero. Le modele est dans doc.
2001-08-26 00:08
* modules/i8042/_i8042.c, modules/i8042/i8042.h,
modules/idt/_exception.c, modules/idt/_irq.c,
modules/idt/_syscall.c, modules/idt/exception.h, modules/idt/idt.h,
modules/idt/irq.h, modules/idt/syscall.h, modules/kos/wolfgang.c,
modules/mm-x86/Makefile, modules/mm-x86/_gdt.c,
modules/mm-x86/_mm-x86.h, modules/mm-x86/_paging.c,
modules/mm-x86/_team_mm_context.c, modules/mm-x86/dbflt.c,
modules/mm-x86/gdt.c, modules/mm-x86/mm-x86.c,
modules/mm-x86/mm-x86.h, modules/mm-x86/paging.c,
modules/scheduler/_scheduler.c, modules/scheduler/_scheduler.h,
modules/scheduler/_timer.c, modules/scheduler/scheduler.h,
modules/task/_task_kstack.c, modules/task/_task_kthread.c,
modules/task/_task_uthread.c, modules/task/_task_utils.c,
modules/task/task.c, modules/task/task.h,
modules/task-x86/Makefile, modules/task-x86/_cpl0_switch.S,
modules/task-x86/_dbflt.c, modules/task-x86/_dump.c,
modules/task-x86/_task-x86.h, modules/task-x86/_task_as.c,
modules/task-x86/_thread_cpu_context.c, modules/task-x86/_tss.c,
modules/task-x86/task-x86.c, modules/task-x86/task-x86.h,
modules/vmm/_vmm.c, modules/vmm/vmm.h -- Proprification mm-x86 +
migration de pas mal de truc de et vers task-x86, separation du
portable/non portable.
2001-08-25 15:35
* TODO -- MAJ TODO
2001-08-25 15:20
* MkVars, loader/config.h, modules/kos/wolfgang.c,
modules/mm-x86/dbflt.c, modules/scheduler/_scheduler.c,
modules/task-x86/_cpl0_switch.S, modules/task-x86/_cpl0_switch.c --
Supporr du -fomit-frame-pointer
2001-08-25 10:27
* modules/dummy/dummy.c -- Pour que grep -r _head modules | grep -v
list_ n'indique pas des non-utilisations de liblist la ou y'en n'a
pas
2001-08-25 10:15
* TODO -- MAJ TODO
* modules/babel/babel.h, modules/babel/tower/_tower_constructor.c,
modules/babel/tower/_tower_create_instance.c,
modules/babel/tower/_tower_delete_instance.c,
modules/babel/tower/_tower_register_interface.c,
modules/babel/tower/_tower_unregister_interface.c,
modules/babel/tower/lookup_babel_interface.c,
modules/babel/tower/tower.c, modules/babel/tower/tower_interface.c,
modules/babel/tower/tower_interface.h, modules/dummy/dummy_defs.c,
modules/kitc/_kmsg.c, modules/kitc/kmsg.h, modules/kmem/Makefile,
modules/kmem/_kslab.h, modules/kmem/_kslab_cache_create.c,
modules/kmem/_kslab_cache_destroy.c, modules/kmem/_kslab_init.c,
modules/kmem/_kvmem.h, modules/kmem/_kvmem_free.c,
modules/kmem/_kvmem_init.c, modules/kmem/_kvmem_utils.c,
modules/kmem/kmem.h, modules/liblist/Makefile,
modules/liblist/liblist.h, modules/liblist/test.c,
modules/task/_task.h, modules/task/_task_init.c,
modules/task/_task_thread.c, modules/task/_task_utils.c,
modules/task/task.c, modules/task/task.h -- liblist => listes
circulaires => Ok ca marche
2001-08-24 22:36
* TODO, loader/config.h, loader/elf32/elf32_load.c,
modules/config.h, modules/babel/tower/_tower_constructor.c,
modules/babel/tower/_tower_create_instance.c,
modules/babel/tower/_tower_destructor.c,
modules/babel/tower/tower.c, modules/bootstrap/bootstrap.c,
modules/debug/bochs.c, modules/debug/debug.c,
modules/debug/disasm.c, modules/dummy/dummy.c,
modules/dummy/dummy_methods.c, modules/i8042/_i8042.c,
modules/i8042/i8042.c, modules/idt/_dsr.c, modules/idt/_dst.c,
modules/idt/_dst.h, modules/idt/_irq.c, modules/idt/_irq.h,
modules/idt/_syscall.c, modules/idt/idt.c, modules/idt/irq.h,
modules/ipc/msg/msg.c, modules/ipc/sem/sem.c,
modules/ipc/sem/sem.h, modules/kgc/kgc.c, modules/kitc/_kmsg.c,
modules/kitc/kitc.c, modules/klavier/_klavier.c,
modules/klavier/_klavier.h, modules/klavier/klavier.c,
modules/kmem/_kmem.h, modules/kmem/_kmem_test.c,
modules/kmem/_kslab_cache_create.c, modules/kmem/_kvmem.h,
modules/kmem/_kvmem_alloc.c, modules/kmem/_kvmem_init.c,
modules/kmem/_kvmem_utils.c, modules/kmem/kmem.c,
modules/kos/macros.h, modules/kos/types.h, modules/kos/wolfgang.c,
modules/lib/conio.c, modules/lib/memchr.c, modules/lib/random.c,
modules/lib/snprintf.c, modules/lib/sprintf.c,
modules/lib/stdlib.c, modules/lib/strchr.c,
modules/lib-x86/_i8254.h, modules/libbst/_avl.c,
modules/mm-x86/_mm-x86.h, modules/mm-x86/dbflt.c,
modules/mm-x86/gdt.c, modules/mm-x86/mm-x86.c,
modules/mm-x86/paging.c, modules/pmm/_pmm.c, modules/pmm/pmm.c,
modules/scheduler/_sleep.c, modules/scheduler/_timer.c,
modules/scheduler/scheduler.c, modules/task/_task.h,
modules/task/_task_init.c, modules/task/_task_kstack.c,
modules/task/_task_kthread.c, modules/task/_task_thread.c,
modules/task/_task_uthread.c, modules/task/_task_utils.c,
modules/task/task.c, modules/task/task.h,
modules/task-x86/_task_as.c, modules/task-x86/_tss.c,
modules/task-x86/task-x86.c, modules/vmm/_vmm.c,
modules/vmm/_vmm_pgflt.c, modules/vmm/vmm.c, modules/vmm/vmm.h,
utils/Makefile -- Bug de relocation de .ctor dans le loader => il
faudrait unifromiser toutes les relocations dans toutes les
sections autres que .zero (=> MAJ TODO). Suppression de beaucoup
de warnings en -Wplein_plein_de_trucs
2001-08-24 16:28
* MkVars, loader/macros.h, loader/ar/ar_load.c,
loader/bootmem/bootmem.h, loader/bootmem/bootmem_init.c,
loader/debug/bochs.c, loader/debug/debug.c,
loader/elf32/elf32_build.c, loader/lib/printl.c,
loader/lib/stdarg.h, loader/mm/mm.h, loader/mm/vmm.c,
modules/task/_task_init.c -- Warnings sur le loader
--
d2