25. Ordonnancement coopératif
Faites alterner des tâches et distinguez la politique d’exécution des instructions du processeur.
Ouvrir cette leçon →
1. Prévoir et tracer
Avant d’exécuter le programme d’essai, prévoyez sa sortie et tracez les trois premières instructions exécutées. Suivez les registres, les indicateurs ou la mémoire pertinents, selon le besoin. Avancez ensuite pas à pas pour comparer.
LOAD 1
CALL taskA
CALL taskB
HALT
taskA: PRINT
SLEEP 500
RETURN
taskB: LOAD 101
PRINT
RETURN
Ajouter les entrées à la file: Aucune
Initialiser la mémoire: Tous les octets sont initialement nuls
2. Construire et vérifier
Lisez un nombre de tours de 0 à 3. Faites commencer le compteur de la tâche A à 0 et celui de B à 100. À chaque tour, appelez A pour augmenter et afficher son compteur, puis B pour augmenter et afficher le sien.
Types d’instructions requis: INPUT, LOOP, CALL, RETURN
Programme de départ
INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA:
#
RETURN
taskB:
#
RETURN
Votre programme et vos notes
3. Expliquer la machine
L’alternance CALL/RETURN équivaut-elle à la préemption matérielle ?
26. Répartir le travail entre des cœurs
Divisez des travaux indépendants et combinez leurs résultats.
Ouvrir cette leçon →
1. Prévoir et tracer
Avant d’exécuter le programme d’essai, prévoyez sa sortie et tracez les trois premières instructions exécutées. Suivez les registres, les indicateurs ou la mémoire pertinents, selon le besoin. Avancez ensuite pas à pas pour comparer.
STORE 1 0
STORE 2 1
STORE 3 2
STORE 4 3
LOAD [0]
MUL R0
COPY R0 R1
LOAD [2]
MUL R0
ADD R1
PRINT
HALT
Ajouter les entrées à la file: Aucune
Initialiser la mémoire: 0: 1, 1: 2, 2: 3, 3: 4
2. Construire et vérifier
Quatre valeurs de travaux sont préparées en mémoire 0 à 3. Le traitement pair calcule valeur[0]² + valeur[2]² ; le traitement impair calcule valeur[1]² + valeur[3]². Appelez les deux. Affichez le total pair, le total impair et le total combiné, dans cet ordre.
Types d’instructions requis: CALL, MUL, LOAD, ADD
Programme de départ
CALL evenWorker
PRINT
CALL oddWorker
PRINT
LOAD R1
ADD R2
PRINT
HALT
evenWorker:
#
RETURN
oddWorker:
#
RETURN
Votre programme et vos notes
3. Expliquer la machine
Calculer successivement les totaux de deux traitements prouve-t-il une exécution parallèle ?
27. Interruptions et gestionnaires
Traitez un événement et restaurez la valeur du programme interrompu.
Ouvrir cette leçon →
1. Prévoir et tracer
Avant d’exécuter le programme d’essai, prévoyez sa sortie et tracez les trois premières instructions exécutées. Suivez les registres, les indicateurs ou la mémoire pertinents, selon le besoin. Avancez ensuite pas à pas pour comparer.
STORE 4 240
LOAD 17
CALL handler
PRINT
LOAD [241]
PRINT
HALT
handler: PUSH
LOAD [240]
ADD 1
STORE 241
POP
RETURN
Ajouter les entrées à la file: Aucune
Initialiser la mémoire: Tous les octets sont initialement nuls
2. Construire et vérifier
Lisez un entier du programme principal, puis un octet d’événement. Enregistrez l’événement à l’adresse 240. Appelez un gestionnaire qui écrit événement + 1 dans l’octet mémoire 241 en préservant R0 avec PUSH et POP. Affichez la valeur principale restaurée, puis le résultat enregistré de l’événement.
Types d’instructions requis: INPUT, PUSH, POP, CALL, STORE
Programme de départ
INPUT
COPY R0 R1
INPUT
STORE 240
LOAD R1
CALL handler
PRINT
LOAD [241]
PRINT
HALT
handler:
#
RETURN
Votre programme et vos notes
3. Expliquer la machine
Que doit restaurer un gestionnaire avant la reprise du programme principal ?