Cours 11, Partage du temps de microprocesseur et RTOS

publicité
Cours 11, Partage du temps de microprocesseur et RTOS
Q11.1 Qu'est-ce qu’un système d’exploitation?
Q11.2 Quelle est la différence entre un système d’exploitation préemptif et un système
d’exploitation non-préemptif?
Q11.3 Comparez ensemble une super-boucle, un système d’exploitation non-préemptif et
un système d’exploitation préemptif. Quels sont les avantages et les désavantages de
chacune de ces approches pour attribuer le temps de CPU aux tâches?
Q11.4 Dans un système microprocesseur, quelles sont les responsabilités du système
d’exploitation?
Q11.5 Un RTOS n’a pas les mêmes critères de performance qu’un système d’exploitation
qui n’est pas temps réel. Cela a plusieurs impacts sur le design du système d’exploitation.
Quelle est la principale différence entre un RTOS et un OS lorsque le système
d’exploitation détermine la prochaine tâche à exécuter? Lorsque le système d’exploitation
alloue de la mémoire?
Q11.6 Que fait-on dans une application utilisant une super-boucle pour réduire la
consommation de puissance du microprocesseur?
Q11.7 Comment fait un système d’exploitation préemptif pour s’assurer de ne pas allouer
de temps à une tâche qui attend ou à une tâche bloquée, c’est-à-dire en attente d’une
réponse d’un périphérique?
Q11.8 Lorsqu’un processus ou une tâche accède à un périphérique lent, l’état de la tâche
devrait devenir bloqué. Comment le programmeur doit-il indiquer au système d’exploitation
que la tâche qu’il a programmée est maintenant en attente d’un périphérique?
Q11.9 Lorsqu’une tâche appelle une fonction du système d’exploitation pour attendre
(exemple : void OS_Wait(int Xms)), le système d’exploitation met la tâche dans l’état “en
attente”. Habituellement, quel évènement permet de sortir de cet état?
Q11.10 Qu'est-ce qu'une section critique dans un programme?
Q11.11 Un programmeur crée une fonction F() traitant une variable globale MaVar. La
fonction F() est appelée à chaque exécution de la boucle du main. De plus, la fonction F()
est appelée lors de l'interruption du timer0. Est-ce que ces opérations sont valides? Si elles
sont valides, pourquoi? Si elles ne sont pas valides, comment régler le problème?
Q11.12 Un programmeur doit coder une machine à états appelant différentes fonctions
possédant le même type de retour et les mêmes paramètres pour chaque état. Exemple :
switch(FunctionAExecuter)
{
case ExecuteFunction1 :
Function1();
Break;
case ExecuteFunction2 :
Function2();
Break;
case ExecuteFunction2 :
Function3();
Break;
…
}
Cependant, dans le but d'alléger le code, il souhaite éviter d'utiliser un switch-case ou une
série de if imbriqués pour déterminer la fonction à appeler dans son main par rapport à
l'état actuel. Quelle autre solution peut-il employer? Décrivez brièvement cette solution.
Q11.13 Décrivez le principe d'utilisation des sémaphores et mutex.
Q11.14 Un système d’exploitation préemptif exécute à tour de rôle les tâches 1 et 2 telles
qu’implémentées ci-dessous. Les deux tâches appellent une fonction pour lire une mémoire
EEPROM SPI:
Tâche 1
Tâche 2
Fonction d’accès à la mémoire
void Tache1(void)
{
short a;
InitT1();
while(1)
{
...
if(evenement1())
{
a= LireEEPROMSPI(20);
}
}
}
void Tache2(void)
{
short d;
InitT1();
while(1)
{
...
if(evenement2())
{
d= LireEEPROMSPI(40);
}
}
}
short LireEEPROMSPI(short adresse)
{
short ValeurLue;
EnvoieOctetSPI(CMD_LECTURE);
EnvoieOctetSPI(adresse >> 8);
EnvoieOctetSPI(adresse & 0xFF);
//Gènère l’horloge SPI pour lire mem.
EnvoieOctetSPI(0);
ValeurLue = REG_SPI_RX*256;
EnvoieOctetSPI(0);
ValeurLue += REG_SPI_RX;
return ValeurLue;
}
Pourquoi l’exécution de ces tâches par le système d’exploitation ne fonctionnera pas?
Q11.15 Lisez et répondez aux questions de SMI_C11_Wait_Avec_OS_Preemptif.pdf (voir
les notes de cours).
Q11.16 Expliquez les fonctions GetMutex et ReleaseMutex retrouvée à la fin de
SMI_C11_Notes sur les Mutex.pdf (voir les notes de cours).
Cours 12 : Compilation, Édition de liens et IDE
Q12.1 Quel est le rôle d'un compilateur?
Q12.2 Quel est le rôle de l'éditeur de liens?
Q12.3 Que contient un fichier objet? À quoi sert ce type de fichier?
Q12.4 Que contient un fichier exécutable?
Q12.5 Associez chaque opération d'optimisation à un type d'optimisation (haut niveau,
locale, globale, architecturale/dépendante de l'architecture).
Opération
Type
Retirer d'une boucle du code qui est calculé inutilement à chaque itération
Remplacer les instances d'une variable constante directement apr la constante
Réarranger les instructions pour améliorer la performance du pipeline
Remplacer des procédures par leur contenu (inlining)
Q12.6 Pourquoi est-il recommandé de vérifier le fonctionnement d'un programme de
nouveau après l'application d'optimisations?
Q12.7 Supposons que le fichier A utilise la variable VarB déclarée dans le fichier B. Vous
retrouverez, dans le fichier A, “extern int VarB;”. Pour l’éditeur de lien, cette phrase
permet de relier le symbole déclaré dans le fichier au symbole défini dans le fichier B. Cette
déclaration sert-elle au compilateur? Si oui, à quoi? Si non, pourquoi?
Q12.8 L’énoncé suivant est faux, dites pourquoi : “Le JTAG est une norme définissant un
protocole permettant d’écrire les instructions dans la mémoire du microprocesseur et de
déverminer les instructions exécutées par celui-ci.
Q12.9 Un programme est constitué de fichiers en assembleur et de fichiers en écrits en
langage C. Décrivez comment seront traités ces fichiers pour générer l’exécutable?
Cours 13, Mémoires-Logiciel
Q13.1 Que se produirait-il si les variables locales étaient compilées de la même manière
que des variables globales?
Q13.2 Quels sont les données nécessaires à mettre sur la pile lors de l'appel d'une fonction?
Dans quel ordre? Pourquoi faut-il les mettre dans cet ordre?
Q13.3 Définissez les termes suivants dans un contexte d’allocation dynamique de mémoire:
Mot ou expression
Allocation dynamique
Tas (Heap)
Fragmentation
Définition
Q13.4 Quelles sont les paramètres d’entrée des fonctions New/Malloc et Free/Delete? Que
retournent ces fonctions?
Q13.5 Nommez et expliquez les principaux avantages et désavantages d'utiliser un memory
pool.
Q13.6 Il y a deux stratégies principales utilisées afin de passer les paramètres d’une
fonction. Nommez ces stratégies et comparez-les entre elles.
Q13.7 Quels critères sont utilisés pour évaluer les performances d’un algorithme
d’allocation dynamique de mémoire?
Q13.8 Expliquez dans vos mots comment fonctionne un Memory Pool? Écrivez un exemple
d’implémentation des fonctions New et Delete pour cet algorithme d’allocation dynamique
de mémoire.
Q13.9 Expliquez dans vos mots comment l’algorithme de monsieur Doug Lea présenté dans
les notes de cours?
Q13.10 Pourquoi doit-on indiquer au compilateur de ne pas initialiser une plage d'adresses
assignée à une mémoire externe?
Q13.11 La déclaration d'une variable à point flottante peut augmenter la taille de code de
plusieurs kilooctets selon le type de microprocesseur utilisé. Pourquoi?
Q13.12 L'utilisation de certaines librairies standards peut augmenter la taille de code de
plusieurs kilooctets. Pourquoi?
Q13.13 Quelle stratégie devrait être utilisée par le programmeur afin de déterminer la taille
de la pile requise?
Cours 14: Alimentations et horloges
Q14.1 Décrivez le rôle de chaque composante dans le convertisseur AC-DC simple illustré
ci-dessous:
Q14.2 Nommez les deux types de régulateurs faisant une conversion DC-DC et décrivez
chacun brièvement.
Q14.3 Comment mesure-t-on l’efficacité d’un régulateur DC-DC?
Q14.4 Le circuit suivant illustre un régulateur linéaire. Expliquez son principe de
fonctionnement et montrez que la perte d’énergie dans le régulateur est proportionnelle à
la différence entre la tension d’entrée et la tension de sortie.
Q14.5 Expliquez le principe des watchdogs.
Q14.6 Donnez l'utilité d'un Phase-lock loop (PLL) et décrivez brièvement sa structure.
Q14.7 Mettre plusieurs microprocesseurs sur le même circuit d’horloge n’est
habituellement pas une bonne idée. Pourquoi?
Q14.8 À quoi servent les condensateurs de découplage?
Q14.9 Nommez trois événements causant la réinitialisation (reset) d'un microcontrôleur.
Q14.10 Quelle est la différence entre la puissance dynamique et la puissance statique?
Q14.11 Pourquoi veut-on séparer l'alimentation d'un CAN/CNA (ADC/DAC) du reste d'un
SMI?
Q14.12 Le circuit suivant représente un régulateur SMPS de type Boost. Dans ce circuit,
Vdc_Entrée est une source d’alimentation DC, Reg est un circuit intégré de type régulateur
et la Charge est résistive. Expliquez, à partir de la figure, comment fonctionne le circuit et
dites quel voltage devrait-on retrouver aux bornes de la charge par rapport à la tension de
la source d’alimentation.
Q14.13 Pour faire un circuit oscillant (une horloge), il faut obligatoirement un inverseur
(ou équivalent) et un délai. Le circuit suivant, un « relaxation oscillator », utilise un
comparateur pour générer un signal d’horloge. Expliquez comment ce circuit fonctionne.
Q14.14 (Pour experts) Comment pourrait-on modifier le « relaxation oscillator » de la
question précédente pour que le circuit ne donne pas une onde carrée en sortie, mais
génère des impulsions de largeur fixe (un PWM avec un duty cycle différent de 50%)?
Q14.15 Un microprocesseur tombe en mode sommeil à toutes les secondes. Il dort pendant
900 millisecondes, puis il est réveillé par une interruption de timer pendant 100
millisecondes. Pendant son réveil, le microprocesseur traite intensivement des données
provenant de ces ADCs, transférées par DMA. Le microprocesseur exécute des instructions
à 256MHz quand il est réveillé, mais n’a pas d’horloge lorsqu’il dort. Un ingénieur novice
a décidé de filtrer l’alimentation du microprocesseur comme suit, afin de réduire le bruit vu
sur les ADCs :
Micro
contrôleur
3.3V
L1
3.3V_f
C2
C1
C3
Vcoeur
Vadc
Dites-pourquoi l’idée n’est pas bonne et expliquez comment on pourrait corriger.
Cours 15: SMI versus architecture du microprocesseur
Q15.1 Quels critères permettent d’évaluer l’architecture d’un microprocesseur?
Q15.2 Le ARM Cortex M4 a-t-il une architecture Load/Store ou une architecture
Mémoire/Registre pour accéder à la mémoire? Pourquoi?
Q15.3 Le ARM Cortex M4 a-t-il une architecture RISC ou une architecture CISC?
Pourquoi?
Q15.4 Le ARM Cortex M4 a un pipeline d’instruction d’une profondeur de 3. Pour quelle
raison les concepteurs du ARM Cortex M4 n’ont-ils pas choisi une profondeur de 2 ou de
4?
Q15.5 Quels sont les impacts de l’utilisation d’un pipeline d’instruction sur l’exécution de
vos programmes?
Q15.6 Énumérez et décrivez trois fonctionnalités du ARM Cortex M4 afin de supporter un
éventuel système d’exploitation.
Q15.7 La protection de la mémoire et la translation d’adresse (adresse virtuel traduite en
adresse physique) sont des tâches qui doivent être effectuées par le matériel (habituellement
par le MMU du microcontrôleur). Pourquoi?
Téléchargement