Changes between Version 19 and Version 20 of Archi-1-TP10


Ignore:
Timestamp:
Dec 31, 2020, 5:19:51 PM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP10

    v19 v20  
    323323'''''''''''''''
    324324}}}
    325 1. Le code Que faire avant et après l'exécution de la fonction `main()` du point de vue de l'initialisation?
     3251. Que faire avant et après l'exécution de la fonction `main()` du point de vue de l'initialisation?
    326326{{{#!protected ------------------------------------------------------------------------------------
    327327'''''''''''''''
     
    329329'''''''''''''''
    330330}}}
    331 1. Nous avons vu que le noyau est sollicité par des événements, quels sont-ils?
     3311. Nous avons vu que le noyau est sollicité par des événements, quels sont-ils?Quel est le comportement exact de l'instruction `syscall`?  Comment le noyau fait-il pour connaitre la cause de son appel?
    332332{{{#!protected ------------------------------------------------------------------------------------
    333333'''''''''''''''
     
    336336  1. Les exceptions donc les "erreur" de programmation (division par 0, adressage mémoire incorrect, etc.).
    337337  1. Les interruptions qui sont des demandes d'intervention provenant des périphériques.
    338 '''''''''''''''
    339 }}}
    340 1. Vous savez que pour le processeur MIPS, tous les registres GPR sont équivalents, hormis `$0` qui contient toujours `0` et `$31` qui reçoit l'adresse de retour lors de l'exécution d'une instruction d'appel de fonction, comme `jal` ou `jalr`. Vous savez aussi que l'usage des registres respecte une convention. Il y a déjà la partition en les registres temporaires et persistant, ces derniers ne doivent pas changer de valeur lors d'un appel de fonction alors que les autres le peuvent. a été spécialisé, pour se réserve l'usage de dl'usageux registres, pourquoi et lesquels?
     338- L'instruction `syscall`sysc
     339'''''''''''''''
     340}}}
     3411. `$26` et `$27` sont deux registres temporaires que le noyau se réserve pour faire des calcul sans qu'il ait besoin de les sauvegarder dans la pile. Ce ne sont pas des registres système comme `c0_sr` ou `c0_epc`. En effet l'usage de `$26` et `$27` par l'utilisateur ne provoque pas d'exception du MIPS, mais si le noyau est appelé, il modifie ces registres et donc l'utilisateur perd leur valeur. Le code assembleur ci-après contient les instructions exécutées par le noyau quelque-soit la cause. Les commentaires présents dans le code ont été volontairement retirés. La section `.kentry` sera placée à l'adresse `0x80000000` par l'éditeur de lien. La direction `.org` (ligne 16) permet de déplacer le pointeur de remplissage de la section courante du nombre d'octets donnés en argument, ici `0x180`. Pouvez-vous dire pourquoi ? Expliquer le c
     342{{{#!c
     343 15 .section    .kentry,"ax"     
     344 16 .org        0x180           
     345 22
     346 23 kentry:                               
     347 24
     348 25     mfc0    $26,    $13                     
     349 26     andi    $26,    $26,    0x3C         
     350 27     li      $27,    0x20                   
     351 28     bne     $26,    $27,    not_syscall     
     352}}}
    341353{{{#!protected ------------------------------------------------------------------------------------
    342354'''''''''''''''