Todo sistema operacional precisa de RAM?

76

Existe um sistema operacional que possa ser usado sem RAM, especificamente do tipo em que posso criar um pendrive inicializável e usá-lo no computador? Isso fica estranho, uma vez que a inicialização está essencialmente carregando o sistema operacional na RAM.

Nota: Originalmente, eu queria saber sobre um sistema operacional sem RAM para verificar se a RAM do meu laptop (que não inicializa, mas apresenta uma tela em branco) estava com defeito, mas eu gosto da maneira como esta pergunta está cheia de neve.

Suvarna Pattayil
fonte
23
Não tenho certeza se uma CPU pode funcionar sem RAM, isso pode ser uma boa pergunta para a Computer Science.SE . O que sei com certeza é que você não chegará a lugar nenhum se nem conseguir passar pelo BIOS.
12
@ AndréDaniel uma CPU possui cache que, do ponto de vista do CS, também é memória de acesso aleatório. Portanto, em teoria, você não precisa de módulos de RAM adicionais. Mas, na prática , duvido que a arquitetura x86 permita isso.
Philipp
30
Todos esses argumentos sobre o uso do cache do processador têm validade duvidosa, pois, pelo menos no x86, o cache não é uma memória que você pode acessar diretamente. Seu código sempre se refere à RAM, mas o processador gerencia automaticamente seus caches para que ele não precise buscar os dados na RAM para os dados acessados ​​com mais frequência. Mas, novamente, não há instruções de montagem para dizer "armazene isso no cache" "escreva isso no cache", há registros e há memória principal (com todos os seus modos de acesso estranhos), ponto final.
Matteo Italia
3
(OTOH, em teoria, você poderia explorar outra RAM (por exemplo RAM de vídeo) ou periféricos mapeados no espaço de endereço físico)
Matteo Italia
13
As modernas CPUs x86 permitem que você coloque o cache no modo "Cache como RAM" - acho que alguns MSRs precisam ser configurados para isso. Isso também se aplica a algumas CPUs ARM. O cache das CPUs modernas é em maior quantidade do que o que seus primeiros PCs poderiam ter como memória máxima. Em um PC, o firmware ainda não inicializa sem a RAM presente. Você precisaria de um firmware personalizado ou algo que não seja uma plataforma de PC.
LawrenceC

Respostas:

96

Todo sistema operacional precisa de RAM?
Para hardware compatível com IBM PC, uma etapa obrigatória do processo do BIOS POST é verificar se há RAM para carregar o BIOS. Opcionalmente, o processo POST verifica corretamente suas funções de RAM. Após o processo POST, o BIOS carrega o gerenciador de inicialização na RAM e controla o gerenciador de inicialização. Portanto, a resposta para sua pergunta ("Todo SO precisa de RAM?") É: sim, todo hardware compatível com PC IBM requer pelo menos alguma RAM em funcionamento para inicializar. Isso vale para qualquer sistema operacional executado nesse hardware.

Observe que na pergunta original do OP, havia uma referência a um "laptop", que eu interpretei como: Hardware compatível com IBM PC. Para o restante desta resposta, assumirei o hardware compatível com IBM PC.

Um sistema operacional pode inicializar com RAM defeituosa?
Se a sua RAM estiver com defeito (e não estiver totalmente ausente / quebrada) ou se você puder (parcialmente) substituí-la, poderá inicializar usando os patches do kernel BadRAM do BadMEM . Requer que você recompile o kernel (soa mais fácil do que se você fizer pela primeira vez) e pode reiniciar e informar ao kernel onde está sua memória ruim. Uma boa explicação do uso do Memtest86 / Memtest86 + , BadRAM / BadMEM pode ser encontrada aqui .

Um sistema operacional pode inicializar sem RAM e usando o cache da CPU como RAM?
Até onde eu sei, não há como usar o cache da sua CPU como RAM sem nenhuma RAM presente no seu sistema (como sugerido por @philipp e outros) nos comentários. Se houver, seria bom adicioná-lo aqui. O único artigo que pude encontrar sobre esse assunto é o artigo que afirma: "Usando o cache do processador como RAM até que a RAM seja inicializada". Não tenho certeza se (e como) ele funcionará sem RAM. Tanto quanto sei, não há código de trabalho que inicialize um sistema operacional em um PC compatível com IBM. Qualquer referência a prova de conceitos, código de trabalho ou qualquer outra coisa é bem-vinda nos comentários, e eu a adicionarei a esta resposta.

Posso acessar o BIOS?
A pergunta do OP é um pouco vaga se o laptop conseguir passar no BIOS POST. Como o @Tonny aponta, nenhum sistema operacional o ajudará a " chegar ao BIOS ". Você entrar na BIOS usando o F1ou F2ou F10ou DELou ESCchave, dependendo da sua marca de BIOS.

Como recuperar dados do laptop sem RAM?
Quanto ao objetivo por trás da sua pergunta: por que você precisa de acesso ao seu laptop? Provavelmente porque ainda existem dados no disco rígido que você deseja recuperar? Nesse caso, é muito mais fácil retirar o disco rígido (consulte o manual) e conectá-lo a um dispositivo de armazenamento externo ou diretamente a um PC. Aqui está um bom guia para fazer exatamente isso.

de qualquer maneira
fonte
3
Na prática, é possível executar uma máquina com RAM com algum defeito (digamos, há apenas um banco que não funciona corretamente). Se o BIOS não perceber (ou, se houver, pode haver a substituição F1 usual), você ainda poderá executar um sistema operacional como o Linux com o patch BadMEM / BadRAM, que instrui o kernel a evitar os blocos de memória especificados.
Matteo Italia
5
@VusP: para verificar sua RAM, use um livecd / -usb com o Memtest86 / Memtest86 +, pule o teste de RAM no BIOS e execute o memtest no livecd / -usb.
agtoever
4
Quem disse que testar a RAM na inicialização é " obrigatório "? Era comum quando as máquinas tinham alguns MB ou menos, mas logo se tornaram opcionais à medida que os tamanhos aumentavam e o tempo se tornava proibitivo.
Andrew Medico
3
@agtoever: Hein? O truque de cache como RAM não pára de funcionar repentinamente quando a RAM é inicializada. Só que, nesse ponto, é tolice evitar a RAM, para que ninguém tente. Mas o truque não tem nada a ver com a RAM não ser inicializada; é apenas quando é realmente útil.
Mehrdad
3
@ Hi-Angel, não pode ser executado diretamente do disco, pois a CPU não pode acessar diretamente o conteúdo do disco. Ele deve acionar comandos no controlador de disco e aguardar a transferência de blocos de dados do disco para algum lugar no RAM. Somente a partir daí o processador pode executar instruções diretamente.
Psusi 29/10/14
33

É possível em teoria , mas seria muito lento, pois seria necessário usar o disco para qualquer armazenamento temporário que não se encaixasse nos caches da CPU. (As CPUs têm alguns megabytes de cache, porque até a RAM é muito lenta para eles. Pense nisso.) Portanto, você precisaria de um sistema operacional bastante pequeno.

(Bem, os sistemas embarcados no chip podem executar código da RAM ou da memória Flash interna - o BIOS do PC poderia, em teoria, fazer o mesmo, mas não pode executar todo o sistema operacional.)

Mas, outra coisa é, o BIOS é executado antes e fora de qualquer sistema operacional instalado, e é o BIOS que permite inicializar a partir de um pendrive ou qualquer outra coisa. Portanto, se você não conseguir acessar o BIOS, nenhum outro sistema operacional no mundo o ajudará.

gravidade
fonte
6
Pode ser que uma CPU possa usar seu próprio cache em vez da RAM. Pode ser um recurso útil para as partes do código do BIOS, que são executadas antes do teste de memória. Mas conseguir outro hardware para funcionar sem RAM pode ser complicado. Você não seria capaz de fazer DMA; portanto, a E / S do disco teria que ser feita de maneira diferente. Eu acho que o BIOS nem tentaria carregar um sistema operacional, se nenhuma RAM utilizável fosse encontrada. O tamanho do cache é menos problemático. Alguns MB podem não ser muito para os padrões modernos, mas um sistema operacional daqueles dias em que um MB de RAM era muito ainda deve funcionar em computadores modernos.
kasperd
2
@kasperd O DEC Alpha foi projetado para executar seu primeiro estágio de inicialização na inicialização do cache, pré-carregado a partir de uma "ROM serial". Isso ocorreu porque a CPU não pôde acessar a RAM, a ROM convencional ou qualquer outro recurso mapeado na memória (que incluía todos os dispositivos de E / S, IIRC) até que as tabelas de páginas fossem inicializadas.
Zwol 6/09/14
@rawraw que tal SSDs?
TechLife
@ TechLife: Ainda mais lento que a RAM por várias ordens que magnitude. Embora, eu acho, se você o usasse como RAM ... seria apenas chamado de RAM, então ainda não.
grawity
15

Você pode, com algum esforço, projetar um sistema que não contenha RAM. Carregue seu software a partir da ROM (ou armazenamento) e faça tudo em registros ou em cache. Esse sistema teria um uso excepcionalmente limitado e, dado que os preços atuais da RAM são um pouco inúteis. Um laptop pronto para uso não funcionará sem memória interna.

Sua pergunta real é mais provável "Como obtenho informações de um computador que não inicializa" e isso é fácil. Desmonte, remova a unidade e conecte-a a um gabinete de unidade externa.

Observe, no entanto, que qualquer computador com idade suficiente para que você não possa obter apenas US $ 20 em RAM, pois terá uma unidade ATA (ATA comum, não SATA). Essa interface está quase extinta hoje, portanto, você também precisará encontrar um gabinete de unidade com uma placa ATA, bem como um adaptador de tamanho normal para laptop. Tenho um que comprei em 2000 e mantenho alguns casos antigos apenas para esse fim.

Peter
fonte
Acordado. Sem RAM significa que não há pilha, o que significa que não há capacidade de chamar uma rotina. Qualquer código que pudesse funcionar nessa situação teria que ser uma montagem cuidadosamente artesanal.
Loren Pechtel 01/09/14
Verdadeiro. Eu vi o código que fez isso embora. (Fui a primeira parte de uma rotina do BIOS antes da inicialização do controlador de memória).
Hennes
2
@LorenPechtel Isso não é totalmente verdade. A pilha pode ser (e geralmente é) armazenada na memória do chip.
reirab 3/09/14
2
@LorenPechtel não é necessário. O ARM não usa a pilha para chamar uma rotina.
domen
1
Tanto quanto eu posso ver, esses chips têm SRAM interna ... que conta como RAM.
domen
10

Se eu li a pergunta corretamente, todos aqui estão latindo na árvore errada.

Ele afirma explicitamente "para acessar o BIOS".

Se o laptop está tão quebrado que nem entra no BIOS, tudo o mais é inútil.

Você não pode inicializar QUALQUER SO, independentemente da situação da RAM.

Tonny
fonte
8

Sua suposição de que a memória está ruim é provavelmente inválida. Se você não ouvir sinais sonoros ou mensagens na tela, a causa raiz é quase certamente uma CPU com falha (um tanto improvável) ou uma placa-mãe com falha (muito provavelmente). As placas-mãe falham com a idade o tempo todo devido a juntas de solda a frio, que eram uma ocorrência comum nos primeiros dias do movimento ROHS e a exigência de usar solda sem chumbo. As técnicas de fabricação foram otimizadas para o uso de solda à base de chumbo e a indústria levou um tempo para entender e resolver os problemas. Muitos fabricantes de componentes não estavam muito dispostos a gastar o dinheiro para atualizar seus processos. Afinal, os dispositivos testavam e queimavam muito bem, apenas para falhar meses ou anos depois, depois que qualquer garantia provavelmente expirava. Somente com uma montanha crescente de falhas e intenso feedback negativo dos usuários, os fabricantes começaram a melhorar as coisas. Em um laptop como esse, ter a placa principal voltada para retificar as juntas de solda a frio é quase certamente proibitivo.

passear
fonte
Isso é possível, mas a memória ruim também não é um palpite ruim. Já vi memória ruim (e até soquetes de memória ruim) causar uma falha no POST várias vezes antes. Obviamente, a verificação mais fácil da memória geralmente é apenas para tentar inicializar com diferentes sticks removidos ou inicializar com apenas um stick conhecido. Se isso resolver os problemas, era a memória, os slots de memória ou o controlador de memória.
reirab
5

A maioria dos computadores antigos dos anos 80 ou mais tinha o tipo de sistema operacional (drivers de hardware, suporte a IO, carregamento de programas, interface de linha de comando muito simples etc.) no chip ROM. Poderia funcionar um pouco, mesmo enquanto os chips de RAM estavam inoperantes. Esse recurso foi usado em versões especiais de conteúdo da ROM, projetadas para a execução de testes de hardware e a comunicação principalmente através das luzes do sinal sonoro e do teclado.

A CPU possui vários registradores para lembrar o endereço do comando que está sendo executado, pelo menos, mas esses normalmente não são chamados de RAM.

O código C regular não pode ser executado em um sistema sem RAM, pois usa a memória da pilha para alocar variáveis ​​e a pilha está na RAM. Quando um computador recente é inicializado, uma RAM dinâmica regular inicialmente não está disponível, pois o dispositivo de atualização de RAM precisa de uma configuração inicial para funcionar. O código do assembly é executado primeiro e executa a inicialização da placa-mãe. A RAM começa a funcionar e o código C pode ser executado.

h22
fonte
4
O último parágrafo não é inteiramente verdadeiro. A pilha não precisa estar na RAM fora do chip. Na verdade, é bastante comum que a pilha esteja localizada na memória do chip. Mesmo em máquinas normais, a pilha do encadeamento atualmente em execução normalmente fica em cache e só é enviada para a DRAM quando o agendador troca os encadeamentos. No entanto, escrevi código para DSPs, onde a pilha residia na memória do chip diretamente endereçável e nunca tocou na DRAM. Claro, acho que você poderia argumentar que a memória no chip é tecnicamente RAM nesse caso.
Reirab
4
Além disso, não é incomum que pelo menos alguns dos parâmetros e valores de retorno sejam passados ​​para as funções C usando registradores (em vez da pilha.) Além disso, variáveis ​​locais também são comumente armazenadas em registradores e não na pilha pelos compiladores C. Você pode até solicitar especificamente que o compilador coloque uma variável específica em um registro usando a palavra-chave 'register'. Obviamente, uma vez que uma função precise de mais variáveis ​​locais do que você tem espaço para registrar, será necessário ficar com memória, mas essa é uma restrição de hardware que se aplica independentemente da linguagem de programação.
reirab
4

Quando fui para a Universidade em 1967, o Departamento de Computação possuía uma Stantec Zebra . A memória consistia em um tambor magnético de 8192 palavras. Havia também 12 registros e dois acumuladores. Você pode considerar essa RAM, mas não como a conhecemos.

David Marshall
fonte
3

Você precisaria de pelo menos no cache de chips para registros (essencialmente, uma quantidade muito pequena de RAM no chip) para que a unidade de execução da CPU pudesse funcionar. Assim, mesmo sua CPU possui 'RAM'.

Nenhum sistema operacional Von-Neumann foi projetado sem a necessidade de memória que acredito.

Então não.

Oi lo
fonte
3

De acordo com todas as outras pessoas aqui, concordo que você precisa de RAM e não pode trabalhar sem ela, mas também li o seguinte:

(Originalmente, eu queria carregar um sistema operacional sem RAM para verificar se a RAM estava com defeito, mas eu gosto da maneira como esta pergunta se esvai.)

Isso realmente existe no BIOS, existe uma função para verificar a RAM em profundidade. Ao inicializar e entrar no BIOS, altere a opção "Autoteste de inicialização rápida" para desativado e ele fará uma verificação completa na sua RAM. Essa opção deve estar localizada em "recursos avançados do BIOS", algo como a segunda opção nos BIOS da AMI.

Espero que isso lhe dê um passo adiante. ;-)

Olivier M.
fonte
3

Você não precisa de RAM, por exemplo, use uma máquina de Turing .

Uma máquina de Turing é um dispositivo hipotético que manipula símbolos em uma tira de fita de acordo com uma tabela de regras. Apesar de sua simplicidade, uma máquina de Turing pode ser adaptada para simular a lógica de qualquer algoritmo de computador e é particularmente útil para explicar as funções de uma CPU dentro de um computador.

(Eu não consideraria uma fita como RAM.)

Agora, suas perguntas reais devem ser perguntadas sobre "útil" e definir o que você quer dizer com "útil" .

Ian Ringrose
fonte
3
No nível conceitual de uma máquina de Turing, todos os tipos de armazenamento de dados de leitura e gravação são essencialmente equivalentes: RAM, registros, cache, fita magnética, disco. A única diferença entre eles é a velocidade de acesso.
Barmar 05/09
1
@Barmar RAM significa memória de acesso aleatório. Isso significa que você pode acessar as células dentro dela em qualquer ordem. As células de uma fita em uma máquina de Turing só podem ser acessadas sequencialmente (na direção ou alternadamente). Então, eu diria que a fita em uma máquina de Turing é, por definição, não RAM.
precisa saber é o seguinte
1
@ Barmar Isso está incorreto. A definição de RAM não permite tempos de busca. Portanto, a fita de uma TM simplesmente não se encaixa na definição de RAM, porque você não pode acessar células arbitrárias sem procurar.
kasperd
1
@ Barmar, a noção de tempo do relógio de parede pode não se aplicar, mas a noção de tempo, como requer O (n) operações de leitura para chegar lá, certamente o faz.
Psusi 29/10/14
1
@ Barmar, não, você não. É por isso que usamos a notação "O" grande para falar sobre complexidade puramente matemática que não está relacionada a quanto "tempo" algo real pode levar. O modelo matemático de uma unidade de fita nesta TM é tal que só pode ler ... em qualquer direção ... não aumentar o zoom para frente ou para trás, em qualquer quantidade de tempo. Portanto, se você leu o byte 1 pela última vez, não poderá ler o byte 27 sem antes ler os 26 bytes no meio. É por isso que não é ram. Se você deseja uma memória que possa ignorar esses 26 bytes, isso leva 0 tempo ou 5 minutos, isso seria ram, não uma fita.
Psusi 29/10/14
3

Existem sistemas operacionais especializados para uso incorporado que executam inteiramente a partir de uma ROM (apenas memória). Para fazer algo útil, no entanto, você ainda precisa de pelo menos uma pequena quantidade de RAM. Eu ainda não vi um PC que inicialize sem RAM.

Quanto à pergunta original sobre um teste de memória, se o computador fizer o POST (por exemplo, passar pelo autoteste de inicialização e tentar inicializar), o Memtest86 foi projetado especificamente para testar sua RAM. Ele testa os primeiros 64 KB de RAM, carrega-se nessa RAM e, em seguida, testa o restante da memória do sistema da maneira mais completa possível. A memória "Flakey" (ao contrário da memória simplesmente ruim) é incomum, mas vi o Memtest86 capturar um bit intermitentemente ruim que o teste de memória do computador perdeu (afinal de contas, o teste de memória POST deve ser concluído em um período de tempo razoável , enquanto o teste mais rápido do memtest86 é executado de 5 a 10 minutos, com testes mais abrangentes levando horas.)

user153822
fonte
1

Sim, você pode ter um computador sem RAM. Existe um modo especial na maioria dos processadores x86 que permite executá-lo apenas com cache. Se você verificar o coreboot (antigo linuxbios), ele poderá fazer isso. É chamado de cache como ram. Na verdade, você pode fazer um sistema operacional inteiro com base nisso e, com os caches modernos de grande porte, ele pode acabar tendo uma GUI (verifique o menuet-os). Mas nenhum fez isso ainda.

Jorge Aldo
fonte