ESIEE I3 IN301/IN3ST01 

Systèmes d'exploitation - UNIX

TD: Gestion de la mémoire et des fichiers

Petites questions de cours

(a) Considérez les deux fonctions suivantes


int somme1(int **tableau, int N, int M)
{
   int i,j, somme;
   somme = 0;
   for (i=0; i < N; i++) {
      for (j=0; j < M; j++) {
         somme += tableau[i][j];
      }
   }
   return somme;
}

int somme2(int **tableau, int N, int M)
{
   int i,j, somme;
   somme = 0;
   for (j=0; j < M; j++) {
      for (i=0; i < N; i++) {
         somme += tableau[i][j];
      }
   }
   return somme;
}

Ecrivez un programme qui appelle les deux fonctions somme1 et somme2 pour un tableau de taille assez grande (par exemple n=m=2048; attention un tel tableau ne peut pas être déclaré statiquement (expliquez pourquoi)). Le programme doit également comparer la vitesse d'execution de somme1 et de somme2. Décrivez le résultat obtenu et expliquez la différence de temps d'exécution.

(b) (d'après J.M. Torres, H. Boucheneb et M. Gagnon) Considérez la séquence de références de pages 0,1,2,3,4,5,4,5,6,7,8,9 faite par un processus. Montrez la séquence d'allocation des pages en mémoire pour une mémoire de 3 cadres, et pour chacun des algorithmes énumérés ci-dessous. Calculez le taux de faute de pages produit par chacun des algorithmes de remplacement de pages.

Copie de fichiers par mmap, write et fwrite

Comparez les vitesses de copie des trois versions du copieur, et commentez.

Commande strace

La commande strace est utilisée pour connaitre les appels système utilisés pendant l'exécution d'un programme. Elle permet donc de regarder les interactions du programme avec le noyau. Utilisez la commande strace pour observer le comportement d'un programme de votre choix, et décrivez les appels système qui sont utilisés par le programme. Insistez en particulier sur les aspects mémoires présent lors de l'exécution de votre programme.

Allocation mémoire

Ecrivez une procédure mon_malloc et une procédure mon_free permettant d'allouer de la mémoire et de la libérer en utilisant mmap. Ecrivez un petit programme qui utilise ces deux procédures.

Fichiers à trou et NFS

Ecrivez un programme qui crée un nouveau fichier, qui écrit XYZ en début de fichier, et qui écrit xyz en position 100000. Executer ce programme sur votre compte unix, puis sur /tmp. Quel est le nombre de blocs alloués pour ce fichier dans chacun des cas ?