[SOS] Multi-Tasking - TSS

David Decotigny david.decotigny at free.fr
Lun 26 Sep 20:24:04 CEST 2005


Bonjour,

KAISER Edouard wrote:
> J'arrive à retrouver ce binaire ELF et je (pense ?) le copie au bon
> endroit : juste aprés le noyau, donc à 8Mo, comme décrit dans la LDT
> que je lui associe.

J'imagine que c'est "A 8 Mo dans l'espace physique" (vu que tu n'a pas
de pagination) ? Sinon je ne vois pas quel sens ce "8Mo" peut avoir.

> Première question : 
> Dans la section userland/link.lds, on indique au linker que le
> programme sera chargé au premier 1Go dans SOS.

Oui, au 1er Go en mem virtuelle.

> J'ai mis en pratique la meme chose pour mon OS, sauf que moi c'est 8Mo
> donc 0x800000.

8Mo dans quel espace ? Si c'est en memoire virtuelle mais que ton
segment de code commence justement a 8Mo en mem physique, alors c'est
l'adresse 0 qu'il faut que tu mettes (deplacement par rapport au debut
du segment).

> Alors pourquoi dire au Linker l'emplacement ou sera mis notre
> executable en memoire ?

Il faut que les adresses que tu fournis au linker soient relatives au
debut de ton segment. Si tu veux que le code commence pil au debut du
segment, tu mets l'adresse 0, si tu veux qu'il commence 42 octets plus
loin, tu mets 42, etc... Peu importe où le segment commence en memoire
physique.

> Deuxième question :
> Je parle de esp0, esp1 & esp2, respectivement ss0, ss1, ss2.
> Quelle est l'utilité de ces champs pour le processeur ?

Ca lui sert a savoir ou est la pile lors des changements de privilege.

> En ce qui concerne EIP, ce registre contient un offset n'est ce pas ?

Un offset par rapport au debut du segment CS, oui.

> Donc si dans le descripteur de segment de code qui commence à
> 0x800000, l'execution ne commence vraiment qu'a 0x800018 (header ELF
> je présume ?), EIP devra valoir 0x18 non ?

Oui.

Bonne soiree,

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


Plus d'informations sur la liste de diffusion Sos