Construire de petits programmes · Leçon 30 sur 30 · environ 20 minutes
Votre propre mini système d’exploitation
Répartissez des travaux en attente vers des services réutilisables et enregistrez les résultats.
01 / Expliquer
Comprendre l’idée
Un système d’exploitation coordonne les ressources et fournit des services aux programmes. Notre projet final est un répartiteur volontairement petit, pas un système moderne complet : il consomme une file de travaux, choisit un service, l’appelle et enregistre les résultats.
Chaque travail contient un code d’opération et une valeur. Le code 0 double, le code 1 calcule le carré et le code 2 ajoute un. La sortie conserve le résultat entier complet, tandis que le journal mémoire en conserve un octet. Le laboratoire des systèmes permet d’examiner l’ordonnancement, l’état distinct de chaque cœur et la gestion des événements autour de ces mêmes idées.
02 / Essayer
Observer le fonctionnement
Les deux services donnent 8 et 9. Le défi ajoute une file, des branchements de répartition et un troisième service.
LOAD 4
CALL double
STORE 64
PRINT
LOAD 3
CALL square
STORE 65
PRINT
HALT
double: MUL 2
RETURN
square: MUL R0
RETURNAvancez pas à pas pour suivre une instruction à la fois. Vous pouvez modifier l’exemple et le rejouer.
03 / Défi
Le faire fonctionner
Lisez N (0 à 3), puis N paires (opération, valeur). L’opération 0 double, 1 calcule le carré et 2 ajoute un. Répartissez le travail avec des sous-programmes appelés par CALL. Affichez chaque résultat complet et enregistrez son octet aux adresses 64, 65, … dans l’ordre des travaux.
Le vérificateur exécute votre programme actuel de l’éditeur sur une nouvelle machine pour chacun des 4 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 64 R2
LOOP R3
INPUT
COPY R0 R4
INPUT
COPY R0 R1
#
RETURN
HALT
double: MUL 2
RETURN
square: MUL R0
RETURN
increment: ADD 1
RETURNBesoin d’un indice ?
Sauvegardez la valeur du travail avant de charger son code d’opération pour CMP. Restaurez la valeur juste avant d’appeler le service choisi.
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 64 R2
LOOP R3
INPUT
COPY R0 R4
INPUT
COPY R0 R1
LOAD R4
CMP 0
JUMP_IF_ZERO doubleJob
CMP 1
JUMP_IF_ZERO squareJob
LOAD R1
CALL increment
JUMP finish
doubleJob: LOAD R1
CALL double
JUMP finish
squareJob: LOAD R1
CALL square
finish: STORE R2
PRINT
LOAD R2
ADD 1
COPY R0 R2
RETURN
HALT
double: MUL 2
RETURN
square: MUL R0
RETURN
increment: ADD 1
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.