[SOS] Re: Virtual Memory Manager

David Decotigny david.decotigny at free.fr
Sam 15 Oct 14:22:15 CEST 2005


Bonjour,

KAISER Edouard wrote:
> Je me dis qu'il doit bien y avoir une solution sinon pourquoi Intel se
> serait fait ch*er à créer des structures tels que le TSS pour faire du
> Hard Switch-Tasking ainsi que des entités telles que les LDT
> permettant d'isoler les processus les uns des autres !

Je pense que le problème vient du compilo. Le gcc de base qu'on utilise
sur x86 n'est pas adapté pour le jonglage entre segments. Il part du
principe qu'on manipule soit des données, soit du code, et que tout ça
se fait dans des espaces "infinis", point final. Pour s'en sortir façon
bidouille avec gcc, il faut sans doute ruser avec un ld.so particulier
ou avec des directives genre __attribute__ pour associer des segments
particuliers aux code/données... directives qui n'existent peut-etre
pas, je n'ai pas le manuel de gcc en tete. Ou alors il faut changer de
compilo ou revoir la version x86 de gcc pour lui faire supporter le
jonglage entre segments, par exemple en etendant le système de préfixe
__thread qu'on trouve dans les gcc relativement récents. Je ne sais pas
comment fonctionne djgpp, mais peut-etre que cette version de gcc offre
le necessaire pour jongler entre les segments.

Moyennant toutes ces considerations, je pense qu'il y aurait moyen
d'exploiter la segmentation sur x86. Avec le gcc de base qu'on a sur
x86, le modèle "plat" (reposant sur la pagination ou pas) est beaucoup
mieux adapté.

> Je pense aussi à la manière dont je vais gérer les fichiers en I/O,
> tout me semble trop étroitement liées à un modèle de mémoire virtuelle
> appuyé sur de la pagination. Pourtant je trouvais l'idée de séparer

Non, pour ça la pagination n'a pas vraiment d'intéret, du moins pas dans
une approche à base de read/write. Dès que tu utilises des mmap,
moyennant un compilo adapté qui sait jongler entre les segments, tu peux
aussi t'en sortir avec la segmentation. Mais le mmap dans une appli
utilisateur est rarement utilisé (ce qui est trrrrrrrès dommage a mon goût).

> les processus en segment plutots bonnes au début, mais dés que j'ai eu
> à faire à de l'allocation dynamique, ou plutot tout ce qui touche au
> dynamique, j'ai l'impréssion d'atteindre les limites de ce modèle.

Non, encore une fois je pense que ta façon de voir est très influencée
par les outils que tu utilises. Malheureusement, je ne suis pas capable
de te renseigner sur les bons outils (tm) à utiliser.

> Je commence vraiment à désespérer de vouloir faire du multi segment.
> Imaginons un segment qui contient un ensemble de fonctions standards C
> de la biblilothèque. Encore une fois, on est dans la m*rd* pour
> pouvoir y accéder car cela implique forcément un changement de CS
> et/ou DS.

Oui, sans doute. Sauf si ton compilo part du principe qu'une adresse
n'est pas qu'un "offset" mais est un couple (segment, offset).

Bonne journee,

-- 
http://david.decotigny.free.fr/


Plus d'informations sur la liste de diffusion Sos