Changes between Version 12 and Version 13 of SujetTD0


Ignore:
Timestamp:
Feb 2, 2018, 6:41:41 PM (7 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTD0

    v12 v13  
    1212
    13131. Qu'est-ce que la mémoire physique ? ([#R1 réponse])
    14 
    15 1. Qu'est-ce que la mémoire virtuelle ?
    16 {{{#!protected
    17 - La mémoire virtuelle est un espace d'adressage (un ensemble d'adresses) dans lequel s'exécute un processus.
    18 - La question suivante est : qu'est-ce qu'un processus ?[[BR]]
    19   -> Un processus est un conteneur de ressource permettant à un programme de s'exécuter. Les ressources sont :
    20      - un espace d'adressage
    21      - un programme
    22      - un ensemble de fichiers ouverts
    23      - ...
    24      - un ou plusieurs fils d'exécution (threads) ayant chacun
    25        - un contexte de processeur
    26        - une pile d'exécution
    27 }}}
    28 
    29 2. Quelle est l'intérêt de la mémoire virtuelle ?
    30 {{{#!protected
    31 - La mémoire virtuelle permet d'isoler les processus entre eux.
    32 - La mémoire virtuelle permet de produire du code binaire sans connaître les adresses effectivement disponibles au moment de l'exécution.
    33 - La mémoire virtuelle d'étendre la mémoire utilisable au delà de la mémoire physique réellement disponible (grâce au swap disque)
    34  }}}
    35 
    36 3. Qu'est-ce qu'une MMU ?
    37 {{{#!protected
    38 - Chaque espace virtuel va être mappé sur l'espace physique, c'est-à-dire que lorsqu'un processeur exécute une instruction d'accès à la mémoire. Il commence par émettre l'adresse de l'instruction puis l'adresse de la donnée. Ces adresses sont virtuelles et sont traduites en adresses physiques par la MMU (Memory Management Unit) sur la base d'une table de page qui associe une page physique à chaque page virtuelle donnée à l'application avec des droits d'accès.
    39 }}}
    40 
    41 4. Qu'est-ce qu'un défaut de page ? Est-ce grave ?
    42 {{{#!protected
    43 - Un défaut de pages survient lorsque que le processeur demande l'accès à une adresse virtuelle pour laquelle l'OS n'a pas encore attribuée de page physique. Ce n'est pas forcément un problème, c'est même le cas normal, puisque l'OS n'attribue des pages physiques que si c'est nécessaire.
    44 }}}
     142. Qu'est-ce que la mémoire virtuelle ? ([#R2 réponse])
     153. Qu'est-ce qu'un processus ? ([#R3 réponse])
     164. Quelle est l'intérêt de la mémoire virtuelle ? ([#R4 réponse])
     175. Qu'est-ce qu'une MMU ? ([#R5 réponse])
     186. Qu'est-ce qu'un défaut de page ? Est-ce grave ? ([#R6 réponse])
    4519
    4620
     
    5327}}}
    5428
    55 et sa:
     29et son opposé:
    5630
    5731{{{#!c
     
    6135L'appel système [[http://manpagesfr.free.fr/man/man2/mmap.2.html|mmap]] permet de récupérer un pointeur vers une zone mémoire donnée en paramètres. À l'inverse, munmap permet de libérer l'association entre le pointeur fourni par mmap et la zone mémoire associée lors de l'appel à mmap.
    6236
    63 * Quel est l'intérêt ou le besoin de protéger les zones mémoires liées aux contrôleurs d'entrées/sorties ?
    64 {{{#!protected
    65 - Sureté et sécurité
    66   - sureté pour ne pas faire un mauvais usage du matériel
    67   - sécurité pour ne pas utiliser les droits pour volontairement casser le matériel
    68 }}}
     377. Quel est l'intérêt ou le besoin de protéger les zones mémoires liées aux contrôleurs d'entrées/sorties ? ([#R7 réponse])
    6938
    7039Pour accéder aux contrôleurs d'entrées/sorties mappés en mémoire, on utilise le mapping configuré dans le noyau Linux. Ce mapping est accessible depuis le fichier /dev/mem.
    7140
    72 * Qu'est-ce que le fichier /dev/mem ? Est-ce un vrai fichier ?
    73 {{{#!protected
    74 - C'est un pseudo-fichier qui permet d'accéder à la mémoire physique au travers de l'abstraction des fichiers.
    75 - Il faut avoir les droits du root pour ouvrir ce fichier.
    76 - ce n'est évidemment pas un fichier, ce n'est qu'une abstraction.
    77 }}}
     418. Qu'est-ce que le fichier /dev/mem ? Est-ce un vrai fichier ?
     429. Comment utilise-t-on le fichier /dev/mem ?
     4310. Sachant que l'adresse de base du contrôleur de GPIO est 0x20200000, quel serait le code C qui permettrait d'accéder au registre GPFSEL0 du contrôleur de GPIO ?
    7844
    79 * Comment utilise-t-on le fichier /dev/mem ?
    80 {{{#!protected
    81 - il faut l'ouvrir avec open()
    82 - on peut ensuite utiliser read() et write() mais il est plus propre d'utiliser mmap() qui permet d'accéder à la mémoire comme de la mémoire (comme un tableau d'octets).
    83 }}}
    84 
    85 * Sachant que l'adresse de base du contrôleur de GPIO est 0x20200000, quel serait le code C qui permettrait d'accéder au registre GPFSEL0 du contrôleur de GPIO ?
    86 {{{#!protected
    87 {{{#!c
    88     mmap_result = mmap (
    89         NULL                       // adresse virtuelle souhaitée, laissée NULL quand on laisse choisir l'OS
    90       , RPI_BLOCK_SIZE             // nombre d'octets demandés qui doit être un multiple de la taille d'une page
    91       , PROT_READ | PROT_WRITE     // type d'accès autorisé par le programme
    92       , MAP_SHARED                 // si plusieurs processus map le même zone, ils verront la même copie (!=MAP_PRIVATE)
    93       , mmap_fd                    // file descriptor : identifiant de /dev/mem donné par open
    94       , BCM2835_GPIO_BASE );       // décalage par rapport au premier octet de la mémoire
    95 
    96    (unsigned volatile int *) GPSEL0 = mmap_result; // volatile pour ne pas avoir une mise en cache dans les registres
    97    *GPSELO = value;
    98 }}}
    99 }}}
    10045
    10146== 4. Réalisation d'un programme pour faire clignoter une LED ==
    10247
    103 * Avec tout ce que vous avez appris jusqu'à présent, quelles seraient les grandes étapes pour réaliser un programme qui fasse clignoter une LED à une fréquence donnée ?
    104 {{{#!protected
    105 - ouvrir /dev/mem
    106 - mapper la zone où se trouve les registres de contrôle des GPIO
    107 - configurer la broche GPIO choisie en sortie.
    108 - faire une boucle
    109   - broche <- 0
    110   - attendre
    111   - broche <- 1
    112   - attendre
    113 }}}
    114 
    115 * Quelles sont les fonctions C associées ?
    116 {{{#!protected
    117 - open
    118 - mmap
    119 - sleep (ou un équivalent)
    120 }}}
     4811. Quelles sont les grandes étapes pour réaliser un programme qui fasse clignoter une LED à une fréquence donnée ?
     4912. Quelles sont les fonctions C associées ?
    12150
    12251
     
    12655
    127561. [=#R1] La mémoire physique est, en principe, la vraie mémoire qui est accédée par un espace d'adressage. Derrière chaque adresses physique, il y a de la vraie mémoire ou un registre de configuration de périphérique.
     571. [=#R2] La mémoire virtuelle est un espace d'adressage (un ensemble d'adresses) dans lequel s'exécute un processus.
     581. [=#R3] Un processus est un conteneur de ressource permettant à un programme de s'exécuter. Les ressources sont :
     59   - un espace d'adressage
     60   - un programme
     61   - un ensemble de fichiers ouverts
     62   - ...
     63   - un ou plusieurs fils d'exécution (threads) ayant chacun
     64     - un contexte de processeur
     65     - une pile d'exécution
     661. [=#R4] La mémoire virtuelle a plusieurs avantages :
     67   - La mémoire virtuelle permet d'isoler les processus entre eux.
     68   - La mémoire virtuelle permet de produire du code binaire sans connaître les adresses
     69     effectivement disponibles au moment de l'exécution.
     70   - La mémoire virtuelle d'étendre la mémoire utilisable au delà de la mémoire physique
     71     réellement disponible (grâce au swap disque).
     721. [=#R5] Chaque espace virtuel va être mappé sur l'espace physique,
     73   c'est-à-dire que lorsqu'un processeur exécute une instruction d'accès à la mémoire.
     74   Il commence par émettre l'adresse de l'instruction puis l'adresse de la donnée.
     75   Ces adresses sont virtuelles et sont traduites en adresses physiques par la MMU
     76   (Memory Management Unit) sur la base d'une table de page qui associe une page physique à chaque
     77   page virtuelle donnée à l'application avec des droits d'accès.
     781. [=#R6] Un défaut de pages survient lorsque que le processeur demande l'accès à une adresse
     79   virtuelle pour laquelle l'OS n'a pas encore attribuée de page physique.
     80   Ce n'est pas forcément un problème, c'est même le cas normal, puisque l'OS n'attribue des
     81   pages physiques que si c'est nécessaire.
     821. [=#R7] Sûreté et sécurité :
     83   - sûreté pour ne pas faire un mauvais usage du matériel
     84   - sécurité pour ne pas utiliser les droits pour volontairement casser le matériel
     851. [=#R8] C'est un pseudo-fichier qui permet d'accéder à la mémoire physique au travers de
     86   l'abstraction des fichiers.
     871. [=#R9] Il faut avoir les droits du root pour ouvrir ce fichier.
     88   Ce n'est évidemment pas un fichier, ce n'est qu'une abstraction.
     891. [=#R10]il faut l'ouvrir avec open(), on peut ensuite utiliser read() et write()
     90   mais il est plus propre d'utiliser mmap() qui permet d'accéder à la mémoire comme
     91   de la mémoire (comme un tableau d'octets).
     92{{{#!c
     93mmap_result = mmap (
     94    NULL                     // adresse virtuelle souhaitée, laissée NULL quand on laisse choisir l'OS
     95    , RPI_BLOCK_SIZE         // nombre d'octets demandés qui doit être un multiple de la taille d'une page
     96    , PROT_READ | PROT_WRITE // type d'accès autorisé par le programme
     97     
    12898
     99    , MAP_SHARED             // si plusieurs processus map le même zone, ils verront la même copie (!=MAP_PRIVATE)
     100     , mmap_fd               // file descriptor : identifiant de /dev/mem donné par open
     101     , BCM2835_GPIO_BASE );  // décalage par rapport au premier octet de la mémoire
    129102
     103   (unsigned volatile int *) GPSEL0 = mmap_result; // volatile pour ne pas avoir une mise en cache dans les registres
     104   *GPSELO = value;
    130105}}}
    131 
     1061. [=#R11] Clignoter une led :
     107   - ouvrir /dev/mem
     108   - mapper la zone où se trouve les registres de contrôle des GPIO
     109   - configurer la broche GPIO choisie en sortie.
     110   - faire une boucle
     111     - broche <- 0
     112     - attendre
     113     - broche <- 1
     114     - attendre
     1151. [=#R12] les fonctions nécessaires sont:
     116   - open
     117   - mmap
     118   - sleep (ou un équivalent)
     119}}}