桌面电脑操作系统开发笔记(2)——系统内存表
来源:互联网 发布:谷歌算法 编辑:程序博客网 时间:2024/06/11 01:13
作为系统资源的管理者,操作系统需要知道系统的所有可用内存,这一般通过BIOS中断服务int 15h,AX=0xE820获得。
这个中断服务的资料请参见:
http://www.ctyme.com/intr/rb-1741.htm
http://wiki.osdev.org/Detecting_Memory_(x86)
这个中断调用的输入参数:
EAX=0E820h
EBX=(第一次调用时设为0,否则沿用BIOS返回的值)
ECX=可以存放内存表项的大小(字节),至少20,也可能是24
EDX=‘SMAP’(534D4150h)
ES:DI=存放内存表项的内存位置
返回参数:
进位标志CF=0成功,CF=1失败(AH为错误码)
EAX=‘SMAP’(534D4150h)
EBX=0获取完成,否则用于获取下一项
ECX=实际填充的字节数
ES:DI指向的内存被填充一个表项,其格式为
| 偏移 | 字节数 | 内容 |
| 0 | 8 | 内存区域首地址 |
| 8 | 8 | 内存区域大小(字节) |
| 16 | 4 | 内存区域类型(1为可用,其余为不可用) |
| 20 | 4 | (可能不返回)ACPI内存区域类型(参考ACPI规范) |
可以看到,调用这个中断服务需要用到32位寄存器。不用担心,386之后的CPU在实模式下也可使用32位寄存器的(这样的指令的机器码会有改变默认操作数大小的前缀0x66)。
但是获得的系统内存表可以放在什么内存位置呢,一般来说,现在的电脑的0x200到0x90000的内存都是可供操作系统使用的。电脑的0~0x1FF被实模式的中断向量表IVT占用。
关于实模式可寻址的低1MB内存的可用性(availability)及用途,可参考http://wiki.osdev.org/Memory_Map_(x86)
OSDEV论坛(http://f.osdev.org/viewtopic.php?f=1&t=7136)有人发现E820可能在极少数机器上不可用,这个时候我们可以学Windows那样用E881或E801作为后备方法。
int 15h, AX=0E801h: Phoenix BIOS v4.0 - GET MEMORY SIZE FOR >64M CONFIGURATIONS:http://www.ctyme.com/intr/rb-1739.htm
int 15h, AX=0E881h: Phoenix BIOS v4.0 - GET MEMORY SIZE FOR >64M CONFIGURATIONS (32-bit): http://www.ctyme.com/intr/rb-1742.htm
- 桌面电脑操作系统开发笔记(2)——系统内存表
- 桌面电脑操作系统开发笔记(5)——ACPI
- 桌面电脑操作系统开发笔记(1)——MBR和VBR
- 桌面电脑操作系统开发笔记(3)——实模式纯文本用户接口
- 桌面电脑操作系统开发笔记(4)——进入32位保护模式
- 国产操作系统——中科方德桌面操作系统
- 操作系统学习笔记(23)--系统内存获取
- 操作系统--内存学习笔记(2)进程内存管理--虚拟内存
- 现代操作系统笔记2(操作系统概念和系统调用)
- 电脑精简桌面——侧边栏
- uC/OS-II系统学习笔记(2)——实时操作系统概念中篇
- 操作系统—内存管理
- windows操作系统,可用内存占用很多(即可用内存越来越少),系统为什么会卡?表现为电脑反应很慢,不应该是内存只要不占满,电脑就不卡吗?
- Android开发学习笔记(十二) 获取系统可用内存
- MATLAB中改变默认工作路径(Current Folder)的2种方法 软件版本:MATLAB2012b 电脑系统:win8.1 方法一: 1. 桌面快捷方式——右键“属性”——在选项卡里选“快
- Java桌面开发笔记
- 2、操作系统内存管理——分页
- 操作系统——内存管理(四)
- Java 多线程:extends Thread Class & implements Runnable Interface
- js加减乘除丢失精度问题
- 关于IOS7显示坐标问题
- 九度 题目1504:把数组排成最小的数
- 谷歌创始人年度公开信:搜索仍是谷歌的核心
- 桌面电脑操作系统开发笔记(2)——系统内存表
- warning no newline at the end of file
- js自定义对象(二)
- 关于S5PV210的 FIMD 对应 的 framebuffer 驱动,fb0,fbx的一篇很好的文章收藏
- storm-0.9.1 集群安装
- Android 动画特效集合
- ProgressDialog调用dimiss经常不能消失
- apache的xml-rpc(Demo实例)
- oracle先判断数据是否存在再插入