Lorsque tu alloues de la memoire, tu obtiens un pointeur sur de la memoire _virtuelle_. Si le system re-ordonne les blocks _vituels_ pout obtenir des block contigus, alors tes pointeurs deviennent faux! Et tu n'as aucun moyen de le savoir!
Par contre, le re-ordonnancement des blocks physiques est possible (sauf certains cas) puisque la MMU est la pour ca : translation adresse virtuelle -> adresse physique. Et ca, ca peut changer sans probleme. D'ailleurs, ca arrive tout le temps!
Exemple :
- ton appli alloue un bloc de memoire : elle obtient de la memoire virtuelle, et une correspondance avec de la memoire physique est etablie a travers la MMU (grosso modo, hein!)
- ton appli est preemptee par une autre appli, qui a besoin de memoire
- le block precedent est mis en 'swap'
- ton appli est a nouveau schedullee et a besoin de son block
- le systeme reprend le block ; son adresse virtuelle n'a pas change, mais rien ne garantit qu'il soit au meme endroit en memoire physique
[^] # Re: Juste une question
Posté par ymorin . En réponse à la dépêche Nouvelle version 2.6.33 du noyau Linux. Évalué à 1.
Par contre, le re-ordonnancement des blocks physiques est possible (sauf certains cas) puisque la MMU est la pour ca : translation adresse virtuelle -> adresse physique. Et ca, ca peut changer sans probleme. D'ailleurs, ca arrive tout le temps!
Exemple :
- ton appli alloue un bloc de memoire : elle obtient de la memoire virtuelle, et une correspondance avec de la memoire physique est etablie a travers la MMU (grosso modo, hein!)
- ton appli est preemptee par une autre appli, qui a besoin de memoire
- le block precedent est mis en 'swap'
- ton appli est a nouveau schedullee et a besoin de son block
- le systeme reprend le block ; son adresse virtuelle n'a pas change, mais rien ne garantit qu'il soit au meme endroit en memoire physique
Hop, voila.