
Outra maneira de perguntar isso seria:
"por que discos rígidos, pen drives e SSD precisam de um esquema de partição e a RAM não?"
Só estou tentando entender melhor como funcionam todas as coisas da memória.
Responder1
Bem, o problema é um pouco mais complicado.
Primeiro, a suposição expressa na pergunta é falsa. Na verdade, discos rígidos e memórias flash não precisam de partições! Você pode simplesmente gravar dados brutos em um disco rígido e depois lê-los e tudo funcionará bem. Alguns sistemas de computador relativamente simples não usam partições até hoje, porque não há necessidade de usá-las. Por exemplo, tenho aqui mesmo na minha mesa um computador baseado no microcontrolador ATmega 162 e que usa flash fino sem partições.
Basicamente, o que as partições fazem é permitir a separação de responsabilidades trabalhistas entre os projetistas de sistemas. No meu 162, preciso saber onde cada bit de dados está armazenado e quantas vezes cada célula flash é acessada, para poder implementar o nivelamento de desgaste. Para fazer isso, nem preciso de arquivos. O problema, porém, é que meu computador em miniatura tem apenas 16 KiB de flash e essa quantidade pode ser gerenciada manualmente e com comentários no código-fonte. É como ter uma mesa com uma única gaveta. Posso colocar qualquer coisa lá e será fácil de alcançar e acessar.
Em um grande sistema de computador, como os computadores desktop atuais, o software é o produto do trabalho de milhares de programadores trabalhando separadamente. Eles precisam ter alguma forma de armazenar dados e é por isso que precisamos de arquivos e partições. Quando os temos, o programador pode se concentrar apenas nos dados com os quais precisa trabalhar e não precisa se preocupar em danificar outros dados. Ele pode permitir que os programadores que trabalham na programação de sistemas de arquivos se preocupem com o armazenamento físico de dados. Continuando com meu exemplo de gaveta, é como ter um sistema de depósitos e tentar encontrar um único item se você tiver centenas de milhares de itens em estoque. Então, embora você pudesse simplesmente acessar a gaveta simples e pegar um lápis, por exemplo, no estojo do armazém, o lápis estaria no armazém 3, seção P, prateleira 273, nível 3, caixa 5.
Espero ter deixado mais claro por que usamos partições, mesmo que na verdade não precisemos delas.
Agora, vamos passar para a RAM. Também não é verdade que não haja partições na RAM. A razão básica pela qual usamos partições é a organização e a RAM também é organizada. No caso da RAM, entretanto, é o kernel do sistema que decide para onde irá cada bit de informação e monitora o uso do espaço.
Vamos comparar como funciona um programa no meu ATmega 162 simples e como funciona um programa em um sistema operacional moderno como o Windows. No 162, o programa é pré-programado com endereços de locais de memória que irá utilizar para armazenar dados. Como o 162 possui apenas um programa, não preciso me preocupar em sobrescrever dados usados por outro programa ou com a alocação de memória. Posso simplesmente escrever o que quiser em cada célula de memória e isso permanecerá lá enquanto o computador estiver funcionando.
Por outro lado, no Windows podemos ter um grande número de programas rodando ao mesmo tempo e todos eles estariam gravando e lendo dados na memória. Isto é, não podemos permitir que programas individuais acessem diretamente células de memória (e o fato de que o programador teria que saber como acessar a memória daquele computador específico e quanta RAM esse computador possui e assim por diante. Neste ponto, obtemos de volta à discussão de milhares versus um programador.). Em vez disso, quando cada programa é iniciado, o kernel aloca memória para ele e para o programa, parecendo que é o único programa em execução no computador. O Kernel existe para garantir que nosso programa não tente ler ou gravar memória fornecida a outros programas e que não tente executar memória marcada como dados e que não coloque todo o sistema em perigo. Então, basicamente, no Windows e em muitos outros sistemas operacionais modernos, cada programa obtém sua própria partição de RAM. Também é interessante notar que em sistemas de 32 bits, cada programa poderia ocupar apenas até 2 GiB de RAM, porque esse era o limite superior do tamanho da "partição".
Gostaria de fazer aqui uma pequena digressão. Existem alguns programas que são prejudicados por partições na RAM. Por exemplo, existiam programas chamados treinadores que permitiam trapacear em jogos de computador. Eles trabalharam encontrando o local da memória onde o jogo armazena seus dados, por exemplo, número de vidas ou saúde e então acessavam diretamente os dados e os alteravam. Por outro lado, também tínhamos vírus que tentavam acessar a memória usada por serviços importantes do sistema e corrompê-la para permitir-lhes realizar seus atos nefastos.
Outra coisa que vale a pena mencionar é o arquivo de paginação ou partição swap. Para um programador que escreve uma aplicação, não é importante se o programa está em arquivo de paginação ou em RAM, porque o kernel cuida disso. No meu ATmega 162 a situação é um pouco mais complicada. Quando preciso usar mais RAM do que está disponível, devo primeiro detectar manualmente a situação em que usei toda a RAM, depois disso preciso copiar manualmente os dados da RAM para o flash, liberar a RAM e usá-la para qualquer coisa que eu precisar usá-lo, liberá-lo novamente, mover dados do flash para a RAM e, em seguida, liberar espaço ocupado na memória flash. Em um computador desktop, o programa nem consegue ver se foi transferido para o disco e depois movido de volta para a RAM.
Mais uma coisa interessante é o desempenho. Voltemos ao exemplo da gaveta e do armazém. Vamos pegar todos os itens de nossos armazéns e jogá-los em uma pilha. Então se precisarmos tirar um lápis da gaveta, basta abrir a gaveta e pegar o lápis. Se precisarmos pegar um lápis específico de uma pilha de milhares de outros lápis, cadernos, réguas, barras de chocolate, borrachas e tudo mais, teremos que gastar um tempo considerável procurando por ele. Esse tempo (em média) é muito maior comparado ao tempo necessário para encontrar o mesmo lápis em um armazém bem organizado. Por outro lado, o tempo necessário para encontrar o lápis num armazém organizado é muito maior do que o tempo necessário para encontrar o lápis numa gaveta. Portanto, alguns métodos funcionam bem com pequenas quantidades de dados e outros funcionam bem com grandes quantidades de dados. Os sistemas de arquivos melhoram o desempenho armazenando dados de maneira lógica no disco, no qual cada dado individual pode ser facilmente encontrado. Alguns sistemas de arquivos também oferecem outros benefícios. No caso do JFFS2, um sistema de arquivos projetado para memórias flash, o sistema de arquivos implementa o nivelamento de desgaste para que o usuário ou o hardware projetado não precise fazer isso.
Outra coisa interessante é que também podemos usar sistemas de arquivos padrão para RAM! Existem programas que ocupam a RAM e a organizam como um sistema de arquivos e permitem que os programas a utilizem como se fosse espaço em disco.
Alguns links interessantes: Artigo sobre gerenciamento de memória da Wikipedadescreve como e por que os dados na RAM são particionados. Artigo sobre sistema operacional, seção de memóriaexplica por que precisamos de coisas como segmentação de memória, paginação de memória virtual e assim por diante.
Responder2
Para simplificar demais, a RAM tem um esquema de layout, mas é abstraído pelo hardware.
Internamente, a RAM é organizada como uma matriz de “células de memória” dispostas em linhas e colunas, como uma planilha. Cada célula de memória é usada para armazenar um bit de dados, que pode ser recuperado instantaneamente indicando a localização (ou endereço) da linha e coluna dos dados.
Isso não é muito diferente do conceito básico de como funciona o armazenamento de longo prazo; o sistema de arquivos e os mapas de partição são simplesmente uma abstração para evitar que você tenha que acessar diretamente o disco bruto.
Responder3
Um esquema de particionamento foi criado para discos rígidos para que você possa instalar vários sistemas operacionais incompatíveis que podem coexistir em diferentes partes do mesmo prato. Pen drives e SSDs herdam o esquema do disco rígido, seu primo mais velho.
Para computadores pessoais, normalmente a RAM é usada apenas por um sistema operacional por vez e, portanto, não existe um esquema de particionamento para ela. Mas mesmo assim em alguns computadores grandes (mainframes), também existe um esquema de particionamento para RAM.
Responder4
A RAM não necessita de particionamento porque está organizada em páginas e essas páginas são estruturadas dinamicamente (MMU) sem a necessidade de pré-alocação de áreas. No entanto, há algum tipo de particionamento efêmero acontecendo com a RAM quando os componentes de hardware, principalmente algumas placas gráficas, mas pode ser qualquer coisa, reservam uma parte da RAM física antes da inicialização do sistema operacional.
Na verdade, discos rígidos, pen-drives ou SSDs também não precisam de um esquema de partição, ou pelo menos não deveriam. Ainda existem componentes inevitáveis, como o BIOS (ou firmwares equivalentes) e carregadores de inicialização que exigem que uma tabela de partição esteja lá para funcionar corretamente, mas, caso contrário, as partições só são necessárias devido às limitações de design dos sistemas operacionais (mais precisamente, sistemas de arquivos e gerenciador de volume).
O conceito de pool ZFS demonstrado que as partições não são necessárias mesmo se você quiser inicializar vários sistemas operacionais e se esses sistemas operacionais exigirem vários volumes e sistemas de arquivos.
As partições só serão necessárias se as unidades forem usadas por um ou mais sistemas operacionais que não suportam ZFS (ou um equivalente hipotético).