(11 page pdf) by Andi Kleen
discusses where memory is used in Linux.TL;DR:
$ dmesg | grep -m1 Memory
[ 0.000000] Memory: 640332k/655296k available (4317k kernel code, 14512k reserved, 1905k data, 392k init, 0k highmem)
(The output above is from running a custom 3.0.8 kernel in Virtual Box)
The amount of memory called "reserved" is reserved for the kernel and not available for user space. This should roughly account for the difference between your total physical memory and the total memory reported by the "free" program or by "cat /proc/meminfo".
In this same example, free reported:
total used free shared buffers cached
Mem: 642256 30004 612252 0 824 11464
-/+ buffers/cache: 17716 624540
Swap: 0 0 0
The difference (in k) is:
which does correspond to the 14512k that was reserved. Notice that the actual difference is smaller which means the kernel was able to give some memory back to user space after it started. It used to be that this amount would be reported as "init" in the dmesg line, but it appears that the kernel is now able to give even more back.
I don't know why your reserved size is so much larger (assuming it is). I tested a 2.6.36-1-mepis-smp kernel in Virtual Box and it too reserved about 15 Meg. OTOH I've seen some system with a reserved size similar to yours. I've also seen some references to 128M being reserved to implement noncontiguous memory allocation and fix-mapped linear addresses. Perhaps this would explain the large discrepancy. It is certainly is the right size.