Livre_silo 30 août 2013 16:32 Page 336
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
336
Informatique pour tous
Ce TP consiste à lancer un programme créant n mots de données dans la mémoire (vive
ou virtuelle), puis accédant au hasard à N endroits dans les données créées. Si les données
sont toutes dans la mémoire vive, l’accès est rapide. Si elles sont en quantité tellement
importante qu’une partie a dû être stockée sur le disque dur, l’accès est plus lent.
1 Télécharger le programme mem_virtuelle.py sur le site de cet ouvrage ⁴ et l’ouvrir dans
un IDE Python. L’ entier N y est fixé à 1000 et n peut être arbitrairement choisi.
2 Faire exécuter le code par l’IDE ; cela ne produit en principe aucun résultat. Ensuite,
dans le même interpréteur interactif, lancer la fonction teste avec pour argument l’entier n.
3 Si on lance par exemple teste(100000000), combien de mots mémoire seront-ils créés ?
Combien de Mo cela représente-t-il sur des systèmes respectivement 32 et 64 bits ?
4 La fonction teste renvoie alors le temps, en secondes, nécessaire pour accéder à N de
ces mots mémoire au hasard parmi les n. Elle effectue en fait plusieurs fois le test avant
de rendre la valeur la plus faible (qui est la plus représentative de ce qui se passe dans le
meilleur des cas).
Tester différentes valeurs de n et essayer de déterminer comment évolue la valeur renvoyée par le programme en fonction de n. Pour n trop grand, le programme s’arrêtera
brutalement car il n’y aura tout simplement pas assez de mémoire totale (même avec la
mémoire virtuelle) pour créer les données.
5 Établir un lien entre les résultats observés et les quantités de mémoire vive et de mémoire
virtuelle installées sur votre machine.
Pour n suffisamment petit pour que les données tiennent en mémoire vive, les temps obtenus seront inférieurs au millième de seconde (soit moins d’un millionième de seconde par
accès). Enfin, pour n suffisamment petit pour que les données puissent tenir en mémoire
virtuelle et suffisamment grand pour qu’assez de données soient envoyées dans le swap,
on obtient des temps de l’ordre de la seconde (soit de l’ordre du millième de seconde par
accès).
On donne figure A.2 des temps relevés par ce programme pour un PC sous une distribution
GNU/Linux 32 bits avec 2 Go de mémoire physique plus 2 Go de mémoire virtuelle. Les
valeurs de n ont été choisies aléatoirement de façon uniforme entre 400×10
6 et 700×10
6
mots-mémoire. D’autres programmes étaient ouverts sur ce PC, mais globalement, seul le
programme de test était réellement actif. Résultat : les données et programmes non actifs
ont été mis dans l’espace d’échange et les temps d’accès ne sont dégradés sensiblement
que pour une quantité de données supérieure à 500 millions de mots, soit environ 2 Go
(précisément la taille de la mémoire vive).
4. http://informatique-en-prepas.fr
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
336
Informatique pour tous
Ce TP consiste à lancer un programme créant n mots de données dans la mémoire (vive
ou virtuelle), puis accédant au hasard à N endroits dans les données créées. Si les données
sont toutes dans la mémoire vive, l’accès est rapide. Si elles sont en quantité tellement
importante qu’une partie a dû être stockée sur le disque dur, l’accès est plus lent.
1 Télécharger le programme mem_virtuelle.py sur le site de cet ouvrage ⁴ et l’ouvrir dans
un IDE Python. L’ entier N y est fixé à 1000 et n peut être arbitrairement choisi.
2 Faire exécuter le code par l’IDE ; cela ne produit en principe aucun résultat. Ensuite,
dans le même interpréteur interactif, lancer la fonction teste avec pour argument l’entier n.
3 Si on lance par exemple teste(100000000), combien de mots mémoire seront-ils créés ?
Combien de Mo cela représente-t-il sur des systèmes respectivement 32 et 64 bits ?
4 La fonction teste renvoie alors le temps, en secondes, nécessaire pour accéder à N de
ces mots mémoire au hasard parmi les n. Elle effectue en fait plusieurs fois le test avant
de rendre la valeur la plus faible (qui est la plus représentative de ce qui se passe dans le
meilleur des cas).
Tester différentes valeurs de n et essayer de déterminer comment évolue la valeur renvoyée par le programme en fonction de n. Pour n trop grand, le programme s’arrêtera
brutalement car il n’y aura tout simplement pas assez de mémoire totale (même avec la
mémoire virtuelle) pour créer les données.
5 Établir un lien entre les résultats observés et les quantités de mémoire vive et de mémoire
virtuelle installées sur votre machine.
Pour n suffisamment petit pour que les données tiennent en mémoire vive, les temps obtenus seront inférieurs au millième de seconde (soit moins d’un millionième de seconde par
accès). Enfin, pour n suffisamment petit pour que les données puissent tenir en mémoire
virtuelle et suffisamment grand pour qu’assez de données soient envoyées dans le swap,
on obtient des temps de l’ordre de la seconde (soit de l’ordre du millième de seconde par
accès).
On donne figure A.2 des temps relevés par ce programme pour un PC sous une distribution
GNU/Linux 32 bits avec 2 Go de mémoire physique plus 2 Go de mémoire virtuelle. Les
valeurs de n ont été choisies aléatoirement de façon uniforme entre 400×10
6 et 700×10
6
mots-mémoire. D’autres programmes étaient ouverts sur ce PC, mais globalement, seul le
programme de test était réellement actif. Résultat : les données et programmes non actifs
ont été mis dans l’espace d’échange et les temps d’accès ne sont dégradés sensiblement
que pour une quantité de données supérieure à 500 millions de mots, soit environ 2 Go
(précisément la taille de la mémoire vive).
4. http://informatique-en-prepas.fr
