关于LINUX运行时线性空间及物理内存存储的分布问题
|------------|--------------------|---------------------------|------------|-----------|
| 3G 3G+MEM | | |
|进程空间 | 物理内存映射 | 非连续VMALLOC分配区 | 高端分配 | 固定映射 |
|--------------------------------------------------|
省略了各gap部分
我对其中的内存映射部分不是很清楚
以下只是我自己的理解画出的图,不对之处请大家指正!
|--------|---------------|-------|------|------------|----------------------|
| 640K | | 1M | |
| RAM | 图形卡存储空间| 空白 | BIOS |kernel image| 空白 |
| | | | | | |
|---------------------------------------|
暂时先想到以下几个问题:
1其中空白部分就是由kmalloc动态分配的部分?
2kernel image大小是多少?
3mem_map[]存放的位置通常在zone_normal开始的位置,怎么理解?
4zone_normal是在物理空间16M的位置,是不是说在右边空白部分从16M开始存储mem_map[]数组(大小由内存大小决定)?
5mem_map[]中一个项对应一个page,那它本身占用的空间是否也要由某个page指定?
不知道表达得是否清楚,好象也没找到将这块内容介绍得很清楚的书。希望大家帮我解惑!谢谢了!
------解决方案--------------------1其中空白部分就是由kmalloc动态分配的部分?
2kernel image大小是多少?
3mem_map[]存放的位置通常在zone_normal开始的位置,怎么理解?
4zone_normal是在物理空间16M的位置,是不是说在右边空白部分从16M开始存储mem_map[]数组(大小由内存大小决定)?
5mem_map[]中一个项对应一个page,那它本身占用的空间是否也要由某个page指定?
=======================================
1.kmalloc分配的是slab_cache的空间,线性地址是3G以上,物理地址是可分配的物理空间.640K内的部分内存也是可分配的.
2.内核映象可大可小.一般1M到3M不等
3.mem_map本来可以随便放的,但是他是全局的内核数据,所以不应该占用DMA内存.再次因为它分配的很早(在内存管理相关机制完全建立起来前),所以就分配到了zone_normal开始处了.如果分配到zone_normal的其他地方也是可以的.
4.见3.
5.当然了.