Est-ce que chaque système d'exploitation a besoin de RAM?

76

Existe-t-il un système d'exploitation qui peut être utilisé sans RAM, en particulier le type pour lequel je peux créer une clé USB amorçable et l'utiliser dans l'ordinateur? Cela devient délicat, car le démarrage consiste essentiellement à charger le système d'exploitation dans la RAM.

Remarque: je voulais à l'origine connaître le système d'exploitation sans RAM pour vérifier si mon ordinateur portable (qui ne démarre pas mais affiche un écran vide) a mal tourné, mais j'aime bien la façon dont cette question a fait boule de neige.

Suvarna Pattayil
la source
23
Je ne sais pas si un processeur peut même fonctionner sans RAM, cela peut être une bonne question pour Computer Science.SE . Ce que je sais avec certitude, c'est que vous n'irez nulle part si vous n'arrivez même pas à dépasser le BIOS.
12
@ AndréDaniel un processeur possède un cache qui, du point de vue du CS, est également une mémoire vive. Donc, en théorie, vous n'avez pas besoin de modules de RAM supplémentaires. Mais dans la pratique, je doute que l'architecture x86 le permette.
Philipp
30
Tous ces arguments concernant l’utilisation du cache du processeur ont une validité douteuse, car, du moins sur x86, le cache n’est pas une mémoire à laquelle vous pouvez accéder directement. Votre code fait toujours référence à la RAM, mais le processeur gère automatiquement ses caches afin de ne pas avoir à récupérer les données dans la RAM pour les données les plus fréquemment utilisées. Mais encore une fois, il n'y a pas d'instruction d'assemblage pour dire "stocker ceci dans le cache" "écrire ceci dans le cache", il y a des registres et il y a une mémoire principale (avec tous ses modes d'accès étranges), un point.
Matteo Italia
3
(OTOH, vous pourriez en théorie exploiter d'autres mémoires RAM (par exemple, des vidéos) ou des périphériques mappés dans l'espace d'adressage physique)
Matteo Italia
13
Les processeurs x86 modernes vous permettent de placer le cache sur matrice en mode "Cache as RAM" (mémoire cache) - je pense que certains MSR doivent être configurés pour le faire. Cela peut également s'appliquer à certains processeurs ARM. La mémoire cache sur les processeurs modernes est en quantité supérieure à celle que vos premiers PC pourraient avoir comme mémoire maximale. Sur un PC, le micrologiciel ne démarre toujours pas sans RAM présente, cependant. Vous aurez besoin d'un firmware personnalisé ou de quelque chose qui ne soit pas une plate-forme PC.
LawrenceC

Réponses:

96

Est-ce que chaque OS a besoin de RAM?
Pour le matériel compatible avec les PC IBM, une étape obligatoire du processus POST du BIOS consiste à vérifier s’il existe une mémoire RAM dans laquelle charger le BIOS. En option, les contrôles de processus POST de votre RAM fonctionnent correctement. Une fois le processus POST terminé, le BIOS charge le chargeur de démarrage dans la RAM et lui donne le contrôle. La réponse à votre question ("Chaque système d'exploitation a-t-il besoin de RAM?" Est donc la suivante: oui, tout matériel compatible avec les ordinateurs IBM nécessite au moins un peu de RAM en fonctionnement pour démarrer. Cela est vrai pour tout système d'exploitation qui s'exécute sur ce matériel.

Notez que dans la question initiale du PO, il était fait référence à un "ordinateur portable", ce que j’ai interprété comme étant: du matériel compatible IBM PC. Pour le reste de cette réponse, nous supposerons le matériel compatible IBM PC.

Un système d'exploitation peut-il démarrer avec une RAM défectueuse?
Si votre RAM est défectueuse (et pas entièrement absente / cassée) ou si vous pouvez (partiellement) la remplacer, vous pourrez peut-être démarrer à l'aide des correctifs de noyau BadRAM of BadMEM . Cela vous oblige à recompiler le noyau (cela semble plus facile que si vous le faisiez pour la première fois) et vous pouvez redémarrer et indiquer au noyau où se trouve votre mauvaise mémoire. Une belle explication de l'utilisation de Memtest86 / Memtest86 + , BadRAM / BadMEM peut être trouvée ici .

Un système d'exploitation peut-il démarrer sans RAM et utiliser le cache du processeur en tant que RAM?
Autant que je sache, il n'y a aucun moyen d'utiliser le cache de votre processeur en tant que RAM sans aucune mémoire RAM présente sur votre système (comme suggéré par @philipp et autres) dans les commentaires. S'il y en a, ce serait bien de l'ajouter ici. Le seul document que j'ai pu trouver à ce sujet est ce document qui indique: "Utilisation du cache du processeur en tant que RAM jusqu'à ce que la RAM soit initialisée". Pas sûr si (et comment) cela fonctionnera sans RAM. Autant que je sache, il n'y a pas de code fonctionnel qui démarre un système d'exploitation sur un PC compatible IBM. Toute référence à des preuves de concept, un code de travail ou quoi que ce soit est la bienvenue dans les commentaires et je l’ajouterai à cette réponse.

Puis-je accéder au BIOS?
La question de l'OP est un peu vague si l'ordinateur portable est capable de passer le POST du BIOS. Comme @Tonny le souligne, aucun système d'exploitation ne vous aidera à " accéder au BIOS ". Vous entrez dans le BIOS à l’aide des touches F1ou F2ou F10ou DELou ESC, selon votre marque de BIOS.

Comment récupérer des données de l'ordinateur portable sans RAM?
En ce qui concerne l’objectif de votre question: pourquoi avez-vous besoin d’un accès à votre ordinateur portable? Probablement parce qu'il y a encore des données sur le disque dur que vous voulez récupérer? Dans ce cas, il est beaucoup plus facile de retirer le disque dur (voir le manuel) et de le connecter à un périphérique de stockage externe ou directement à un PC. Voici un bon guide pour faire exactement cela.

agtoever
la source
3
En pratique, il est possible de faire fonctionner une machine avec une RAM quelque peu défectueuse (par exemple, une seule banque ne fonctionne pas correctement). Si le BIOS ne le remarque pas (ou, le cas échéant, il peut exister le remplacement habituel de F1), vous pouvez toujours exécuter un système d'exploitation comme Linux avec le correctif BadMEM / BadRAM, qui indique au noyau d'éviter les blocs de mémoire spécifiés.
Matteo Italia
5
@VusP: pour vérifier votre RAM, utilisez un livecd / -usb avec Memtest86 / Memtest86 +, ignorez les tests de RAM dans votre BIOS et exécutez le memtest à partir du livecd / -usb.
agtoever
4
Qui a dit que tester la RAM au démarrage était " obligatoire "? C'était courant lorsque les machines ne disposaient que de quelques Mo ou moins, mais elles sont rapidement devenues facultatives à mesure que les tailles augmentaient et que le temps devenait prohibitif.
Andrew Medico
3
@agtoever: Hein? L'astuce cache-as-RAM ne s'arrête pas brusquement lorsque la RAM est initialisée. C'est juste qu'à ce stade, il est insensé d'éviter la RAM, donc personne ne tente de le faire. Mais l’astuce n’a rien à voir avec la non-initialisation de la RAM; c'est juste quand c'est réellement utile.
Mehrdad
3
@ Hi-Angel, il ne peut pas exécuter directement à partir du disque car le processeur ne peut pas accéder directement au contenu du disque. Il doit passer des commandes dans le contrôleur de disque et attendre qu'il transfère des blocs de données du disque à un emplacement quelconque dans la RAM. C'est à partir de là que le processeur peut directement exécuter des instructions.
Psusi
33

C'est possible en théorie , mais ce serait très lent, car il faudrait utiliser le disque pour tout stockage temporaire ne rentrant pas dans les caches du processeur. (Les processeurs ont quelques mégaoctets de cache, car même la RAM est trop lente pour eux. Pensez-y.) Vous auriez donc besoin d'un système d'exploitation plutôt petit.

(Les systèmes intégrés sur puce peuvent exécuter du code à partir de la RAM ou de la mémoire flash interne. Le BIOS du PC pourrait en principe faire de même, mais il ne peut pas exécuter le système d'exploitation dans son intégralité.)

Mais, autre chose, le BIOS s'exécute avant et en dehors de tout système d'exploitation installé, et c'est le BIOS qui vous permet de démarrer à partir d'une clé USB ou autre. Donc, si vous ne pouvez pas accéder au BIOS, aucun autre système d'exploitation au monde ne pourra vous aider.

Grawity
la source
6
Il se peut qu'un processeur puisse utiliser son propre cache au lieu de la RAM. Cela pourrait être une fonctionnalité utile pour les parties du code du BIOS, qui sont exécutées avant le test de la mémoire. Mais faire fonctionner un autre matériel sans RAM peut être délicat. Vous ne pourriez pas utiliser le DMA, de sorte que les E / S de disque doivent être effectuées différemment. J'imagine que le BIOS n'essaierait même pas de charger un système d'exploitation si aucune RAM utilisable n'était trouvée. La taille du cache est cependant moins problématique. Quelques Mo ne sont peut-être pas beaucoup par rapport aux normes modernes, mais un système d'exploitation de l'époque où un Mo de RAM était beaucoup devrait toujours fonctionner sur des ordinateurs modernes.
Kasperd
2
@kasperd Le DEC Alpha a été conçu pour exécuter sa toute première étape d'initialisation à la mise sous tension à partir de la mémoire cache, préchargée à partir d'une "ROM série". En effet, la CPU ne pouvait pas accéder à la RAM, à la ROM conventionnelle ou à toute autre ressource mappée en mémoire (incluant tous les périphériques d'E / S, IIRC) tant que les tables de page n'avaient pas été initialisées.
dimanche
@grawity Qu'en est-il des disques SSD?
TechLife
@ TechLife: toujours plus lent que la RAM de plusieurs ordres que la magnitude. Bien que, je suppose, si vous deviez l'utiliser en tant que RAM ... ce serait simplement appelé RAM, alors toujours non.
Grawity
15

Vous pourriez, moyennant quelques efforts, concevoir un système ne contenant pas de RAM. Chargez votre logiciel à partir de la ROM (ou du stockage) et faites tout dans des registres ou sur le cache. Un tel système aurait une utilisation exceptionnellement étroite et, étant donné les prix actuels de la RAM, un peu inutile. Un ordinateur portable standard ne fonctionnera pas sans une mémoire interne.

Votre vraie question est plus probablement "Comment puis-je obtenir des informations sur un ordinateur qui ne démarre pas" et c'est facile. Démontez-le, retirez le lecteur et connectez-le à un boîtier de lecteur externe.

Notez cependant que tout ordinateur suffisamment ancien pour ne pas disposer de 20 $ de RAM de travail dispose d’un lecteur ATA (standard ATA, et non SATA). Cette interface est presque éteinte aujourd'hui, vous devrez donc également trouver un boîtier de lecteur avec une carte ATA ainsi qu'un adaptateur pleine taille pour ordinateur portable. J'en ai acheté un en 2000 et je conserve quelques vieux boîtiers uniquement à cette fin.

peter
la source
D'accord. Pas de RAM signifie pas de pile, ce qui signifie pas la possibilité d'appeler une routine. Tout code pouvant fonctionner dans cette situation doit être assemblé avec soin à la main.
Loren Pechtel
Vrai. J'ai vu le code qui a fait cela cependant. (J'étais la première partie d'une routine de BIOS avant l'initialisation du contrôleur de mémoire).
Hennes
2
@ LorenPechtel Ce n'est pas tout à fait vrai. La pile peut être (et est souvent) stockée dans une mémoire sur puce.
Reirab
2
@ LorenPechtel pas nécessaire. ARM n'utilise pas stack pour appeler une routine.
dimanche
1
Autant que je sache, ces puces ont une mémoire SRAM interne ... qui compte en tant que RAM.
Domen le
10

Si je lis correctement la question, tout le monde est en train d'aboyer le mauvais arbre.

Il déclare explicitement "pour accéder au BIOS".

Si l'ordinateur portable est si en panne qu'il n'entre même pas dans le BIOS, tout le reste est inutile.

Vous ne pouvez démarrer aucun système d'exploitation sur ce système, quelle que soit la situation de la RAM.

Tonny
la source
8

Votre hypothèse selon laquelle la mémoire est mauvaise est probablement invalide. Si vous n'obtenez aucun bip ni message à l'écran, la cause principale est probablement un processeur en panne (peu probable) ou une carte mère en panne (très probablement). Les cartes mères tombent constamment en panne avec l'âge à cause des joints de soudure à froid, ce qui était courant dans les premiers jours du mouvement ROHS et de la nécessité d'utiliser une soudure sans plomb. Les techniques de fabrication avaient été optimisées pour l'utilisation de soudure à base de plomb et l'industrie a mis du temps à comprendre et à résoudre les problèmes. De nombreux fabricants de composants n'étaient pas très disposés à dépenser de l'argent pour améliorer leurs processus. Après tout, les appareils seraient testés et graveraient parfaitement, mais échoueraient des mois, voire des années plus tard, après l'expiration de la garantie. Ce n’est qu’avec une montagne d’échecs croissante et des retours négatifs intenses des utilisateurs que les fabricants ont commencé à améliorer les choses. Sur un tel ordinateur portable, le coût de la redistribution de la carte mère pour rectifier les joints de soudure à froid est presque certainement prohibitif.

coudre
la source
C'est possible, mais une mauvaise mémoire n'est pas une mauvaise idée non plus. J'ai vu des problèmes de mémoire (et même de mauvais sockets) provoquer un échec de POST à ​​plusieurs reprises auparavant. Bien sûr, la vérification la plus simple de la mémoire consiste généralement à essayer de démarrer avec différents sticks retirés ou de démarrer avec un seul bon stick connu. Si cela résout le problème, il s’agit de la mémoire, des logements de mémoire ou du contrôleur de mémoire.
Reirab
5

La plupart des premiers ordinateurs des années 80 ou à peu près avaient une sorte de système d'exploitation (pilotes de matériel, support IO, chargement de programme, interface de ligne de commande très simple, etc.) dans la puce ROM. Il pourrait en quelque sorte fonctionner même si les puces de RAM étaient inutilisables. Cette fonctionnalité était utilisée dans des versions de contenu ROM spéciales conçues pour exécuter des tests de matériel et pour communiquer principalement par le biais de voyants et de voyants du clavier.

La CPU dispose de plusieurs registres pour mémoriser au moins l'adresse de la commande en cours d'exécution, mais ces registres ne sont généralement pas appelés RAM.

Le code C standard ne peut pas fonctionner dans un système sans RAM car il utilise la mémoire de pile pour allouer des variables et la pile est dans la RAM. Lorsqu'un ordinateur récent démarre, une RAM dynamique normale n'est pas disponible au départ, car le périphérique d'actualisation de la RAM a besoin de la configuration initiale pour fonctionner. Le code d'assemblage s'exécute en premier et effectue l'initialisation de la carte mère. La RAM commence à fonctionner et le code C peut alors s'exécuter.

h22
la source
4
Le dernier paragraphe n'est pas tout à fait vrai. Il n'est pas nécessaire que la pile soit dans une RAM hors puce. Il est en fait assez courant que la pile se trouve dans la mémoire sur puce. Même sur des machines normales, la pile du thread en cours d'exécution sera généralement dans le cache et ne sera transmise à la DRAM que lorsque le planificateur échangera les threads. J'ai écrit du code pour les DSP, cependant, où la pile résidait dans une mémoire directement adressable sur puce et ne touchait jamais la mémoire vive dynamique. Bien entendu, je suppose que vous pourriez soutenir que la mémoire sur puce est techniquement RAM dans ce cas.
Reirab
4
En outre, il n'est pas inhabituel qu'au moins certains des paramètres et des valeurs retournées soient transmis aux fonctions C à l'aide de registres (plutôt que de la pile). De plus, les variables locales sont également stockées dans des registres plutôt que sur la pile par les compilateurs C. Vous pouvez même spécifiquement demander au compilateur de mettre une variable particulière dans un registre en utilisant le mot clé 'register'. Bien sûr, une fois qu'une fonction a besoin de plus de variables locales que vous ne lui enregistrez d'espace, vous devrez passer en mémoire, mais c'est une contrainte matérielle qui s'applique quel que soit le langage de programmation.
Reirab
4

Quand je suis allé à l'université en 1967, le département d'informatique avait un zèbre Stantec . La mémoire consistait en un tambour magnétique de 8192 mots. Il y avait également 12 registres et deux accumulateurs. Vous pourriez considérer cette mémoire vive, mais pas telle que nous la connaissons.

David Marshall
la source
3

Vous aurez besoin d'au moins sur la mémoire cache de la puce pour les registres (essentiellement une très petite quantité de RAM sur la puce) pour que l'unité d'exécution de la CPU puisse fonctionner. Donc, même votre processeur a «RAM».

Aucun OS Von-Neumann n'a été conçu sans l'exigence de mémoire, je crois.

Donc non.

Bonjour
la source
3

Comme toutes les personnes ici présentes, je suis d'accord sur le fait que vous avez besoin de RAM et que vous ne pouvez pas travailler sans elle, mais j'ai également lu ce qui suit:

(Au départ, je voulais charger un système d’exploitation sans RAM pour vérifier si la RAM s’était détériorée, mais j’aime la façon dont cette question a fait boule de neige.)

Cela existe réellement dans le BIOS, il existe une fonction pour vérifier la RAM en profondeur. Lorsque vous démarrez et entrez dans le BIOS, désactivez l'option "Auto-test de mise sous tension rapide" et effectuez une vérification complète de votre RAM. Cette option devrait être située dans les "fonctionnalités avancées du BIOS", quelque chose comme un second choix sur les BIOS AMI.

J'espère que cela vous mettra un peu plus loin. ;-)

Olivier M.
la source
3

Vous n'avez pas besoin de RAM, par exemple, utilisez une machine de Turing .

Une machine de Turing est un dispositif hypothétique qui manipule des symboles sur une bande de ruban conformément à un tableau de règles. Malgré sa simplicité, une machine de Turing peut être adaptée pour simuler la logique de tout algorithme informatique. Elle est particulièrement utile pour expliquer les fonctions d’un processeur dans un ordinateur.

(Je ne considérerais pas une bande comme étant de la RAM.)

Maintenant, vos vraies questions devraient porter sur «utile» et définir ce que vous entendez par «utile» .

Ian Ringrose
la source
3
Au niveau conceptuel d’une machine de Turing, tous les types de stockage de données en lecture-écriture sont essentiellement équivalents: RAM, registres, cache, bande magnétique, disque. La seule différence entre eux est la rapidité d'accès.
Barmar
1
@Barmar RAM signifie mémoire à accès aléatoire. Cela signifie que vous pouvez accéder aux cellules qu'il contient dans n'importe quel ordre. Les cellules d'une bande sur une machine de Turing ne sont accessibles que séquentiellement (dans un sens ou en alternance). Donc, je dirais que la bande sur une machine de Turing est, par définition, pas de la RAM.
kasperd
1
@Barmar C'est incorrect. La définition de RAM ne permet pas les temps de recherche. Par conséquent, la bande d'une MT ne correspond tout simplement pas à la définition de la RAM, car vous ne pouvez pas accéder à des cellules arbitraires sans chercher.
Kasperd
1
@Barmar, la notion de temps d'horloge murale peut ne pas s'appliquer, mais la notion de temps nécessite des opérations de lecture O (n) pour y arriver, certainement.
psusi
1
@Barmar, non, vous ne le faites pas. C'est pourquoi nous utilisons la grande notation "O" pour parler de complexité purement mathématique sans rapport avec le "temps" que peut prendre quelque chose de réel. Le modèle mathématique d'un lecteur de bande dans cette TM est tel qu'il ne peut lire que dans un sens ou l'autre, sans zoom avant ou arrière, peu importe la durée. Par conséquent, si vous avez lu l'octet 1 pour la dernière fois, vous ne pouvez pas lire l'octet 27 sans d'abord lire les 26 octets entre les deux. C'est pourquoi ce n'est pas du bélier. Si vous voulez une mémoire qui peut ignorer ces 26 octets, que cela prenne 0 heure ou 5 minutes, ce serait de la RAM, pas une bande.
psusi
3

Il existe des systèmes d’exploitation spécialisés pour une utilisation intégrée qui fonctionnent entièrement à partir d’une ROM (mémoire à lecture seule). Cependant, pour faire quoi que ce soit d’utile, vous avez généralement besoin d’au moins une petite quantité de RAM. Je n'ai pas vu un PC qui démarrera sans RAM cependant.

En ce qui concerne la question initiale concernant un test de mémoire, si l’ordinateur effectuera un POST (c’est-à-dire qu’il dépassera l’autotest de mise sous tension et tentera de démarrer), alors Memtest86 est conçu spécifiquement pour tester votre RAM. Il teste les 64 premiers Ko de RAM, se charge dans cette RAM, puis teste le reste de la mémoire de votre système aussi complètement que vous le souhaitez. La mémoire "floconneuse" (par opposition à une mémoire simplement mauvaise) est rare, mais j'ai vu Memtest86 intercepter un bit de manière intermittente que le test de mémoire de l'ordinateur avait raté (après tout, le test de mémoire POST est censé se terminer dans un délai raisonnable Le test le plus rapide de memtest86 dure entre 5 et 10 minutes, avec des tests plus complets prenant des heures.)

utilisateur153822
la source
1

Oui, vous pouvez avoir un ordinateur sans RAM. Il existe un mode spécial dans la plupart des processeurs x86 qui permet de l'exécuter avec le cache uniquement. Si vous vérifiez le coreboot (ancien linuxbios), il peut le faire. Son appelé cache-as-ram. En fait, vous pouvez créer tout un système d’exploitation basé sur cela, et avec les caches modernes de grande taille, il pourrait même avoir un gui (voir menuet-os). Mais personne ne l'a encore fait.

Jorge Aldo
la source