BIOS关于获取内存信息的调用

本文介绍了Linux系统如何通过不同的BIOS中断调用来获取内存信息,包括int 0x15 ah=0x88、int 0x15 ax=0xe801和int 0x15 ax=0xe820。早期的0x88中断只能获取到64MB内存,而0xe801和0xe820分别支持更大内存,并且0xe820还能获取内存分布。Linux内核会尝试这些方法来确保获取完整的内存信息。
摘要由CSDN通过智能技术生成

OS开机获取当前计算机的内存信息是一件很重要的事情,因为分页机制要用到它。来看看Linux是怎么做的吧 。

读了0.11内核的人应该注意到了,linus使用int 0x15 ah = 0x88中断调用获取扩展内存的大小,代码极其简洁:

mov  ah, 0x88
int  0x15
mov  [2], ax

 

这个方法真得很简单,而且不用担心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的代码如下:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值