Pouvez-vous exécuter un processeur sans classe x86?


9

Les processeurs x86 modernes ont au moins 512 Ko de cache L2. Il existe des applications qui s'intégreraient entièrement dans cette quantité de mémoire. Pouvez-vous exécuter ces puces sans RAM attachée? Dans l'affirmative, existe-t-il un moyen de le faire qui élimine la pénalité de temps de réécriture lorsque le processeur tente de maintenir la cohérence de la RAM?

Je n'ai pas d'application spécifique en tête, c'est juste une simple curiosité. Je suis certain qu'il existe quelque part une application de niche où cela serait utile.

Réponses:


12

Oui, vous pouvez. En simulant des lectures à partir d'emplacements de mémoire physique consécutifs (inexistants), vous définissez les balises dans le cache. Ensuite, vous désactivez le remplissage supplémentaire des lignes de cache et entrez l'écriture différée, limitant ainsi les lectures / écritures au cache et il se comportera comme une RAM normale.

Certains des projets de remplacement du bios le font car vous pouvez alors dépenser beaucoup plus de code sur la configuration du chipset et du contrôleur de mémoire du chipset, vous pouvez donc l'écrire en C par exemple.

Cette pratique est largement utilisée pour les processeurs de classe embarquée ainsi que pour la gestion des chargeurs de démarrage. Les méthodes pour transformer le cache en mode RAM varient un peu.

Pour une brève introduction de bas niveau, vous pouvez consulter cette présentation.

Notez que, comme d'autres l'ont souligné, vous devez toujours charger le code de démarrage de quelque part, évidemment.


En fait, je pense que presque tous les BIOS modernes l'utilisent et à peu près tous les processeurs x86 modernes ont un support officiel pour cette raison.
Yuhong Bao

7

Lorsque le CPU sort de la réinitialisation, le cache est désactivé. Le BIOS est ce qui initialement configure et vide le cache. Donc non, vous ne pouvez pas l'exécuter sans RAM car il n'y a pas de RAM pour démarrer la chose en premier lieu.


1
Les premières instructions de la ROM n'ont-elles pas pu initialiser et activer le cache sans utiliser de RAM?
Mark Ransom

1
@Mark Ransom Les processeurs Intel modernes (et de nombreux autres processeurs) utilisent Serial Flash pour stocker le BIOS. Mais il ne peut pas exécuter de code à partir d'un flash série. Au lieu de cela, le CPU copie ce flash série dans la RAM, puis l'exécute.

Hah, mon ignorance montre - vous pouvez voir combien d'années cela fait depuis que j'ai fait la conception matérielle. Donc, le CPU copie automatiquement le flash avant l'exécution de la première instruction? Ce serait un vilain problème de poulet / œuf à surmonter.
Mark Ransom

@David À proprement parler, ce n'est pas un flash «série» mais un «Firmware Hub». Cela diffère de «série» en ce qu'il transfère 4 bits à la fois au lieu de 1.
Majenko

1
@Mark Ransom Il existe de nombreux CPU / MCU / DSP qui démarrent sur une liaison série (Flash série, RS-232, SPI, etc.). Ils accomplissent tous cela en ayant une petite ROM à l'intérieur du CPU à partir duquel ils démarrent, et ce code chargera le "vrai" code de n'importe où. L'exécution d'un système sans RAM pourrait, en théorie, être possible en demandant à Intel de modifier ce code pour utiliser le cache au lieu de la RAM externe. Mais je doute qu'Intel le fasse.

3

Je ne sais pas à quel point c'est précis, mais voici mes pensées:

Je ne pense pas qu'il existe un moyen d'obtenir un accès programmatique au cache. Vous ne pouvez pas garantir d'une instruction à l'autre ce qui serait dans le cache et où il se trouverait, vous ne pouvez donc pas l'utiliser de manière fiable comme RAM même si vous pouviez y accéder directement.

Vous pouvez exécuter un x86 sans RAM, mais vous ne pourrez pas le faire très utile. Vous seriez limité à utiliser uniquement les registres internes pour le stockage des données.


2
Les protocoles de remplissage et de vidage de la cacheline sont parfaitement documentés et configurables dans la plupart des processeurs, y compris le x86. Le contenu de Cacheline n'est pas vidé de manière aléatoire entre les instructions. Voir ma réponse sur la façon dont vous le configurez généralement pour se comporter comme une RAM linéaire.
Bjorn Wesen

J'ai écrit un utilitaire de chargement hexadécimal pour un clone 80x86 qui fonctionnerait correctement sans RAM; IIRC, j'ai implémenté une pile d'appels à un niveau utilisant SP pour conserver l'adresse de retour. Étant donné que la ROM était sur le même bus que la RAM, il n'était pas très probable qu'il y ait un problème qui laisserait la ROM fonctionner lorsque la RAM ne le ferait pas, mais dans ce cas, le chargeur pourrait diagnostiquer le problème. Sur certains autres micros avec des bus de code externes mais une petite quantité d'espace de code interne, pouvoir exécuter du code sur un système avec un bus cassé était un outil de diagnostic utile.
supercat

@Je peux me tromper, mais la RAM n'est-elle pas pour le code binaire et pour la lecture et l'écriture par le processeur?
Victor Mehta
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.