Un processeur peut-il fonctionner avec uniquement une alimentation et une ROM, en utilisant uniquement le cache interne en tant que RAM?

61

Un processeur (tel que les processeurs Intel i3 / i5 / i7 / Xeon) doté d'une mémoire cache sur puce intégrée peut-il l'utiliser comme seule RAM fonctionnelle, sans aucune banque de mémoire externe connectée?

Ou doit- il y avoir de la RAM externe, et le cache ne peut pas être utilisé seul?

Les processeurs modernes de bureau / serveur ont souvent plus de RAM en cache interne que la plupart des ordinateurs des années 1990, alors il devrait y en avoir suffisamment pour exécuter du code simple.

Les processeurs antérieurs à la mise en cache, tels que le 6502, ne pourraient rien faire, car la RAM interne du processeur ne représentait que quelques octets pour le compteur d'adresses et les accumulateurs.

Il ne s’agit pas d’exécuter un système d’exploitation moderne, mais un simple code programmé dans une ROM personnalisée ou saisi manuellement avec un clavier hexadécimal.

Dale Mahalko
la source
1
Cela dépend entièrement du processeur et de ce que vous entendez par "cache", car certains processeurs ont leur RAM intégrée et ne nécessitent pas de puces externes.
PlasmaHH
42
En gros, si vous incluez une mémoire adressable dans le processeur, vous construisez ce que nous appelons un microcontrôleur. Ceux-ci existent.
Marcus Müller
1
Qui a dit que vous aviez besoin de RAM?
Chris Stratton
1
Cela dépend de la façon dont vous définissez "fonction". Je parie qu'un i7 est parfaitement capable de produire de la chaleur avec seulement une batterie connectée.
Dmitry Grigoryev
2
Il existe un certain nombre de choses que vous pouvez faire avec seulement quelques registres et sans RAM supplémentaire. Par exemple, un générateur de fonction.
David Schwartz

Réponses:

67

Voir ce compte-rendu extrêmement détaillé de la séquence de démarrage du PC: http://www.drdobbs.com/parallel/booting-an-intel-architecture-system-par/232300699?pgno=2

Comme aucune DRAM n'est disponible à ce stade, le code fonctionne initialement dans un environnement sans pile. La plupart des processeurs modernes ont un cache interne qui peut être configuré en tant que RAM pour fournir une pile de logiciels. Les développeurs doivent écrire un code extrêmement serré lorsqu'ils utilisent cette fonctionnalité cache-as-RAM car une expulsion serait inacceptable pour le système à ce stade de la séquence de démarrage. il n'y a pas de mémoire pour maintenir la cohérence. C'est pourquoi les processeurs fonctionnent en "mode sans expiration" (NEM) à ce stade du processus de démarrage, lorsqu'ils fonctionnent en mode cache-RAM. Dans NEM, un manque de ligne de cache dans le processeur ne provoquera pas d'expulsion. Développer du code avec une pile logicielle disponible est beaucoup plus facile et le code d'initialisation effectue souvent la configuration minimale pour utiliser une pile même avant l'initialisation de la DRAM.

Vous pouvez observer cela en exécutant un PC sans RAM: il émettra une série de bips. Le programme qui les lit est exécuté à partir de la ROM flash du BIOS.

J'ai également vu ce comportement sur certains processeurs ARM. Il y aura des registres de configuration dans le SoC qui vous permettront d’utiliser le cache en tant que RAM au début de la séquence de démarrage, afin d’exécuter un programme qui trouve, énumère et configure la DRAM.

pjc50
la source
1
Continuons cette discussion sur le chat .
vaxquis
2
Plus de détails sur le fonctionnement du mode "cache-as-ram" (CAR) de x86 , dans une réponse l'utilisant comme cas d'utilisation INVD(lorsque vous quittez le mode CAR, invalidez le cache au lieu d'avoir des données inutiles écrites en mémoire, éventuellement quelque chose de précieux).
Peter Cordes
Quel est le problème avec l'expulsion lorsque DRAM n'est pas disponible? Le problème n'est-il pas de lire plutôt que d' écrire dans la RAM?
Mehrdad
14

Généralement, la mémoire cache n'est pas adressable. Un programme ne peut pas stocker ou récupérer des données intentionnellement à partir de celui-ci.

Lior Bilia
la source
2
+1 C'est une réponse très astucieuse. Les lignes de cache sont chargées et retirées à volonté des accès adressables de la mémoire principale, de manière presque aléatoire.
Ale..chenski
17
Eh oui, c'est pourquoi il nécessite un mode spécial (comme dans la réponse de pjc), ou une sorte de supercherie spéciale. Une autre option (outre la réponse acceptée) pourrait être de faire croire au système qu’il dispose d’une mémoire vive dynamique (DRAM), mais les écritures réelles mémorisent simplement les données et les lectures produisent des zéros (ou les données réelles d’une mémoire ROM pour une région d’adresses). Tant que toutes les charges sont mises en cache, le système se comportera correctement. IDK assez sur le démarrage de x86 pour savoir s’il est possible de passer en mode long 64 bits sans avoir besoin de véritables vidages en mémoire cache.
Peter Cordes
3
Cependant, les processeurs Skylake dotés du cache eDRAM intégré au package l’utilisent comme cache côté mémoire (entre le contrôleur de mémoire et tout le reste, contrairement à Broadwell). stocke dans des régions de mémoire "non-cachables" (qui contournent L1 / L2 / L3).
Peter Cordes
3
@PeterCordes Cependant, la réponse n'est pas "non" simplement parce qu'un mode spécial est nécessaire - la question est alors de savoir si le mode spécial existe.
user253751
1
La question qui se pose est la suivante: que se passera-t-il si vous utilisez le cache quand même et assurez-vous qu'il ne manque jamais ou est vidé - il devient adressable dès que quelque chose est écrit à une adresse dans une RAM inexistante, non? L'écriture proprement dite est abandonnée sur le sol, mais la lecture est-elle servie depuis le cache quand même?
rackandboneman
9

Bien que cela ne concerne pas directement les familles de processeurs spécifiées dans la question, le schéma ci-dessous fonctionne avec les processeurs x86 antérieurs. Il est donc possible de fonctionner sans RAM ni cache, bien que cette approche nécessite des compétences de programmation créatives.

Dans les années 1980, je suis tombé sur un modèle de récepteur radio qui décodait les signaux horaires MSF diffusés au Royaume-Uni. Cette conception utilisait un processeur Z80 et ne disposait que d’une ROM pour le stockage du programme. L'ensemble du traitement et du stockage des données a été effectué à l'aide des registres internes du processeur. Cela signifiait évidemment qu'il ne pouvait y avoir aucun appel de sous-programme car il y avait de la mémoire disponible pour contenir la pile.

À l'époque, le coût de la RAM était élevé et, s'agissant d'un projet de loisir, il était important de réduire les coûts, en dehors du fait qu'il s'agissait d'un exercice académique intéressant. C'était aussi avant l'époque des microcontrôleurs largement disponibles (un 8751 avec un eprom coûtant plus de 100 £ IIRC).

uɐɪ
la source
Se limiter aux données pouvant être conservées dans des registres limite réellement les fonctions utiles que vous pouvez effectuer. Je pense que la question portait plus sur la mémoire cache dans les processeurs modernes.
Mark Ransom
Bien entendu, il va sans dire que le fait de ne pas utiliser de mémoire RAM limite les fonctionnalités possibles. L’application citée montre tout ce qu’il est possible de faire avec des ressources de stockage de données très limitées, un frontal radio et un écran LCD.
Uu
-3

Généralement, un processeur nécessite une horloge externe. Mais avec ça, oui ça peut.

John Hamilton
la source
1
Il serait approprié d’expliquer pourquoi et de répondre de manière approfondie à la question des utilisateurs. Cette réponse est du côté faible.
Tension Spike