Ordonnancement, cœurs et événements · Leçon 25 sur 30 · environ 15 minutes
Ordonnancement coopératif
Faites alterner des tâches et distinguez la politique d’exécution des instructions du processeur.
01 / Expliquer
Comprendre l’idée
Un processeur exécute une instruction à la fois. Un ordonnanceur choisit la tâche suivante. Les tâches coopératives cèdent volontairement le contrôle ; l’ordonnancement préemptif donne à chaque tâche un quantum borné d’instructions. Le laboratoire des systèmes montre un ordonnancement circulaire avec un quantum réglable et des événements de tâches explicites.
Notre défi de machine virtuelle est un petit répartiteur coopératif : la tâche A avance son compteur, puis la tâche B avance le sien. CALL et RETURN expriment cette alternance. SLEEP enregistre un délai demandé ; les vérifications synchrones n’attendent pas, tandis que le laboratoire temporisé respecte ce délai.
02 / Essayer
Observer le fonctionnement
L’ordre de sortie est 1 puis 101. Exécutez à une vitesse visible pour observer le délai ; comparez les tailles de quantum dans le laboratoire des systèmes.
LOAD 1
CALL taskA
CALL taskB
HALT
taskA: PRINT
SLEEP 500
RETURN
taskB: LOAD 101
PRINT
RETURNAvancez pas à pas pour suivre une instruction à la fois. Vous pouvez modifier l’exemple et le rejouer.
03 / Défi
Le faire fonctionner
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.
Le vérificateur exécute votre programme actuel de l’éditeur sur une nouvelle machine pour chacun des 3 cas de test. Il fournit lui-même les entrées et la mémoire préparée ; la sortie et la mémoire actuelles du laboratoire ne décident pas du résultat.
INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA:
#
RETURN
taskB:
#
RETURNBesoin d’un indice ?
Chaque tâche utilise un registre différent et doit revenir au répartiteur avec RETURN.
Afficher une solution expliquée
Lisez le programme, prévoyez l’effet de chaque instruction, puis suivez-le pas à pas dans le laboratoire.
INPUT
COPY R0 R3
LOAD 0 R1
LOAD 100 R2
LOOP R3
CALL taskA
CALL taskB
RETURN
HALT
taskA: LOAD R1
ADD 1
COPY R0 R1
PRINT
SLEEP 0
RETURN
taskB: LOAD R2
ADD 1
COPY R0 R2
PRINT
SLEEP 0
RETURNLaboratoire du processeur en émojis
Programme en émojis
Saisissez LOAD, ADD ou un autre nom d’instruction, puis Espace pour insérer l’émoji. Ctrl/⌘ + Entrée exécute ou suspend ; Échap suspend ; Ctrl/⌘ + ] indente. Tab déplace le focus. Les étiquettes utilisent deux-points. Les sauts utilisent des adresses d’instructions à partir de zéro.
Carte des instructions et points d’arrêt (0)
Un point d’arrêt suspend avant son instruction. Exécuter franchit une fois le point d’arrêt actuel ; Pas à pas exécute directement son instruction. Modifier le code efface les anciens points d’arrêt et l’état machine.
Registres du processeur
- R0
- 0
- R1
- 0
- R2
- 0
- R3
- 0
- R4
- 0
- R5
- 0
- R6
- 0
- R7
- 0
Piles et cadres de boucle
SP = 255 − profondeur des données − profondeur des appels. La pile est distincte de la mémoire.
Pile de données (bas → haut)
Vide
Adresses de retour des appels (bas → haut)
Vide
Cadres de boucle
Vide
Sorties et entrées
Exécutez une instruction PRINT pour voir une sortie.
Entrées en attente: Vide
Mémoire · 256 octets · 0 non nuls
Chaque case indique adresse:valeur. R = lecture à ce pas ; W = écriture à ce pas. Sélectionnez une case pour l’examiner ou l’initialiser avant l’exécution. Les flèches déplacent la sélection, Début/Fin visent les extrémités de la ligne et Ctrl/⌘ + Début/Fin celles de toute la mémoire.
Trace d’exécution · 0 entrées
Les entrées récentes sont ci-dessous. Examinez n’importe quel indice à partir de zéro pour voir les états complets et indépendants avant et après.
Vérifier votre défi
Vous pouvez lancer cette vérification à tout moment. Tous les cas doivent réussir pour enregistrer la leçon comme terminée.
La progression utilise seulement localStorage. Elle reste dans ce navigateur et n’est jamais envoyée à un serveur.