Papouille a écrit :
Aris a écrit :
La segmentation c'est une des techniques qui existaient dans le temps, en parallele à la pagination (paging) pour séparer les espaces mémoires de processus. C'est tombé en désuétude parce que c'est plus compliqué à gérer et c'est pas forcement plus sûr, mais dans certains cas (microcontroleurs et petits systemes temps-reels), la gestion de la mémoire par le cpu est beaucoup plus simple.
Oui mais le cpu doit alors être prévu pour. Ce qui complique le cpu. Par ailleurs, la gestion de la mémoire par le compilateur est-elle, elle aussi, plus simple ?
En fait la gestion de la segmentation est beaucoup plus facile que la gestion de la pagination du point de vue du cpu. Dans la segmentation, chaque programme possède un registre qui indique à partir d'où, dans la mémoire réele, se trouve la mémoire du programme.
car je ne comprends pas qu'il soit plus facile pour un compilateur de gérer des espaces d'adresses différents (commençant tous à l'offset 0) plutôt que gérer un seul espace d'adresses...
En effet, pour le compilateur, c'est plus simple d'avoir un seul espace mémoire. C'est là que la pagination est utile. Dans un mode paginé, le processus a l'impression d'avoir toute la mémoire pour lui tout seul, et il lui est impossible de toucher à de la mémoire qui lui appartient pas. En plus, il peut demander plus de mémoire qu'il n'en utilise reelement, et la pagination permet l'utilisation de mémoire virtuelle
Certains cpu proposent les deux paradigmes de programmation, mais plus par retrocompatibilité que par efficacité (msdos marchait à base de segmentation).
On imaginerait pas concevoir un "gros" OS sur base de segmentation aujourd'hui
Windows marche avec trois segments, non ? (data, stack, code) non ?
L'architecture intel est un mélange de segmentation et de pagination. Je pense que windows fonctionne avec le modèle flat, càd que les 3 segments sont reglés pour être identiques, et il n'y a que la pagination qui entre en jeu (en très simplifié)
Papouille
> Je ne comprends pas bien pourquoi il est utile de séparer les espaces > mémoire d'un processus... ? pourquoi ?(si ce n'est par sécurité)
Par sécurité :) Etre sur que le job de ton voisin qui écrit partout n'importe comment ne va pas faire planter ton processus. Ca me parait quelquechose d'indispensable, mais windows ne possède cette fonctionnalité que depuis windows NT et 2000.
Aussi, comme j'ai dit plus haut, la pagination permet l'allocation de mémoire virtuelle (swapping) et l'utilisation de plus de mémoire qu'il en existe pour un processus, ainsi que d'autres fonctionnalités (partage de mémoire entre différents processus, etc.