Lorsque le code machine est réellement exécuté par le matériel et le CPU, à quoi ressemble-t-il?
Cela ressemblerait-il à du binaire, comme dans les instructions représentées par des uns et des zéros, ou serait-ce quelque chose composé de chiffres hexadécimaux où les opcodes sont des octets présentés comme des nombres hexadécimaux qui peuvent être décomposés en nombres binaires, comme le bytecode?
computer-architecture
cpu
Tim à peine
la source
la source
Réponses:
La meilleure réponse que je puisse donner est qu'elle ne "ressemble" vraiment à rien. L'instruction en cours d'exécution par la CPU est représentée par une série de fils, dont certains ont une haute tension, dont certains ont une basse tension.
Vous pouvez interpréter les hautes et basses tensions comme des zéros et des uns, mais vous pouvez également interpréter des groupes de hautes et basses tensions comme des chiffres hexadécimaux ou comme une instruction d'assemblage comme
ADD $0 $1
(ce qui est le plus proche de la façon dont le CPU l'interprète). Ces chiffres et ces mnémoniques eux-mêmes sont des commodités pour les humains à lire; en interne, ce ne sont que des tensions sur les fils.Parmi ces options, le binaire est "le plus proche du métal", dans la mesure où les zéros et les uns correspondent directement aux tensions hautes et basses sur les fils. Mais aucun des autres n'est incorrect, et ils sont souvent plus utiles: il y a une raison pour laquelle les gens regardent les vidages hexadécimaux d'exécutables, mais presque jamais les vidages binaires.
la source
"Ressembler" implique une métaphore. Si nous prenons "à quoi cela ressemblera" littéralement, cela ressemblera à un morceau de silicium gravé de fantaisie assis sur sa carte mère. Le but était clairement la métaphore. Pour construire la métaphore, nous devons regarder ce que c'est vraiment en premier. Ensuite, nous pouvons construire une métaphore acceptable. C'est un peu long, mais heureusement, cela se termine par une métaphore vidéo pour vous.
Le code machine est en fait stocké en mémoire sous forme de bits. Les puces mémoire sont généralement des DRAM , qui stockent ces bits sous forme de tensions à travers un condensateur et des électrons. Les deux sont connectés - il est difficile de parler des tensions sans électrons. Parfois, c'est pratique de parler de l'un ou de l'autre, mais comprenez que là où l'un va, l'autre suit.
L'aventure du code machine commence par une «récupération». Un modèle particulier de tensions est appliqué aux fils de la puce RAM indiquant que cet ensemble particulier de bits doit être envoyé à la CPU. Pourquoi? Je ne sais pas, je m'en fiche. Généralement, ce signal est envoyé parce que le processeur a terminé la dernière instruction et en demande une nouvelle comme réponse instinctive, comme un chien qui demande une deuxième gâterie après que vous lui ayez donné la première. Ce processus commence par un coup de pied primordial dans le pantalon provoqué par une instabilité naturelle dans le CPU. Lorsqu'une alimentation applique une tension constante à la puce, les augmentations de tension conduisent finalement le CPU à mettre les bonnes tensions sur les puces RAM pour aller chercher les premières instructions (je fais un peu de la main sur la couche BIOS, car ce n'est pas important à l'histoire. Cherchez-le).
La mémoire moderne diffuse des données en parallèle. Cela signifie que les bits qui composent le code machine sont divisés en "voies" (32 ou 64 sont communes), ce qui est la façon logique de dire les fils 32/64 de la RAM à la CPU. La tension sur ces lignes est augmentée et abaissée selon les besoins pour la transmettre au CPU.
Une fois dans le CPU, il peut faire son travail. C'est le domaine de la microarchitecture , et cela peut se compliquer car il s'agit littéralement d'une industrie d'un milliard de dollars. Ces tensions affectent les transistors, qui affectent d'autres tensions, d'une manière que nous pourrions décrire comme «l'ajout de bits» ou la «multiplication». Ce ne sont vraiment que des tensions qui représentent ces bits, de la même manière que nous pourrions griffonner la chaîne de 5 caractères "2 + 2 = 4" sur un morceau de papier et dire que nous avons fait des mathématiques. Le crayon graphite n'est pas le numéro deux. C'est juste la représentation physique que nous utilisons pour ce nombre.
C'est donc ce que fait le vrai système, à un niveau extrêmement élevé. J'ai bien sauté ... à peu près tout ... mais c'est assez décent pour pouvoir revenir à votre vraie question. À quoi cela ressemblerait-il [métaphoriquement]?
En l'occurrence, je pense que Martin Molin a peut-être construit la meilleure métaphore, avec sa machine à marbre . Le code machine est codé (à la main) sur certaines bandes Lego Technics au milieu sous forme de chevilles, plutôt que de tensions sur un condensateur. Cela ressemble plus à EPROM qu'à DRAM, mais les deux contiennent des données. Les billes sont comme les électrons, étant déplacées par des tensions (ou gravité, dans le cas des billes). Et lorsque les électrons se déplacent, ils appliquent une force aux portes qui font les choses.
Sa machine est simple, comparée à un CPU moderne, mais ce n'est pas si mal, en ce qui concerne les métaphores. Et c'est accrocheur!
la source
Découvrez cette vidéo , en particulier de 1h00 à 1h17. C'est exactement à quoi cela ressemble quand un programme s'exécute sur un ordinateur. Les deux rangées de lumières indiquent le contenu actuel du registre d'adresses et du registre de données. Le PDP-11 n'a pas de registre d'instructions, mais s'il y en avait un et qu'il y avait des lumières sur le devant pour montrer son contenu, il aurait à peu près la même apparence. 16 lumières - certaines allumées, d'autres éteintes.
Si vous avez vraiment aimé les lumières clignotantes, vous pourriez avoir plus de lumières pour montrer le contenu actuel des six registres, le pointeur de pile, le compteur de programme ... pour 32768 lumières supplémentaires, vous pourriez avoir une lumière pour chaque bit du cache. Vous pourriez même avoir une lumière pour chaque morceau de mémoire ... mais ce serait vraiment beaucoup de lumières.
Il s'agit d'un PDP11-70 qui fonctionne à 15,2 MHz et chaque instruction prend environ 1,5 microsecondes à exécuter. L'œil humain peut détecter des changements jusqu'à 1/10 de seconde, et pendant ce temps, le PDP-11 peut exécuter 60 000 instructions. Fondamentalement, tout est flou.
la source
Les concepteurs de matériel implémentant et testant (et testant et testant) le processeur utilisent réellement des modèles visuels pour voir ce que font leurs conceptions. La plupart (sinon la totalité) des outils de simulation HDL produisent des vues d'onde de tous les registres et fils pour permettre un débogage facile. La capture d'écran ci-dessous (prise à partir d' ici ) montre ces ondes du simulateur VCS pour un processeur RISC-V exécutant quelques instructions.
Il s'agit d'un exemple assez simple qui montre un petit sous-ensemble de la logique impliquée dans une conception de processeur complète. Vous pouvez ouvrir ces vues pour l'ensemble du processeur et regarder les données se propager à travers la logique. Si vous voulez voir le code machine s'exécuter, comme vous l'avez mentionné, vous pouvez regarder les vagues du registre d'instructions ou le bus que le processeur utilise pour lire les instructions en mémoire. La plupart des visualiseurs de vagues ont des options de visualisation flexibles pour les bus et les registres qui vous permettent d'afficher leurs valeurs sous forme d'étiquettes binaires, hexadécimales, octales et même enum. Dans certains, vous pouvez même définir vos propres fonctions pour mapper les modèles de bits sur les valeurs affichées.
Il convient de noter qu'il ne s'agit que d'une représentation d'une simulation du processeur. Il n'y a aucun moyen d'obtenir ce genre de vues pour une puce de processeur déjà fabriquée.
la source
Imaginez un aveugle trébuchant dans une ruelle en construction. Partout où il y a des trous et des fissures, il devrait donc naturellement tomber. Pas cet aveugle, car il a un rouleau de papier avec des instructions, quand attendre, quand se déplacer, où se déplacer et comment manipuler son environnement pour atteindre la fin de la route. Voilà ce qu'est l'assemblage, une liste d'instructions aveuglément suivies - elles n'ont de sens que pour cette ruelle et pour cet aveugle. Vous pouvez en théorie même reconstruire un modèle 3D à partir des seules instructions (décompilation).
A chaque changement de plateforme, il est nécessaire de recompiler les instructions pour l'aveugle. Vous devez connaître le matériel (la disposition du chantier de construction), les instructions d'intention dactylographiées (code de haut niveau) comme "Je veux que vous sautiez par-dessus toutes les clôtures que vous rencontrez d'affilée jusqu'à ce que vous ayez 12 clôtures derrière vous" et le capacités des aveugles (CPU). A-t-il une mémoire à court terme, la capacité de faire plusieurs choses à la fois?
Prendre toutes ces informations et forger un scroll d'instructions cohérent est le travail du compilateur.
Puis-je décrire à quoi ressemble un programme? Non. Mais pouvons-nous décrire ce que cela ferait de l'exécuter? Oui, cela ressemblerait à un saut et à une course, comme des miroirs sans voir quelque chose, suivant une liste précise d'instructions, où que cela vous mène.
la source