Ogni SO ha bisogno di RAM?


76

Esiste un sistema operativo che può essere utilizzato senza RAM, in particolare il tipo da cui posso creare un pendrive di avvio e utilizzarlo nel computer? Questo diventa imbarazzante, poiché l'avvio sta essenzialmente caricando il SO nella RAM.

Nota: originariamente volevo sapere di un sistema operativo senza RAM per verificare se il mio laptop (che non si avvia ma presenta uno schermo vuoto) la RAM era andato male, ma mi piace il modo in cui questa domanda si è gonfiata.


23
Non sono sicuro che una CPU funzioni anche senza RAM, questa potrebbe essere una buona domanda per Computer Science.SE . Quello che so per certo è che non arriverai da nessuna parte se non riuscirai nemmeno a superare il BIOS.

12
@ AndréDaniel una CPU ha una cache che, dal punto di vista CS, è anche una memoria ad accesso casuale. Quindi in teoria non hai bisogno di moduli RAM aggiuntivi. Ma in pratica dubito che l'architettura x86 lo consenta.
Philipp,

30
Tutti questi argomenti sull'uso della cache del processore sono di dubbia validità, poiché, almeno su x86, la cache non è una memoria a cui è possibile accedere direttamente. Il tuo codice si riferisce sempre alla RAM, ma il processore gestisce automaticamente le sue cache in modo da non dover effettivamente recuperare i dati nella RAM per i dati a cui si accede più frequentemente. Ma ancora una volta, non ci sono istruzioni di assemblaggio per dire "archivia questo nella cache" "scrivi questo nella cache", ci sono registri e c'è memoria principale (con tutte le sue strane modalità di accesso), punto.
Matteo Italia,

3
(OTOH, in teoria si potrebbe sfruttare altra RAM (ad esempio video RAM) o periferiche mappato nello spazio di indirizzamento fisico)
Matteo Italia

13
Le moderne CPU x86 ti consentono di mettere la cache on-die in modalità "Cache as RAM" - Penso che alcuni MSR debbano essere impostati per farlo. Ciò può valere anche per alcune CPU ARM. La cache delle CPU moderne è in quantità maggiore di quella che i tuoi primi PC potrebbero avere come memoria massima. Su un PC, comunque, il firmware non si avvierà senza RAM presente. Avresti bisogno di un firmware personalizzato o qualcosa di diverso da una piattaforma per PC.
LawrenceC,

Risposte:


96

Ogni SO ha bisogno di RAM?
Per l'hardware compatibile con PC IBM, un passaggio obbligatorio del processo POST del BIOS è verificare se è presente RAM in cui caricare il BIOS. Facoltativamente, il processo POST verifica correttamente le funzioni della RAM. Dopo il processo POST, il BIOS carica il bootloader nella RAM e dà il controllo al bootloader. Quindi la risposta alla tua domanda ("Ogni SO ha bisogno di RAM?") È: sì, ogni hardware compatibile con PC IBM richiede almeno un po 'di RAM funzionante per l'avvio. Questo è vero per qualsiasi sistema operativo che gira su quell'hardware.

Si noti che nella domanda originale dell'OP, c'era un riferimento a un "laptop", che ho interpretato come: hardware compatibile con PC IBM. Per il resto di questa risposta, assumerò l'hardware compatibile con PC IBM.

È possibile avviare un sistema operativo con RAM difettosa?
Se la tua RAM è difettosa (e non del tutto assente / rotta) o se puoi (parzialmente) sostituire la tua RAM, potresti essere in grado di avviarti usando le patch del kernel BadRAM di BadMEM . Richiede di ricompilare il kernel (sembra più facile di quanto lo sia se lo si fa per la prima volta) e si può riavviare e dire al kernel dove si trova la tua memoria difettosa. Una bella spiegazione dell'uso di Memtest86 / Memtest86 + , BadRAM / BadMEM può essere trovata qui .

È possibile avviare un sistema operativo senza RAM e utilizzare la cache della CPU come RAM?
Per quanto ne so, non c'è modo di utilizzare la cache della CPU come RAM senza RAM presente sul sistema (come suggerito da @philipp e altri) nei commenti. Se c'è, sarebbe bello aggiungerlo qui. L'unico documento che ho trovato su questo argomento è questo documento che afferma: "Utilizzo della cache del processore come RAM fino all'inizializzazione della RAM". Non sono sicuro se (e come) funzionerà senza RAM. Per quanto ne so, non esiste un codice funzionante che avvia un sistema operativo su un PC compatibile IBM. Eventuali riferimenti a prove di concetti, codice di lavoro o altro sono benvenuti nei commenti e lo aggiungerò a questa risposta.

Posso accedere al BIOS?
La domanda dell'OP è un po 'vaga se il laptop è in grado di passare il BIOS POST. Come sottolinea @Tonny, nessun sistema operativo ti aiuterà a " accedere al BIOS ". Si accede al BIOS utilizzando il tasto F1o F2o F10o DELo ESC, a seconda della marca del BIOS.

Come recuperare i dati dal laptop senza RAM?
Per quanto riguarda l'obiettivo dietro la tua domanda: perché hai bisogno di accedere al tuo laptop? Probabilmente perché ci sono ancora dati sull'HDD che vuoi recuperare? In tal caso, è molto più facile estrarre l'HDD (consultare il manuale) e collegarlo a un dispositivo di archiviazione esterno o direttamente a un PC. Ecco una bella guida per fare proprio questo.


3
In pratica è possibile eseguire una macchina con RAM piuttosto difettosa (diciamo, c'è solo un banco che non funziona correttamente). Se il BIOS non si accorge (o, in tal caso, potrebbe esserci il solito override F1) è comunque possibile eseguire un sistema operativo come Linux con la patch BadMEM / BadRAM, che indica al kernel di evitare i blocchi di memoria specificati.
Matteo Italia,

5
@VusP: per controllare semplicemente la tua RAM usa un livecd / -usb con Memtest86 / Memtest86 +, salta il test della RAM nel tuo BIOS ed esegui il memtest dal livecd / -usb.
agtoever,

4
Chi dice che testare la RAM all'avvio è " obbligatorio "? Era comune quando le macchine avevano pochi MB o meno, ma presto divenne opzionale con l'aumentare delle dimensioni e il tempo divenne proibitivo.
Andrew Medico

3
@agtoever: eh? Il trucco cache-as-RAM non smette improvvisamente di funzionare quando la RAM viene inizializzata. È solo che a quel punto è sciocco evitare la RAM, quindi nessuno ci prova mai. Ma il trucco non ha nulla a che fare con la RAM non inizializzata; è proprio quando è effettivamente utile.
Mehrdad,

3
@ Ciao Angelo, non può essere eseguito direttamente dal disco poiché la CPU non può accedere direttamente al contenuto del disco. Deve inserire i comandi nel controller del disco e attendere che trasferisca blocchi di dati dal disco a qualche parte in ram. Solo da lì la CPU può eseguire direttamente le istruzioni.
psusi,

33

In teoria è possibile , ma sarebbe molto lento, dal momento che avrebbe bisogno di usare il disco per qualsiasi memoria temporanea che non rientrava nella cache della CPU. (Le CPU hanno pochi megabyte di cache perché anche la RAM è troppo lenta per loro. Pensaci.) Quindi avresti bisogno di un sistema operativo piuttosto piccolo.

(Bene, i sistemi integrati su chip possono eseguire codice dalla RAM o dalla memoria Flash interna - il BIOS del PC potrebbe in teoria fare lo stesso, ma non può eseguire l'intero sistema operativo.)

Ma un'altra cosa è che il BIOS funziona prima e all'esterno di qualsiasi sistema operativo installato, ed è il BIOS che ti consente di avviare da un pendrive o altro. Quindi, se non riesci a raggiungere il BIOS, nessun altro sistema operativo al mondo ti aiuterà.


6
È possibile che una CPU possa utilizzare la propria cache anziché la RAM. Potrebbe essere una funzione utile per quelle parti del codice BIOS, che vengono eseguite prima del test della memoria. Ma far funzionare altro hardware senza RAM potrebbe essere complicato. Non saresti in grado di fare DMA, quindi l'I / O del disco dovrebbe essere fatto diversamente. Suppongo che il BIOS non proverebbe nemmeno a caricare un sistema operativo, se non venisse trovata alcuna RAM utilizzabile. La dimensione della cache è tuttavia meno problematica. Alcuni MB potrebbero non essere molto per gli standard moderni, ma un sistema operativo di quei tempi in cui un MB di RAM era molto, dovrebbe comunque funzionare su computer moderni.
Kasperd,

2
@kasperd DEC Alpha è stato progettato per eseguire il suo primo stadio di inizializzazione all'accensione dalla cache, precaricato da una "ROM seriale". Questo perché la CPU non poteva accedere alla RAM, alla ROM convenzionale o a qualsiasi altra risorsa mappata in memoria (che includeva tutti i dispositivi I / O, IIRC) fino a quando le tabelle delle pagine non erano state inizializzate.
zwol,

@grawity che dire degli SSD?
TechLife,

@TechLife: ancora più lento della RAM di diversi ordini di grandezza. Tuttavia, immagino, se dovessi usarlo come RAM ... si chiamerebbe semplicemente RAM, quindi ancora no.
Grawity

15

Potresti, con un certo sforzo, progettare un sistema che non contenesse RAM. Carica il tuo software dalla ROM (o dalla memoria) e fai tutto nei registri o nella cache. Un tale sistema avrebbe un uso eccezionalmente ristretto e dati i prezzi della RAM di oggi sarebbe un po 'inutile. Un laptop standard non funzionerà senza un po 'di memoria integrata.

La tua vera domanda è più probabile "Come posso ottenere informazioni da un computer che non si avvia" ed è facile. Smontalo, rimuovi l'unità e collegala a una custodia per unità esterna.

Si noti, tuttavia, che qualsiasi computer abbastanza vecchio da non poter ottenere $ 20 di RAM funzionante poiché avrà un'unità ATA (normale ATA, non SATA). Questa interfaccia è quasi estinta oggi, quindi dovrai anche trovare un case drive con una scheda ATA e un adattatore full-to-laptop. Ne ho uno che ho comprato nel 2000 e tengo in giro un paio di vecchi casi solo per questo scopo.


Concordato. Nessuna RAM significa nessuno stack che significa nessuna capacità di chiamare una routine. Qualsiasi codice che potrebbe funzionare in questa situazione dovrebbe essere assemblato con cura a mano.
Loren Pechtel,

Vero. Ho visto il codice che lo ha fatto però. (Ero la prima parte di una routine BIOS prima dell'inizializzazione del controller di memoria).
Hennes,

2
@LorenPechtel Non è del tutto vero. Lo stack può essere (e spesso è) archiviato nella memoria su chip.
reirab

2
@LorenPechtel non necessario. ARM non usa lo stack per chiamare una routine.
domen,

1
Per quanto posso vedere quei chip hanno SRAM interno ... che conta come RAM.
domen,

10

Se leggo correttamente la domanda, tutti qui abbaiano l'albero sbagliato.

Dichiara esplicitamente "per accedere al BIOS".

Se il laptop è così rotto da non entrare nemmeno nel BIOS, tutto il resto è inutile.

Non è possibile avviare QUALSIASI SO su questo indipendentemente dalla situazione della RAM.


8

Il tuo presupposto che la memoria sia difettosa è probabilmente non valido. Se non ricevi segnali acustici o messaggi sullo schermo, La causa principale è quasi sicuramente una CPU guasta (un po 'improbabile) o una scheda madre guasta (molto probabilmente). Le schede madri non riescono sempre con l'età a causa dei giunti di saldatura a freddo, che erano un evento comune nei primi giorni del movimento ROHS e il requisito di utilizzare saldature senza piombo. Le tecniche di produzione sono state ottimizzate per l'utilizzo di saldature a base di piombo e l'industria ha impiegato un po 'di tempo per capire e risolvere i problemi. Molti produttori di componenti non erano molto disposti a spendere i soldi per aggiornare i loro processi. Dopotutto, i dispositivi testerebbero e brucerebbero fino in fondo, per poi fallire solo dopo mesi o anni, dopo la scadenza di qualsiasi garanzia. Solo con una montagna crescente di fallimenti e un intenso feedback negativo da parte degli utenti, i produttori hanno iniziato a migliorare le cose. Su un laptop del genere, far rifluire la scheda madre per correggere i giunti di saldatura a freddo è quasi certamente un costo proibitivo.


Questo è possibile, ma non è neanche una cattiva memoria. Ho visto memoria insufficiente (e persino cattivi socket di memoria) causare un POST più volte prima. Ovviamente, il controllo più semplice per la memoria è di solito solo per provare l'avvio con diversi stick rimossi o l'avvio con un solo stick noto noto. Se ciò risolve i problemi, si trattava della memoria, degli slot di memoria o del controller di memoria.
reirab

5

La maggior parte dei primi computer degli anni '80 o circa avevano un tipo di sistema operativo (driver hardware, supporto IO, caricamento del programma, interfaccia della riga di comando molto semplice, ecc.) Nel chip ROM. Potrebbe in qualche modo funzionare anche quando i chip RAM erano inutilizzabili. Questa funzione è stata utilizzata in speciali versioni di contenuto ROM progettate per l'esecuzione di test hardware e per comunicare principalmente attraverso il segnalatore acustico e le luci della tastiera.

La CPU ha diversi registri per ricordare almeno l'indirizzo del comando in esecuzione, ma questi normalmente non sono chiamati RAM.

Il codice C normale non può essere eseguito in un sistema senza RAM poiché utilizza la memoria dello stack per allocare le variabili e lo stack si trova nella RAM. All'avvio di un computer recente, inizialmente non è disponibile una RAM dinamica regolare poiché il dispositivo di aggiornamento della RAM richiede l'installazione iniziale per funzionare. Il codice assembly viene eseguito per primo ed esegue l'inizializzazione della scheda madre. La RAM inizia a funzionare e quindi può essere eseguito il codice C.


4
L'ultimo paragrafo non è del tutto vero. Lo stack non deve essere nella RAM off-chip. In realtà è abbastanza comune che lo stack si trovi nella memoria su chip. Anche su macchine normali, lo stack del thread attualmente in esecuzione sarà di solito nella cache e verrà inviato alla DRAM solo quando lo scheduler scambia i thread. Ho scritto codice per DSP, tuttavia, in cui lo stack risiedeva nella memoria su chip direttamente indirizzabile e non ha mai toccato la DRAM. Ovviamente, suppongo che si possa sostenere che la memoria su chip sia tecnicamente RAM in questo caso.
reirab

4
Inoltre, non è insolito che almeno alcuni dei parametri e dei valori restituiti vengano passati alle funzioni C utilizzando i registri (anziché lo stack). Inoltre, le variabili locali vengono comunemente memorizzate nei registri anziché nello stack dai compilatori C. Puoi anche richiedere specificamente che il compilatore inserisca una particolare variabile in un registro usando la parola chiave 'register'. Naturalmente, una volta che una funzione ha bisogno di più variabili locali di quelle per le quali si dispone dello spazio di registro, sarà necessario andare in memoria, ma questo è un vincolo hardware che si applica indipendentemente dal linguaggio di programmazione.
reirab

4

Quando andai all'università nel 1967, il dipartimento di informatica aveva una Stantec Zebra . La memoria consisteva in un tamburo magnetico di 8192 parole. C'erano anche 12 registri e due accumulatori. Potresti considerare quella RAM ma non come la conosciamo.


3

Avresti bisogno almeno sulla cache del chip per i registri (essenzialmente una quantità molto piccola di RAM su chip) in modo che l'unità di esecuzione della CPU possa funzionare. Quindi anche la tua CPU ha 'RAM'.

Credo che nessun sistema operativo Von-Neumann sia stato progettato senza il requisito della memoria.

Quindi no.


3

Come per tutte le altre persone qui, sono d'accordo sul fatto che hai bisogno di RAM e non puoi funzionare senza di essa, ma ho anche letto quanto segue:

(Inizialmente volevo caricare un sistema operativo privo di RAM per verificare se la RAM era andata male, ma mi piace il modo in cui questa domanda è andata a gonfie vele.)

Questo in realtà esiste nel BIOS, c'è una funzione per controllare la RAM in profondità. Quando si avvia e si accede al BIOS, disattivare l'opzione "Autoaccensione rapida all'accensione" e deve eseguire un controllo completo sulla RAM. Questa opzione dovrebbe trovarsi nelle "funzionalità BIOS avanzate", qualcosa come la seconda scelta sui BIOS AMI.

Spero che ti possa fare un passo avanti. ;-)


3

Non hai bisogno di RAM, ad esempio, usa una macchina Turing .

Una macchina di Turing è un dispositivo ipotetico che manipola i simboli su una striscia di nastro secondo una tabella di regole. Nonostante la sua semplicità, una macchina Turing può essere adattata per simulare la logica di qualsiasi algoritmo informatico ed è particolarmente utile per spiegare le funzioni di una CPU all'interno di un computer.

(Non considererei un nastro come RAM.)

Ora le tue vere domande dovrebbero essere "utili" e definire cosa intendi per "utile" .


3
A livello concettuale di una Turing Machine, tutti i tipi di archiviazione dei dati in lettura e scrittura sono sostanzialmente equivalenti: RAM, registri, cache, nastro magnetico, disco. L'unica differenza tra loro è la velocità di accesso.
Barmar,

1
@Barmar RAM significa memoria ad accesso casuale. Ciò significa che puoi accedere alle celle al suo interno in qualsiasi ordine. Le celle su un nastro su una macchina Turing sono accessibili solo in sequenza (in entrambe le direzioni o alternate). Quindi direi che il nastro su una macchina Turing non è per definizione RAM.
Kasperd,

1
@Barmar Questo non è corretto. La definizione di RAM non consente tempi di ricerca. Quindi il nastro di una TM semplicemente non si adatta alla definizione di RAM, perché non è possibile accedere a celle arbitrarie senza cercare.
Kasperd,

1
@Barmar, la nozione di tempo dell'orologio da parete potrebbe non essere applicabile, ma la nozione di tempo, come in esso richiede operazioni di lettura O (n) per arrivarci, certamente lo fa.
psusi,

1
@Barmar, no, non lo fai. Questo è il motivo per cui usiamo la grande notazione "O" per parlare di complessità puramente matematica non correlata a quanto "tempo" potrebbe richiedere qualcosa di reale. Il modello matematico di un'unità a nastro in questa TM è tale che può solo leggere ... in entrambe le direzioni ... non zoomare avanti o indietro, in qualsiasi periodo di tempo. Pertanto, se hai letto il byte 1 per l'ultima volta, non puoi leggere il byte 27 senza prima leggere i 26 byte in mezzo. Ecco perché non è ram. Se si desidera una memoria in grado di saltare quei 26 byte, indipendentemente dal fatto che l'operazione richieda 0 tempo o 5 minuti, sarebbe ram, non un nastro.
psusi,

3

Esistono sistemi operativi specializzati per uso incorporato che si esauriscono completamente in una ROM (memoria di sola lettura.) Per fare qualcosa di utile, tuttavia, di solito è necessaria almeno una piccola quantità di RAM. Tuttavia non ho visto un PC che si avvierà senza RAM.

Per quanto riguarda la domanda originale su un test di memoria, se il computer eseguirà il POST (ovvero supererà l'autotest all'accensione e tenterà l'avvio), Memtest86 è progettato specificamente per testare la RAM. Verifica i primi 64 KB di RAM, si carica in quella RAM, quindi verifica il resto della memoria di sistema nel modo desiderato. La memoria "flakey" (al contrario di una semplice cattiva memoria) è rara, ma ho visto Memtest86 catturare un bit intermittente che il test di memoria del computer ha mancato (dopotutto, il test di memoria POST è destinato a completarsi in un ragionevole lasso di tempo , mentre il test più veloce di memtest86 dura 5-10 minuti, con test più completi che richiedono ore.)


1

Sì, puoi avere un computer senza RAM. Esiste una modalità speciale nella maggior parte dei processori x86 che consente di eseguirla solo con cache. Se controlli coreboot (ex linuxbios), puoi farlo. Si chiama cache-as-ram. In realtà puoi fare un intero sistema operativo basato su questo, e con le moderne cache di grandi dimensioni potrebbe finire anche con una gui (controlla menuet-os). Ma nessuno lo ha ancora fatto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.