Adressage segmenté

Fermé
zakuzasama Messages postés 135 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 avril 2015 - 24 mars 2006 à 11:57
zakuzasama Messages postés 135 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 avril 2015 - 24 mars 2006 à 17:11
Salut a tous
je cherche un cour qui explique comment fonctionne l' adressage segmenté ou si vous pouvez m'expliquer ^^ ,plus exactement comment determiner si un acces et legal ou pas (dépassement de la taille du segment ou droits incompatibles)

exemple d acces: W(2,00900) , R(8,00800) ,X(6,00800)
thanks

10 réponses

blux Messages postés 26596 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 13 janvier 2025 3 323
24 mars 2006 à 12:44
Encore là ? :-)

L'adressage segmenté est on-ne-plus simple :

La mémoire est divisée en segments.
Ces segments ont des attributs : read-only, write, execute... de manière à ce que le gestionnaire de mémoire puisse intercepter une action incompatible avec les règles définies :

ex : écrire dans la zone du code chargé...

Ta demande est en fait dépendante de l'OS...

Certains ont des accès via offset depuis 0, d'autres ont des bloc + des offsets...
Certains ont des mécanismes de protection des zones mémoire, d'autres non (=>buffer overflow et injection de code...)

Tu te places dans quel cas et sous quel OS ?
0
zakuzasama Messages postés 135 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 avril 2015 1
24 mars 2006 à 13:17
oui toujours la ^^ desolé de vous harceler avec mes question ,mais dans mon syllabus tout est plutot mal expliqué donc quand je bloc je cherche a comprendre sur internet :)
euh... qu est ce qu un OS je suis debutant , et ce que ces attribut ont des tailles differentes ?
0
blux Messages postés 26596 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 13 janvier 2025 3 323
24 mars 2006 à 13:56
desolé de vous harceler avec mes question

Euh, ben non, le forum est là pour ça !

OS : Operating System (Système d'exploitation : windows, unix, linux, solaris, mvs, os/400, gcos8, ms-dos...)

Les attributs sont en principe fixés lors du chargement en mémoire :

- un programme contient du code et a besoin de zones pour stocker temporairement des variables

- lors de la compilation/édition des liens du programme, le processus va fixer les plages dans lesquelles vont se stocker le code et les variables

- lorsqu'on va lancer le programme, l'OS (par l'intermédiaire de son gestionnaire de mémoire) va analyser ce que l'on veut charger et déclarera (donc marquera) : le code ira dans le segment toto en read-only et les variables dans le segment tutu en read/write

Les attributs du segment sont généralement de quelques bits, car on ne trouve pas une infinité d'états : read, read/write, execute, non swappable... Mais il n'est pas interdit de penser qu'un OS est allé plus loin dans les attributs des segments pour en déclarer d'autres...

Ensuite, on chargera tout ce qu'on peut du programme en mémoire (dans la limite du segment, qui est généralement plus petite que celle du programme), pour l'exécuter.

Et lorsque l'on voudra exécuter une partie de programme qui n'est pas en mémoire, on va libérer un segment non utilisé (en écrivant son contenu sur disque, action de swapping), pour le remplacer par le bout de programme souhaité (qui se fera remplacer lorsqu'il ne sera plus utilisé et que de l'espace sera nécessaire pour autre chose)...

Mais on rentre là dans les mécanismes de gestion partage mémoire pour des processus multiples...
0
zakuzasama Messages postés 135 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 avril 2015 1
24 mars 2006 à 14:22
daccord mais quelle operation je dois effectuer pour savoir si
W(2,00900) par exemple et valide ou non
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blux Messages postés 26596 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 13 janvier 2025 3 323
24 mars 2006 à 14:41
W(2,00900)

C'est supposé être quoi au juste ?

Un bit d'attribut, suivi d'un numéro de segment et d'un offset ?

Ou alors un pseudo-ordre machine pour écrire 2 octets à l'adresse 900 ?

Eclaire-moi ! :-)
0
zakuzasama Messages postés 135 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 avril 2015 1
24 mars 2006 à 14:53
eh bien normalement c'est un acces , execution(segment,deplacement)
mon exercice est le suivant :

Pour chacun des accès suivants, déterminez si les accès sont légaux:
Si oui donner l’adresse réelle de l’emplacement mémoire adressé.
Sinon donnez la cause de l’erreur (dépassement de la taille du segment et/ou droits incompatibles)

X ( 1 , 00700 ) // Demande d’exécution dans le segment 1, déplacement 00700
W (2, 00900)
R (1, 00900)
R (3, 01000)
R (5, 00800)
X (6, 00800)
W (5, 00900)
R (6, 37000)
0
blux Messages postés 26596 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 13 janvier 2025 3 323
24 mars 2006 à 15:59
Tout dépend de la taille des segments...

Et de la possibilité d'adresser au-delà de la fin du segment par l'offset...
0
zakuzasama Messages postés 135 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 avril 2015 1
24 mars 2006 à 16:52
les segment font 64 ko
0
blux Messages postés 26596 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 13 janvier 2025 3 323
24 mars 2006 à 17:05
A partir du moment où les segments font 64 Ko et que les déplacements sont tous inférieurs à cette valeur (même s'ils sont en hexa, ce qui n'est pas précisé dans ta demande), tout peut passer (aux attributs près : le segment 5 doit être en r/w, le 6 et le 1 en r/w, etc...)...

...avec un bémol pour le dernier, qui, si l'on suppose que l'offset est en hexa demande un déplacement hors segment, mais je ne sais pas ce qu'il y a après le segment 6...
0
zakuzasama Messages postés 135 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 11 avril 2015 1
24 mars 2006 à 17:11
ok merci ^^
0