数据结构论坛

首页 » 分类 » 常识 » 一口气搞懂Linux内存管理,就靠这
TUhjnbcbe - 2023/8/7 19:57:00
白癜风暑假治疗 http://baidianfeng.39.net/a_yqyy/220415/10616274.html

按:基于x86处理器上,以系统启动过程中内存管理的逐步构建为主轴,分析内存的管理方式与其相关的安全防护功能。

1、如何知道计算机内存布局?内存空间有多少?

春江水暖鸭先知,计算机上电启动的时候,BIOS会检测并计算物理内存大小。比方说现在通用的内存都是DIMM针脚插槽类型的,它的PIN针脚有两百多个,各个针脚各有自己的定义,BIOS就是通过对不同针脚的高低电平设置,由内存反馈其规格信息给BIOS,然后BIOS计算出容量。大概原理就这样了。但是我们重点是操作系统需要感知主机的内存空间,它是怎么知道的呢?它是通过BIOS提供的接口去询问出来的。这个接口就是0x15中断,其中参数重点参数是ax寄存器中需要设置值。然后通过intcall(0x15,irg,org)中断调用,由BIOS通过org.di出参将内存信息返回回来。该实现在/arch/x86/boot/mmory.c中的dtct_mmory,由于代码出参org.di也是irg.di传进去的值,所以代码里面直接读了buf空间内存。由于每调用一次intcall只会返回一条内存数据信息,所以会循环调用多次才能够探明整个内存空间。

2、何时去探明内存布局?由谁去探明呢?

内存探测必然是krnl吗?答案是否定的。先说一下krnl的binary文件吧,它通常放在/boot/下面,名字通常命名为vmlinuz。这个文件是由stup.bin和vmlinux构造而成,其中vmlinux又由krnl编译目录arch/x86/boot/

1
查看完整版本: 一口气搞懂Linux内存管理,就靠这