[Kos-dev] Remarques

Thomas Petazzoni kos-dev@enix.org
Sun, 28 Jan 2001 20:41:33 +0100


salut,

j'ai pense a deux choses aujourd'hui :

1. pour lancer le primary kernel thread, il faut faire un IRET, et non
un RET, c'est a dire qu'il faut en plus empiler EFLAGS. en effet, le
changement de contexte va se faire dans le handler de l'interruption
timer (actuellement scheduler dans scheduler/sched.c). et pour retourner
d'une interruption, il faut faire IRET. or il faut etre coherent, et
faire tout le temps des IRET et non des RET. il me semble que le IRET,
en plus de depiler les EFLAGS, est le seul qui permet de changer de
niveau de privilege (CPL0-->CPL3) et qu'il fait quelque chose au niveau
d'un certain bit de EFLAGS.
donc a mon avis, il faut modifier wolfgang/main.c et dans task/task.c,
il faut modifier init_kernel_thread_context pour ajouter les EFLAGS dans
le bazar !

2. quand on va swapper une page physique, il va falloir la demapper de
tous les espaces virtuels ou elle est mappe il me semble. c'est a dire
qu'il va falloir modifier les PTs de plusieurs taches... et il ne
faudrait pas changer de contexte ! de plus meme si la page n'est mappee
qu'une seule fois, mais qu'elle n'appartient pas a la team courante, il
faudra changer de contexte... et ca c'est naze. d'autre part, dans la
structure gpfme_t, il n'y a rien qui nous permettent de remonter de la
page physique vers ses differentes adresses virtuelles (et donc les
differents PDE et PTE), afin de la demapper.
bref il faut trouver une solution de ce cote la.

david avait raison : plus on avance plus le nombre de choses a faire est
enorme !

thomas
-- 
PETAZZONI Thomas
thomas.petazzoni@meridon.com     UIN : 34937744
Projet KOS : http://kos.enix.org