OS开机获取当前计算机的内存信息是一件很重要的事情,因为分页机制要用到它。来看看Linux是怎么做的吧 。
读了0.11内核的人应该注意到了,linus使用int 0x15 ah = 0x88中断调用获取扩展内存的大小,代码极其简洁:



这个方法真得很简单,而且不用担心BIOS不支持(该调用从286时代就存在了!)但它有个致命缺陷:ax的单位是KB,而只有16位的ax所能表示的扩展内存上限仅有2^(16+10) = 64M!
这在当时也许是足够了(偶99年买的电脑才32M!!!),不过放在今天大概没人愿意接受。不幸的是当时PC机的BIOS确实也只能支持到这一步(他们都认为64M足够了- -)。
那么我们来看看新时代的内存信息获取方法吧。
时间再向后一点,到1994年。新的BIOS开始支持一种新的中断调用,那就是int 0x15 ax = 0xe801。
该方法终于能够支持64M以上的扩展内存了,2.33.4.4的代码如下: