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...
) 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/