Um computador sem RAM, mas com um disco, é equivalente a um com RAM?

18

A memória é usada para muitas coisas, como eu entendo. Ele serve como cache de disco e contém as instruções dos programas e sua pilha e pilha. Aqui está um experimento mental. Se alguém não se importa com a velocidade ou o tempo que leva para um computador fazer a trituração, qual é a quantidade mínima de memória que se pode ter, supondo que se tenha um disco muito grande? É possível acabar com a memória e apenas ter um disco?

O cache de disco obviamente não é necessário. Se configurarmos o espaço de troca no disco, a pilha de programas e a pilha também não exigirão memória. Existe algo que exija memória para estar presente?

Tosh
fonte
3
Qual é a ideia por trás dessa pergunta?
Yves Daoust
12
Defina "disco". Estamos nos movendo rapidamente em direção a um mundo sem disco (fico feliz que Terry Pratchett não precise testemunhar). Isso significa que todo o armazenamento será algum tipo de estado sólido ou outro, o que é meio que respondendo à sua pergunta, embora provavelmente inversamente.
Peter - Restabelece Monica
2
A memória é a memória é a memória
Édouard
8
A memória endereçável aleatória não é, até onde sei, um requisito para computadores. A fita de uma máquina de Turing não é endereçável aleatoriamente. Nada impede que você leia / grave apenas um bit por bloco, se desejar.
Édouard

Respostas:

24

Certo. Em princípio, dado o hardware apropriado, você poderia ter apenas um disco, com tudo armazenado em disco. Sempre que a CPU executava uma instrução de carregamento ou armazenamento, poderia haver algum hardware que transforma isso em um disco para leitura ou gravação. Seria extremamente lento: em um disco magnético, cada busca leva cerca de 10ms, para que você possa fazer cerca de 100 leituras e gravações de acesso aleatório por segundo.

Alguns sistemas mapearam a memória flash em seu espaço de endereço. A memória flash fornece armazenamento não volátil (persistente). Portanto, de certa forma, isso se assemelha ao que você menciona - embora esses sistemas geralmente também tenham RAM.

DW
fonte
6
O @MSalters enfatiza que, se modificarmos um disco (ou colocarmos hardware extra em cima dele) para torná-lo parecido com RAM, então podemos chamá-lo de RAM. O problema é que a pergunta "É possível acabar com a memória e apenas ter um disco" é muito vaga. O que queremos dizer com memória e disco? Queremos dizer aqueles que existem em um PC desktop moderno? Então a resposta é não. Queremos dizer alguma memória e disco hipotéticos? Então, nesse caso, a distinção entre os dois é borrada de qualquer maneira, e a pergunta é equivalente a "é possível ter um computador com RAM baseada em mecânica?" .
precisa saber é
1
O AS / 400 funciona dessa maneira. Há um armazenamento de nível único e apenas um único espaço de endereço. Disco e memória são combinados em uma única abstração de armazenamento pelo firmware da plataforma; o próprio sistema operacional vê apenas um único espaço de armazenamento unificado. Não há ponteiros, apenas referências a objetos. Os objetos são movidos da memória para o disco e retornados de forma transparente pelo firmware da plataforma (BIOS na fala do PC, SLIC na fala do AS / 400). Não faria diferença para o sistema operacional e os aplicativos se você removesse os discos e tivesse apenas RAM ou removesse a RAM e tivesse apenas discos.
Jörg W Mittag 05/03
Também acho que a vida dos HDDs será muito menor. E pior ainda para um SSD.Most provavelmente a razão pela qual os telefones Android não têm de swap
Suici Doga
16

Em termos de computabilidade, sabe-se que todo computador moderno pode ser simulado por uma máquina de Turing cujo único armazenamento é uma célula de fita linear única que pode ser gravada. Supondo que você possa continuar adicionando quantidades ilimitadas de armazenamento em disco, um computador com apenas discos rígidos é igualmente poderoso. Então, certamente, você poderia criar um computador sem memória.

Obviamente, não há discos rígidos com "espaço ilimitado", mas também não há RAM ilimitada.

Há várias questões práticas, por exemplo, você precisaria de convenções para mapear diferentes áreas e endereços no disco, um sistema operacional que gravou no disco para armazenamento intermediário e endereços de disco gerenciado. Na realidade, você acabaria simulando de perto a RAM no seu disco rígido.

jmite
fonte
14

A questão não é puramente acadêmica. É uma questão de registro histórico que um dos primeiros computadores produzidos comercialmente [desculpe, não me lembro qual de imediato] não tinha RAM - todos os programas foram executados buscando instruções diretamente de um tambor magnético [um cilindro rotativo com superfície externa magnetizável (discos vieram depois)]. Foi comparativamente lento, mas muito mais barato que muitos da concorrência. [isso foi no tempo dos 'tubos']

Curiosamente, ele veio com uma ferramenta agora obsoleta conhecida como 'montador otimizador' - ou seja, o montador não apenas gerou instruções da máquina, como as gravou no tambor de forma não consecutiva, a fim de minimizar, para cada instrução, a quantidade de tempo esperando o tambor girar para o próximo.

PMar
fonte
3
Você pode estar pensando no Stantec Zebra - archive.computerhistory.org/resources/text/Standard/… . Eles ainda tinham um no departamento de CS quando fui para a universidade em 1967.
David Marshall
3
Na verdade, eu acho que pode ter sido pensando na IBM 1408.
PMAR
8
Veja também a História de Mel ( catb.org/jargon/html/story-of-mel.html ), sobre um programador que trabalhou no Royal McBee LPG-30, que tinha uma memória de bateria.
db48x
@ db48x: eu tinha esquecido o quão legal essa história era. Provavelmente não leio há 10 anos.
Peter Cordes
7

Não. As unidades de disco não são endereçáveis ​​aleatoriamente, como a RAM. Em vez disso, são dispositivos de armazenamento em bloco. Você não pode ler ou escrever um byte deles. E sua CPU não pode ler um setor inteiro de uma só vez, eles precisam desse acesso aleatório. Os sistemas operacionais ocultam esse nível de detalhes, mas o fazem lendo um sctor inteiro na RAM, modificando-o e escrevendo-o de volta.

Como resultado, você precisa de um bloco de armazenamento de acesso aleatório. Porém, esse poderia ser o cache da CPU, que é feito de SRAM (um tipo rápido de RAM).

Não são apenas discos. A memória flash é projetada com blocos, o que é fundamental para o seu baixo preço. Ele ainda possui blocos muito maiores que os setores de disco normais, mas usa RAM internamente para ocultar isso do sistema operacional.

Você pode tornar o armazenamento persistente diretamente utilizável por uma CPU. O armazenamento EEPROM se enquadra nessa categoria (memória "somente leitura" programável apagável eletronicamente - embora "otimizado para leitura" seja uma descrição factualmente melhor).

MSalters
fonte
5
Eu acho que o seu "Não" deve ser "Sim, mas seria necessário discos personalizados".
Taemyr
3
Você certamente pode ler um byte, em ambos. O que você não pode fazer é escrever um único byte, porque as gravações precisam de um bloco inteiro, ao mesmo tempo. No entanto, em princípio, não há razão para que você não possa modificar um bloco copiando os dados não modificados do bloco original para um novo bloco, escrevendo novos dados quando necessário, e copiando-os novamente para o bloco original. Você desgastará seu disco rapidamente, mas isso é inevitável da pergunta do OP de qualquer maneira.
Graham
3
E o "bloqueio" é feito para o uso eficiente do espaço físico em disco: você precisa de espaço em torno de cada pedaço de dados "reais" para identificar o bloco, fornecer espaço de "guarda" entre os blocos etc. Não há razão técnica para que os blocos não possam ser um byte de comprimento (mas a velocidade diminuiria ainda mais como a capacidade).
TripeHound # 04/16
6
Na verdade, mesmo a RAM atual não é realmente endereçável por byte - o DDR3 funciona em rajadas e o tamanho mínimo de leitura / gravação é de 8 palavras de 64 bits (ou seja, 64 bytes); Não sou especialista, mas aposto que o acesso alinhado também é necessário. Tudo isso não é tão diferente dos discos mais antigos, onde o tamanho do bloco era da ordem de 512 bytes, então eu diria que essas distinções são principalmente históricas, a linha está realmente desfocada.
Matteo Italia
1
(também, nada impede que você use um bloco inteiro - seja qual for o tamanho que é - apenas para manter um byte - um pouco ineficiente, mas contanto que eu não sou o único que paga os discos que é OK)
Matteo Italia
1

Quando você usa memória virtual e precisa lidar com falhas de página, pelo menos o manipulador de exceções que manipula a falha de página, o driver de disco que lê os dados do disco rígido e primeiro grava as páginas sujas no disco, e as tabelas de páginas precisam estar na RAM o tempo todo. Porque se eles não estiverem na RAM, você não poderá trocá-los novamente na RAM. Além disso, você precisa de espaço para pelo menos uma página de RAM.

Se você tivesse uma CPU como um maciço Xeon de 12 núcleos com 30 MB de memória cache, pode ser possível ter um sistema sem RAM nem disco rígido, mas use apenas a memória cache. (Não tenho certeza se isso realmente funciona ou se, por algum motivo, a RAM é necessária).

gnasher729
fonte
O IIRC, x86 possui um modo em que usa o cache interno como memória principal. electronics.stackexchange.com/questions/16485/… tem alguns detalhes. Eu acho que às vezes é chamado de "modo sem preenchimento", ou seja, a CPU não tenta realmente preencher as linhas de cache da memória externa. Isso pode impedir o uso do DMA para E / S do disco rígido, porque o "agente do sistema" não pode fazer o DMA no cache L3. Pode funcionar em um Skylake com L4 eDRAM, porque é configurado como um cache no lado da memória (ao contrário do Broadwell) que pode armazenar em cache tudo , incluindo o DMA. O IO programado ainda funcionaria para o disco.
Peter Cordes
Claro, nesse ponto você está executando um System-on-Chip com 128MiB de RAM, o que era uma quantidade decente há 15 anos. Com apenas caches L3 SRAM, isso ainda é de 4 a 8MiB em um chip de desktop, o que talvez seja suficiente para um Linux muito simples, mas fácil para o DOS. Se a maior parte do seu código está em ROM, não em RAM, tudo bem.
Peter Cordes
1

É conceitualmente possível. RAM é apenas um nível de cache. Existem muitos níveis de armazenamento em cache em um computador moderno (consulte os L1, L2, L3 da CPU. Caches, é claro, Ram, a área de troca - que é uma seção lógica do disco usado como RAM ...-), se você colocar ou adicione um, a máquina funcionará. Por exemplo, um live cd do Ubuntu pode não usar o nível de cache do disco rígido. No entanto, eu não acho que exista um sistema operacional que suporte a ausência de um nível de RAM.

Picci
fonte
1
Não é o sistema operacional, mas o hardware que é projetado, exigindo que as instruções sejam inseridas no RAM (na verdade, mapeadas no espaço de endereço).
Ángel
@ Anjo É realmente necessário em um sistema operacional moderno que o texto (instruções), bss, pilha e pilha sejam carregados na memória para que um programa seja executado? Eles não podem estar no swap (disco)? No Linux, digamos.
Toshiba
1
Estamos falando de ciência da computação ou engenharia da computação? Não conheço a implementação de um sistema operacional, nem o nível de hardware, estou baseando-me apenas na tese de Church-Turing. Talvez isso seja impossível usando o hardware atual disponível no mercado ou os sistemas operacionais existentes, mas isso pode ser possível em um cenário teórico.
Picci 8/03/16
1
@ Tosh não é um problema do sistema operacional, mas do hardware. Sua CPU executa uma instrução localizada no endereço de memória apontado pelo ponteiro da instrução. Portanto, apenas ter um disco não funcionará (sem alterar seu hardware). Respondendo à sua pergunta, nem toda a seção precisaria ser carregada na memória; na verdade, o SO só pode carregá-los quando o programa tenta acessá-los. Como um exemplo extremo de contador, você pode executar o programa "do disco" usando um emulador que lê uma palavra * de cada vez no disco rígido. Mas o seu precisaria estar na memória, então você ainda precisaria de um pouco de RAM.
Ángel
1
Desculpe, @ Tosh: "seu emulador precisaria estar na memória".
Ángel
-1

Tecnicamente, a RAM é uma memória volátil primária usada para melhorar a velocidade de processamento. Depois que a energia acaba, os dados na memória primária são perdidos. Se usarmos um disco, ou seja, como você diz, apenas disco e não RAM, ainda poderemos executar nosso computador, mas haverá mais sobrecarga de gravação e leitura, o que tornará o sistema consideravelmente mais lento. Por isso, usamos RAM.

Sanket Gupte
fonte
Bem-vindo ao CS.SE! Você pode justificar sua afirmação de que mais sobrecarga de leitura e gravação aumenta a chance de uma falha frequente do sistema? Isso não parece certo para mim.
DW
Depende do que você está usando. Como no unix / Linux, existe um conceito conhecido como cache de buffer. Pode ser usado para armazenar blocos pré-buscados ou os blocos marcados para gravação atrasada. Mas no Windows ou Mac não existe esse conceito. Portanto, você precisa acessar os blocos necessários do armazenamento secundário. Agora, ao executar processos paralelos, a sobrecarga de gravação e leitura aumentaria e a velocidade do processamento diminuiria consequentemente. Os processos não será capaz de executar, assim, retardar o computador de tal forma que ele começa pendurado e, posteriormente, cai
Sanket Gupte
2
Isso soa como um equívoco. Diminuir a velocidade de um computador não significa que ele trava.
DW