一口气搞懂Linux内存管理,就靠这

济南白癜风医院 http://pf.39.net/bdfyy/tslf/210306/8720455.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/


转载请注明:http://www.92nongye.com/xxnr/xxnr/204627216.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了