Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > Programmation d'OS
Programmation d'OS Programmation de systèmes d'exploitation
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/10/2010, 17h51   #1
FOX19881
Invité régulier
 
Inscription : juillet 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 22
Points : 8
Points : 8
Par défaut Task State Segment : champ limit

Bonjour,

je me pose une question a propos du champs "limit" d'un
descripteur de "Task State Segment".

Normalement la taille minimale d'un TSS est de 104 octets (0x68).
Le champ "limit" doit contenir la taille du segment, en octet ou en page.


(Manuel Intel Volume 3A 3-13)
Citation:
Segment limit field
Specifies the size of the segment.
Donc d'apres moi le champ limit devrait toujour contenir au moins 0x68
(dans le cas d'un TSS avec le bit G a 0) mais le manuel Intel dit que:


(Manuel Intel Volume 3A 6-7)
Citation:
When the G flag is 0 in a TSS descriptor for a 32-bit TSS,
the limit field must have a value equal to or greater than 67H,
one byte less than the minimum size of a TSS.
Pourquoi peut-on mettre 0x67 ?
Voila ma question...


Merci a ceux qui eclaireront ma lanterne
FOX19881 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2010, 20h56   #2
tommy60
Membre du Club
 
Homme Frédéric
Inscription : mai 2009
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 27
Localisation : France, Oise (Picardie)

Informations forums :
Inscription : mai 2009
Messages : 36
Points : 50
Points : 50
Bonjour,

Citation:
Envoyé par FOX19881 Voir le message
Pourquoi peut-on mettre 0x67 ?
Voila ma question...
La réponse se trouve dans ton post :
Citation:
one byte less than the minimum size of a TSS
En clair, le champ "limit" du TSS doit contenir sa taille moins 1 octet. Donc, si le TSS fait 104 octets (0x68), la valeur du champ "limit" doit être 104 - 1 octet = 103 (0x67).
tommy60 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/10/2010, 21h46   #3
FOX19881
Invité régulier
 
Inscription : juillet 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 22
Points : 8
Points : 8
Merci de ta réponse mais non je n'ai pas donné la réponse dans mon premier post.

Je sais bien que le manuel Intel autorise 0x67 mais ma question
est pourquoi autoriser 0x67 alors que le champ "limit" est sense
contenir la taille du segment (donc 0x68)...

Sinon je ne crois pas que:

Citation:
le champ "limit" du TSS DOIT contenir sa taille moins 1 octet.
Je pense que je peux tres bien mettre 0x68 dans mon champ limit
si la taille de mon segment fait 104 octets
et c'est ce qui me fait me demander pourquoi on peut mettre 0x67.
Quel est l'interet ?

Je suis pas sur d'avoir bien reformulé mon interrogation...
FOX19881 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2010, 18h48   #4
bifur
Membre habitué
 
passe le balais et l'aspirateur
Inscription : mars 2008
Messages : 111
Détails du profil
Informations personnelles :
Âge : 28

Informations professionnelles :
Activité : passe le balais et l'aspirateur

Informations forums :
Inscription : mars 2008
Messages : 111
Points : 126
Points : 126
le champ limite contient en fait l'adresse maximum autorisé pour acceder au segment. par exemple pour un segment de 64 octets, la valeur "limit" contiendrat 63 car on peut adresser de 0 à 63

cette confusion vient du faite que les ordinateurs compte a partir de zéro et pas de 1 comme les humains (ça ne vous a jamais semblé estrange que n'ou n'ayont aucun siècle zéro)

ah le zéro quel belle invention!
bifur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2010, 20h36   #5
FOX19881
Invité régulier
 
Inscription : juillet 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 22
Points : 8
Points : 8
Ah oui,

en fait ma confusion vient du fait que lorsque le bit G est a 1 on
met effectivement la TAILLE du segment dans le champ limit
alors que quand le bit G est a 0 on ne met plus la taille mais
la valeur du dernier offset...

(effectivement tommy60 tu avais raison)

Merci a vous deux.
FOX19881 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2010, 22h17   #6
bifur
Membre habitué
 
passe le balais et l'aspirateur
Inscription : mars 2008
Messages : 111
Détails du profil
Informations personnelles :
Âge : 28

Informations professionnelles :
Activité : passe le balais et l'aspirateur

Informations forums :
Inscription : mars 2008
Messages : 111
Points : 126
Points : 126
G c'est la granularité de la limite

quant g = 1 la limite est a multiplier par 4096 (4KiBi)

j'ai pas vu d'indication comme quoi c'était différent pour les TSS
bifur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2010, 03h17   #7
FOX19881
Invité régulier
 
Inscription : juillet 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 22
Points : 8
Points : 8
Citation:
Envoyé par bifur Voir le message
j'ai pas vu d'indication comme quoi c'était différent pour les TSS
non c'est pas different, mais comme je l'ai dit j'ai mal interprete le manuel Intel
et donc j'ai cru que ma question etait specifique aux TSS alors que non.
FOX19881 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2010, 01h10   #8
FOX19881
Invité régulier
 
Inscription : juillet 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 22
Points : 8
Points : 8
Bonsoir,

je croyais avoir compris mais je viens de m'appercevoir que non.

Dites moi si je me trompe mais si je met le bit G a 1
et que je met la limit a 1, alors je peux acceder a 2 pages:
de base + 0x0 a base + 0x1FFF. (pas dans le cas d'un segment en expand-down biensur)

Si c'est ca alors effectivement j'avais rien compris.

Si vous pouviez me confirmer ce que je viens de dire... merci
FOX19881 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2010, 22h13   #9
bifur
Membre habitué
 
passe le balais et l'aspirateur
Inscription : mars 2008
Messages : 111
Détails du profil
Informations personnelles :
Âge : 28

Informations professionnelles :
Activité : passe le balais et l'aspirateur

Informations forums :
Inscription : mars 2008
Messages : 111
Points : 126
Points : 126
de ce que j'avait comprit c'est bien ça mais je ne l'ai pas encore vérifié dans la pratique
bifur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2010, 14h04   #10
FOX19881
Invité régulier
 
Inscription : juillet 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 22
Points : 8
Points : 8
Ok merci de ta confirmation.

Pour ce qui est de la pratique, en debuggant avec bochs (avec qemu aussi) et en affichant des informations sur les segments, j'ai remarque que pour une limite que j'avais mis a 1, il m'affichait limit=0x00001fff.
D'ailleurs je viens d'essayer en mettant la limite a 0 sur le meme segment de code et l'execution se deroule correctement (et bochs affiche limit=0x00000fff).

Je demandai confirmation pour etre sur de pas avoir compris de travers cette fois.
FOX19881 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h58.


 
 
 
 
Partenaires

Hébergement Web