2010-07-16 5 views
2

Je suis un peu confus au sujet de la segmentation pure parce que dans ma tête existait toujours l'idée de la mémoire virtuelle. Mais, d'après ce que je comprends, la segmentation pure consiste également à imaginer un espace d'adressage virtuel, divisé en segments qui sont TOUS chargés dans la mémoire vive (RAM). La différence avec la mémoire virtuelle avec la segmentation, c'est qu'il y a peut-être un segment qui n'est pas dans la mémoire vive (RAM).Segmentation pure

Est-ce correct?

AJOUTER UNE QUESTION: Existe-t-il une différence pratique entre la segmentation combinée à la radiomessagerie et la radiomessagerie à deux niveaux ?, c'est la même chose sauf pour la protection «limite» de la méthode segment. Ou il y a une autre différence?

+0

Votre terminologie est un peu fausse. La "mémoire virtuelle" décrit tout système pouvant modifier les adresses avant d'accéder à la RAM. * La segmentation * est une forme de mémoire virtuelle. * La pagination * est une autre forme plus couramment utilisée. Peut-être que vous confondez "mémoire virtuelle" avec "pagination"? – Karmastan

+0

Je suis confus au sujet de la pagination, et de la pagine pure. Ou segmentation et segmentation pure. Qu'est-ce qui est pur? – makakko

Répondre

2

Non, ce n'est pas correct. Par exemple, sur x86, la segmentation utilise des pointeurs "éloignés" qui consistent en deux parties: le sélecteur de segment (chargé dans un registre de segment, par exemple, DS) et un décalage dans le segment. Les décalages de segment commencent toujours à 0. La CPU utilise le sélecteur de segment pour trouver le descripteur de segment qui contient l'adresse de base LINEAIRE du segment, la longueur et les droits d'accès. Tous les accès sont vérifiés en longueur; Si vous tentez d'accéder à la mémoire en dehors de la limite de segment ou avec un accès non valide (par exemple, en écrivant sur un segment en lecture seule), l'UC génère une erreur de protection générale. Étant donné que les adresses de segment sont toujours basées sur zéro et que la base de segment est implicite dans le sélecteur de segment, l'OS peut déplacer des segments et défragmenter la mémoire sans affecter les programmes utilisant ces données. (Comparez cela avec le modèle de mémoire «plat» où si vous déplacez des données, vous devez également mettre à jour tous les pointeurs.)

Désormais, lorsque la radiomessagerie est désactivée, l'adresse de base du segment LINEAR correspond à son adresse physique. . Lorsque la pagination est activée, tous les accès aux données de segment sont traduits par la MMU comme d'habitude.

+0

Et oui, il y a une différence entre la segmentation et la pagination à deux niveaux. La pagination à deux ou plusieurs niveaux est une technique permettant de réduire la mémoire utilisée par les tables de pages. – zvrba

+0

Dans un système de mémoire uniquement segmenté, MMU ne peut pas être utilisé? Je veux dire, en utilisant un cache comme TLB pour éviter la mémoire vive lente pour vérifier la base et la limite de chaque segment. Pour autant que je sache, le TLB fonctionne bien pour la pagination, ayant (sous une forme simple): page-frame, page-cadre, etc. Dans le cas de la segmentation, j'ai besoin: segment-limite-cadre, segment- limit-frame ... – makakko

+0

Non, MMU n'a pas de fonction dans un système à segment unique. Les descripteurs de segment sont généralement mis en cache par le processeur d'une autre manière. – zvrba

0

Si vous êtes sérieux au sujet de la compréhension de la gestion de la mémoire à ce niveau, une excellente explication peut être trouvée en lisant Operating System Concepts par Silberschatz, Galvin, et Gagne. Vous devriez être en mesure de trouver une édition plus ancienne et peu coûteuse.