一个操作系统的实现笔记:利用内存的大小设置页表的个数
这篇文章不长,主要是末尾的代码长,代码有兴趣可以看,没兴趣的看看文章内容便可。 利用内存的大小设置页表的个数的公式是:页表个数=内存大小÷4MB。 为什么是这样呢?首先,80386一个页的大小是4KB,页是通过页表来找到的,而一个页表中有1024个页,所以一个页表对应的物理内存就是4MB,所以页表个数=内存大小÷4MB,这样我们就可以克勤克俭用内存啦。 计算页表个数的代码是这几行: SetupPaging: ; 根据内存大小计算应初始化多少PDE以及多少页表 xor edx, edx mov eax, [dwMemSize] mov ebx, 400000h ; 400000h = 4M = 4096 * 1024, 一个页表对应的内存大小 div ebx mov ecx, eax ; 此时 ecx 为页表的个数,也即 PDE 应该的个数 test edx, edx jz .no_remainder inc ecx ; 如果余数不为 0 就需增加一个页表 其中[dwMemSize]中保存着内存大小的数值,获得内存的大小是程序的主要部分。 此程序采用调用15h中断获得内存大小,在调用中断15h之前,需要填充如下寄存器: ①eax:int 15h可完成许多工作,主要由ax的值决定,我们想要获取内存信息,需要将ax赋值为0E820h。 ②ebx:放置着“后续值(continuation