[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