Ubuntu 9.04 vs Memoria RAM - Valores diferentes [Resolvido + explicação]

Iniciado por JoelS, 05 de Junho de 2009, 21:05

tópico anterior - próximo tópico

JoelS

Oi amigos, tudo bom?!

Antes, deixe-me defender. xD Eu sei que tem vários tópicos sobre o não reconhecimento de memória RAM pelo Ubuntu. Mas o meu problema não passa pelo que tenho visto em geral por aí, ou seja, meu sistema não é 32 bits.

Vou falar tudo que for possível pra ver se podem me ajudar. Vamos lá...

Meu computador é um Dell Inspiron 1525 + Core 2 Duo T5750 2.00 GHz. Tenho 2GB de RAM em dois bancos de memória.
O comando "uname -a" me retorna:

Linux welson-laptop 2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:58:03 UTC 2009 x86_64 GNU/Linux

Em dicas lidas aqui mesmo no fórum recomendavam instalar o kernel do Ubuntu Server. Eu não tentei fazer isso, mas vi que resolvia o problema de quem tinha o sistema baseado em 32 bits. O meu é x86-64, como podem ver acima.

Quando abro o "gnome-system-monitor", aparece que tenho no máximo 1.9GB de RAM!!! Ou seja, estou "perdendo" 0.1 GB de RAM. Tá, não é nada demais, mas eu fiquei preocupado de não reconhecer 2GB, como era reconhecido no Intrepid 8.10 x86-64.
Rodei o comando "hwinfo" e entre outras coisas, veio isso aqui:

10: None 00.0: 10102 Main Memory
  [Created at memory.61]
  Unique ID: rdCR.CxwsZFjVASF
  Hardware Class: memory
  Model: "Main Memory"
  Memory Range: 0x00000000-0x7f66cfff (rw)
  Memory Size: 1 GB + 1008 MB
  Config Status: cfg=new, avail=yes, need=no, active=unknown


Quando rodo o comando "lshw", ele me mostra outra coisa diferente.

     *-memory
          description: System Memory
          physical id: 1000
          slot: System board or motherboard
          size: 2GiB
        *-bank:0
             description: DIMM DDR Synchronous 667 MHz (1.5 ns)
             product: HYMP112S64CP6-Y5
             vendor: AD00000000000000
             physical id: 0
             serial: 00003051
             slot: DIMM_A
             size: 1GiB
             width: 64 bits
             clock: 667MHz (1.5ns)
        *-bank:1
             description: DIMM DDR Synchronous 667 MHz (1.5 ns)
             product: HYMP112S64CP6-Y5
             vendor: AD00000000000000
             physical id: 1
             serial: 04004048
             slot: DIMM_B
             size: 1GiB
             width: 64 bits
             clock: 667MHz (1.5ns)


Rodei o "memtest86+", porque imaginei que poderia ter alguma coisa estragada, mas ele reconhece os 2GB na moral também. Nada de problemático. No entanto, quando rodo ele, ele me fala que tem "74 MB" reservados, mas não sei reservado pra que. Daí... rodei o comando "dmesg" e me veio isso (entre outras coisas)

[    0.004000] Memory: 2016216k/2087348k available (4760k kernel code, 492k absent, 70012k reserved, 2540k data, 536k init)

Foi então que vi os 74MB reservados, creio eu.

Só pra desencargo de consciência, fiz "free -m" e veio

             total       used       free     shared    buffers     cached
Mem:          1977       1182        795          0         41        775
-/+ buffers/cache:        364       1613
Swap:          972          0        972


A minha questão, finalmente, é: o meu sistema tem mesmo 2GB de RAM ?! Se tem, porque então em diversos locais me indica o contrário e em apenas dois (memtest86+ e lshw) me falam do contrário?! Será que esses 1,9GB é "problema de arredondamento" mesmo ?!


Desculpem-me pelo post extenso, mas essa dúvida tá me martelando.


Valew...

JoelS

#1
Bom, conversando com outros amigos lá da minha sala (curso Ciência da Computação) pensei que pode ser uma outra coisa.
Relembrando a aula de Sistemas Operacionais...

Cada dispositivo de E/S tem registradores que servem para bufferizar os dados antes de serem emitidos/usados pelo dispositivo ou pela CPU. No livro do Tanenbaum eu li que a partir do Pentium Pro todos os registradores dos dispositivos de E/S são mapeados na memória principal também. Digo "também" porque você pode fazer acesso ao registrador de E/S diretamente, mas apenas em linguagem Assembly. A vantagem de poder ser mapeado em memória é que com uma linguagem de programação como C ou C++ você também pode acessar esses registradores, afinal, um "alias" para ele está em memória. Daí que se torna possível criar drivers em C, C++ ou Python... qualquer linguagem que faça uso de ponteiro ou outra estrutura de dados compatível.
Sendo assim, essa "perda" de memória poderia ser por causa disso. Ainda mais que minha máquina é nova e tem uma porrada de dispositivo (bluetooth, wireless, RJ-45, modem, S-Video, HDMI, placa de som, placa de vídeo - essa que deve "roubar" mais porque é onboard -, tela do LCD, saída VGA, etc).

Tem também uma área de memória que não é usável normalmente, porque o SO (todo SO faz isso) reserva os endereços mais baixos para uso próprio, que é onde ele normalmente carrega os próprios módulos. Essa área é protegida pra evitar acesso ilegal.

Bom, mas então onde isso entra na solução do meu problema? Eu dei uma olhada melhor no comando "free" e coloquei pra mostrar em kilobytes. Veja o que tive:

             total       used       free     shared    buffers     cached
Mem:       2025128     846676    1178452          0      22236     457460
-/+ buffers/cache:     366980    1658148
Swap:       995988          0     995988


Tenho de memória 2.025.128 kB. Isso dá aproximadamente dois gigas mesmo. Dois gigas cravados (em kilobytes) seriam 2.097.152 kB (2 * 2^20). Tirando então o que tenho reservado pra outros dispositivos e pro kernel, daria 72.024 kB, que está bem próximo do que me mostrou o comando "dmesg"

[    0.004000] Memory: 2016216k/2087348k available (4760k kernel code, 492k absent, 70012k reserved, 2540k data, 536k init)

Mas eu disse no meu outro post que no Intrepid mostrava os 2GB e que agora não. Pois é... aqui entra outra coisa. Normalmente os SOs buscam essa informação acessando a BIOS. Lá tem mesmo 2038MB (não chega a 2048MB... questões técnicas também). O que achei interessante de o Jaunty me mostrar os 1.9GB é que ele tá me mostrando exatamente o que tem disponível pra eu usar e abusar!!! ;)
Ele fez a contagem da memória corretamente e, creio eu, está usando toda a máxima extensão dela. É claro, eu como usuário não gosto de abrir o System Monitor e ver que tenho "apenas" 1.9GB de memória total, mas deixando de pensar como um louco por memória e racionalizando (e relembrando das aulinhas da faculdade... :P) posso concluir que o que está sendo feito é o correto. E que preciso deixar de mimimi e aceitar, porque é assim que as coisas funcionam.

Mas fica aqui a minha pergunta: isso está mesmo certo ?! Eu preciso que outras pessoas que tenham a mesma versão do SO e kernel que eu e que tenha também 2GB de RAM pra me falar. No de vocês aparece 2GB mesmo ou menos, como acontece comigo?
Meu GNU/Linux é o Jaunty Jackalope, x86-64, kernel 2.6.28-11-generic.

Como está acontecendo com vocês meu amigos!?


Valew... o/

JoelS

Comparei os valores de memória com mais outras máquinas que têm a mesma configuração da minha. Em hard e soft.
E nessas máquinas o mesmo "problema" existe. Sendo assim, meu segundo post está correto (tive o cuidade de conferir na literatura sobre SO o esquema de registrador mapeado em memória e é aquilo mesmo) e o que acontece no Ubuntu 9.04 x86-64 é que ele não busca mesmo o valor da BIOS. Ele calcula isso dinamicamente. Excelente!!! Assim o usuário não é enganado e sabe exatamente o quanto de memória tem para trabalhar.


Valew... o/

Gunfree

Adendo: Isso é apenas o arredondamento mesmo. O mesmo vale para HDs e etc. Uma curiosidade boa, é rodar um df -h e depois um df -H. Note a clara diferença.
Linux Registered User: #491793