Un computer senza RAM, ma con un disco, equivale a uno con RAM?


18

La memoria è usata per molte cose, come ho capito. Funge da cache del disco e contiene le istruzioni dei programmi e il loro stack & heap. Ecco un esperimento mentale. Se uno non si preoccupa della velocità o del tempo impiegato da un computer per eseguire lo sgretolamento, qual è la quantità minima di memoria che uno può avere, supponendo che abbia un disco molto grande? È possibile eliminare la memoria e avere solo un disco?

Ovviamente non è richiesta la memorizzazione nella cache del disco. Se impostiamo lo spazio di swap sul disco, anche lo stack del programma e l'heap non richiedono memoria. C'è qualcosa che richiede memoria per essere presente?



3
Qual è l'idea alla base di questa domanda?
Yves Daoust

12
Definire "disco". Ci stiamo rapidamente muovendo verso un mondo senza disco (sono contento che Terry Pratchett non debba testimoniarlo). Ciò significa che tutta la memoria sarà una sorta di stato solido o un altro, che è una specie di risposta alla tua domanda, anche se probabilmente al contrario.
Peter - Ripristina Monica

2
La memoria è memoria è memoria
Édouard

8
La memoria indirizzabile in modo casuale non è, per quanto ne sappia, un requisito per i computer. Il nastro di una macchina Turing non è indirizzabile in modo casuale. Nulla ti impedisce di leggere / scrivere solo un bit per blocco, se lo desideri.
Édouard,

Risposte:


24

Sicuro. In linea di principio, dato l'hardware appropriato, potresti avere solo un disco, con tutto memorizzato sul disco. Ogni volta che la CPU ha caricato o memorizzato le istruzioni, potrebbe esserci dell'hardware che lo trasforma in un disco in lettura o scrittura. Sarebbe estremamente lento: su un disco magnetico, ogni ricerca impiega circa 10ms, quindi potresti fare circa 100 letture e scritture ad accesso casuale al secondo.

Alcuni sistemi hanno una memoria flash mappata nel loro spazio degli indirizzi. La memoria flash fornisce memoria non volatile (persistente). Quindi, in un certo senso, questo assomiglia a quello che accenni, anche se di solito anche quei sistemi hanno RAM.


6
@MSalters sottolinea che se modifichiamo un disco (o sovrapponiamo un hardware aggiuntivo) per renderlo simile alla RAM, allora potremmo anche chiamarlo RAM. Il problema è che la domanda "È possibile eliminare la memoria e avere solo un disco" è troppo vaga. Cosa intendiamo per memoria e disco? Intendiamo quelli che esistono in un moderno PC desktop? Quindi la risposta è no. Intendiamo un po 'di memoria e un disco ipotetici? Quindi in quel caso la distinzione tra i due è comunque sfocata e la domanda equivale a "è possibile avere un computer con RAM meccanica?" .
JBentley

1
Il tipo di AS / 400 funziona in questo modo. Esiste un archivio a livello singolo e un solo spazio indirizzo. Disco e memoria sono combinati in un'unica astrazione di memoria dal firmware della piattaforma, il sistema operativo stesso vede solo un unico spazio di archiviazione unificato piatto. Non ci sono puntatori, solo riferimenti a oggetti. Gli oggetti vengono spostati dalla memoria al disco e viceversa in modo trasparente dal firmware della piattaforma (BIOS in PC-speak, SLIC in AS / 400-speak). Non farebbe alcuna differenza per il sistema operativo e le applicazioni se rimossi i dischi e disponessi solo di RAM o rimossi la RAM e disponessi solo di dischi.
Jörg W Mittag,

Inoltre penso che la vita degli HDD sarà molto più breve. E ancora peggio per un SSD. Molto probabilmente il motivo per cui i telefoni Android non hanno lo scambio
Suici Doga

16

In termini di calcolabilità, è noto che ogni computer moderno può essere simulato da una macchina di Turing la cui unica memoria è una singola cella a nastro lineare che può essere scritta. Supponendo che sia possibile continuare ad aggiungere quantità illimitate di spazio su disco, un computer con solo dischi rigidi è altrettanto potente. Quindi sicuramente potresti creare un computer senza memoria.

Naturalmente, non ci sono dischi rigidi "spazio illimitato", ma non c'è nemmeno RAM illimitata.

Esistono una serie di problemi pratici, ad esempio, sono necessarie convenzioni per mappare diverse aree e indirizzi sul disco, un sistema operativo che ha scritto sul disco per l'archiviazione intermedia e gli indirizzi del disco gestito. In realtà, finiresti per simulare da vicino la RAM sul tuo disco rigido.


14

La domanda non è puramente accademica. È una questione storica che uno dei primi computer prodotti commercialmente [scusate, non ricordo quale di mano] non aveva alcuna RAM - tutti i programmi sono stati eseguiti recuperando istruzioni direttamente da un tamburo magnetico [un cilindro rotante con superficie esterna magnetizzabile (i dischi sono arrivati ​​dopo)]. È stato relativamente lento, ma molto più economico di gran parte della concorrenza. [questo era molto tempo fa nei giorni del "tubo"]

È interessante notare che è arrivato con uno strumento ormai obsoleto noto come un "ottimizzatore assemblatore" - cioè l'assemblatore non solo ha generato istruzioni macchina, ma le ha scritte sul tamburo in modo non consecutivo in modo da ridurre al minimo, per ogni istruzione, il tempo in attesa che il tamburo ruoti al successivo.


3
Potresti pensare a Stantec Zebra - archive.computerhistory.org/resources/text/Standard/… . Ne avevano ancora uno nel dipartimento CS quando andai all'università nel 1967.
David Marshall,

3
In realtà, penso di aver pensato all'IBM 1408.
PMar

8
Vedi anche la Storia di Mel ( catb.org/jargon/html/story-of-mel.html ) che parla di un programmatore che ha lavorato al Royal McBee LPG-30, che aveva una memoria di batteria.
db48x,

@ db48x: avevo dimenticato quanto fosse bella quella storia. Probabilmente non lo leggo da 10 anni.
Peter Cordes,

7

No. Le unità disco non sono indirizzabili casualmente come la RAM. Invece sono dispositivi di archiviazione a blocchi. Non puoi leggere o scrivere un byte da loro. E la tua CPU non può leggere un intero settore in una volta, hanno bisogno di quell'accesso casuale. I sistemi operativi ti nascondono questo livello di dettaglio, ma lo fanno leggendo un intero sctor nella RAM, modificandolo e riscrivendolo.

Di conseguenza, è necessario un blocco di memoria ad accesso casuale. Questa potrebbe essere la cache della CPU, che è fatta da SRAM (un tipo veloce di RAM).

Non sono solo dischi. La memoria flash è stata progettata in base ai blocchi, il che è la chiave del suo basso prezzo. Ha persino blocchi molto più grandi dei normali settori del disco, ma utilizza la RAM internamente per nasconderlo dal sistema operativo.

È possibile creare una memoria permanente utilizzabile direttamente da una CPU. L'archiviazione EEPROM rientrerebbe in questa categoria (memoria "sola lettura" programmabile e cancellabile elettronicamente, sebbene "Ottimizzata in lettura" sarebbe una descrizione effettivamente migliore).


5
Penso che il tuo "No" dovrebbe essere "Sì, ma richiederebbe dischi personalizzati".
Taemyr,

3
Puoi certamente leggere un byte, su entrambi. Quello che non puoi fare è scrivere un singolo byte, perché le scritture necessitano di un intero blocco per scrivere contemporaneamente. Tuttavia, in linea di principio non vi è alcun motivo per cui non è possibile modificare un blocco copiando i dati non modificati dal blocco originale in un nuovo blocco, scrivendo nuovi dati invece dove necessario e quindi copiandoli nuovamente nel blocco originale. Usurerai il tuo disco abbastanza rapidamente, ma questo è inevitabile dalla domanda dell'OP.
Graham

3
E il "blocco" viene eseguito per un uso efficiente dello spazio fisico su disco: è necessario spazio attorno a ciascun pezzo di dati "reali" per identificare il blocco, fornire spazio di "protezione" tra i blocchi ecc. Non vi è alcun motivo tecnico per cui i blocchi non possano essere uno byte lungo (ma la velocità calerebbe ulteriormente quanto la capacità).
TripeHound

6
In realtà, anche la RAM corrente non è realmente indirizzabile in byte - DDR3 funziona a raffica e la dimensione minima di lettura / scrittura è di 8 parole a 64 bit (ovvero 64 byte); Non sono un esperto, ma scommetto che è richiesto anche un accesso allineato. Tutto ciò non è così dissimile dai dischi più vecchi, in cui la dimensione del blocco era dell'ordine di 512 byte, quindi direi che queste distinzioni sono per lo più storiche, la linea è davvero sfocata.
Matteo Italia

1
(inoltre, nulla ti impedisce di usare un intero blocco - qualunque sia la dimensione - solo per contenere un byte - un po 'inefficiente ma fintanto che io non sono quello che paga i dischi va bene)
Matteo Italia

1

Quando si utilizza la memoria virtuale e occorre gestire gli errori di pagina, almeno il gestore delle eccezioni che gestisce l'errore di pagina, il driver del disco che legge i dati dal disco rigido e scrive prima le pagine sporche sul disco e le tabelle delle pagine devono essere sempre nella RAM. Perché se non sono nella RAM, non è possibile scambiarli nuovamente nella RAM. Inoltre hai bisogno di spazio per almeno una pagina di RAM.

Se avessi una CPU come un enorme Xeon a 12 core con 30 MB di memoria cache, potrebbe essere possibile avere un sistema senza RAM o disco rigido, ma utilizzare solo la memoria cache. (Non sono sicuro che funzioni davvero o che per qualche motivo sia necessaria la RAM).


IIRC, x86 ha una modalità in cui utilizza la cache interna come memoria principale. electronics.stackexchange.com/questions/16485/… ha alcuni dettagli. Penso che a volte venga chiamato "nessuna modalità di riempimento", cioè la CPU non tenta di riempire effettivamente le linee della cache dalla memoria esterna. Ciò potrebbe precludere l'uso di DMA per l'I / O del disco rigido, in quanto "l'agente di sistema" non può eseguire il DMA nella cache L3. Potrebbe funzionare su uno Skylake con LDR eDRAM, perché è impostato come cache lato memoria (a differenza di Broadwell) che può memorizzare tutto , incluso DMA. Programmed-IO funzionerebbe comunque per il disco.
Peter Cordes,

Naturalmente, a quel punto stai eseguendo un sistema su chip con 128 MiB di RAM, che era una quantità decente 15 anni fa. Con solo cache L3 SRAM, sono ancora da 4 a 8 MiB in un chip desktop, che è forse sufficiente per un Linux molto ridotto, ma abbastanza facilmente per DOS. Se la maggior parte del codice è nella ROM, non nella RAM, allora va bene.
Peter Cordes,

1

È concettualmente possibile. La RAM è solo un livello di memorizzazione nella cache. Esistono molti livelli di memorizzazione nella cache in un computer moderno (vedere le cache L1, L2, L3 .. della CPU, ovviamente Ram, l'area di scambio - che è una sezione logica del disco usata come RAM ...-), se si inserisce o aggiungine uno, la macchina funzionerà. Ad esempio, un cd live di Ubuntu potrebbe non utilizzare il livello di memorizzazione nella cache dell'HDD. Tuttavia, non penso che ci siano sistemi operativi in ​​grado di supportare l'assenza di un livello di RAM.


1
Non è il sistema operativo, ma l'hardware progettato per richiedere che le istruzioni siano in ram (in realtà, mappate nello spazio degli indirizzi).
Ángel

@Angel è davvero richiesto in un sistema operativo moderno che il testo (istruzioni), bss, stack e heap sia caricato in memoria per l'esecuzione di un programma? Non possono essere sullo swap (disco)? In Linux, diciamo.
Tosh

1
Stiamo parlando di informatica o ingegneria informatica? Non conosco l'implementazione di un sistema operativo, né il livello hardware, sto basando solo sulla tesi di Church-Turing. Forse questo è impossibile utilizzando l'hardware attuale disponibile sul mercato o utilizzando sistemi operativi esistenti, ma può essere possibile in uno scenario teorico.
Picci,

1
@Tosh non è un problema del sistema operativo ma dell'hardware. La CPU esegue un'istruzione situata all'indirizzo di memoria indicato dal puntatore dell'istruzione. Quindi avere un disco non funzionerà (senza alterare l'hardware). Per rispondere alla tua domanda, non tutta la sezione dovrebbe essere caricata in memoria, infatti il ​​sistema operativo potrebbe caricarli solo quando il programma tenta di accedervi. Come esempio di contatore estremo, è possibile eseguire il programma "dal disco" utilizzando un emulatore che legge una parola * alla volta da HDD. Ma avresti bisogno di essere in memoria, quindi avresti ancora bisogno di un po 'di RAM.
Ángel

1
Spiacente, @Tosh: "il tuo emulatore dovrebbe essere in memoria".
Ángel

-1

Tecnicamente, la RAM è una memoria volatile primaria utilizzata per migliorare la velocità di elaborazione. Una volta che l'alimentazione è andata, i dati nella memoria primaria vengono persi. Se utilizziamo un disco, cioè come dici tu, solo disco e non RAM, potremmo comunque far funzionare il nostro computer, ma ci sarebbero più overhead di lettura e scrittura che rallenterebbero notevolmente il sistema. Quindi, usiamo la RAM.


Benvenuto in CS.SE! Puoi giustificare la tua affermazione secondo cui un sovraccarico in lettura e scrittura aumenta le possibilità di un arresto anomalo del sistema? Non mi sembra giusto.
DW

Dipende da come stai usando. Come in unix / Linux, esiste un concetto noto come buffer cache. Può essere utilizzato per memorizzare blocchi precaricati o blocchi contrassegnati per la scrittura ritardata. Ma in Windows o Mac non esiste tale concetto. Quindi, è necessario accedere ai blocchi richiesti dalla memoria secondaria. Ora, durante l'esecuzione di processi paralleli, l'overhead di lettura e scrittura aumenterebbe e la velocità di elaborazione diminuirà di conseguenza. I processi non saranno in grado di eseguire rallentando così il computer in modo che inizi a bloccarsi e successivamente si arresti in modo
anomalo

2
Sembra un malinteso. Rallentare un computer non significa che il computer si arresti in modo anomalo.
DW
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.