发新话题
打印

关于存储管理的疑问

关于存储管理的疑问

虚拟空间3-4G用做内核空间,其中一部分用来映射实际的内存(简化点说,如果是小内存,前面对应内存,后面用做vm_area分配的地址空间;如果是大内存,4G最后还包括高端映射等)
我的问题是
1:映射内存的含义是不是说,当前内存中的数据是什么,虚拟空间高1G对应着内存的那部分内容就是什么,两者实时更新,一直相等?
2:alloc_pages(分配策略,每次分配的页数量)  返回的是mem_map[]数组里的一个page值,并由这个值找到对应着的4K空间?alloc_pages()既可以分配系统空间,也可以分配用户空间,在调用alloc_page()函数时,仅仅是找到一个可用的4k空间,而对返回的页面做何用途并不关心。具体它做何用途,对应什么虚拟地址,由set_pgd,set_pmd,set_pte三函数建立的映射关系来决定。也就是说,在任意时刻,内存中,除了最前端的硬件和内核保留的地址空间,其余部分都是动态调整的。这部分动态调整的物理空间,可以包括所有的虚拟地址空间。可能相临的两个PAGE,一个用于对应内核空间,一个对应用户空间。如果是这样的话,相同的分配条件下,为什么说内核空间资源比用户空间宝贵呢?完全可以需要一个就分配一个啊。
3:本质上,无论什么内存分配方式,都是在这个动态的内存区域内(对应全局mem_map[]数组)找到空闲的4K(如果是slab的话,大小就不定),将其与某个线性地址建立映射。也就是说,所有的分配方式,最终都可以统一到alloc_page函数的调用上来。如果做一个简化的话,内核中可以仅仅用一个alloc_page()解决所有问题。
4:通用缓冲队列,专用缓冲队列各自分配的空间是怎么安排的?各自对应什么线性地址,实时存于内存的什么位置?是有规律的连续存放还是能以4k为单位,分散存储?它们与普通的alloc_page()分配的空间是分开的还是重叠的(即是不是某个空间就是事先留出来给缓冲队列用的)?
5:内核镜像包括内核所有用到的数据结构,如vm_area_struct,vm_area等。这些数据结构本身也需要内存。比如,一个vm_area需要站用100个字节。这100字节空间的分配过程是怎样的?一些自己的想法和问题,提得有点乱,估计有很多想法是错误的。与大家讨论,请大家解惑。


问题要规范并细化,回贴更方便。
对于第5个,我先说一点,数据结构是一种对数据元素抽象的描述方法,与传统的语言中的数据类型有所不同,它是一个构造蓝图,不同的语言有不同的实现方法,数据结构中规定了三个要件:数据成员的个数及类型、数据元素之间的联系、定义在由此种数据结构实现的构造类型的操作。
实现之后,指的用它描述数据元素后才占内存,没实现之前是程序员之间的设想,所以说数据结构本身不占内存,实现才考虑组成、操作、宽度等问题。
下面的DS实现只展现了组成、联系、没有操作(因为是C,有类就好了)、大约宽度(与CPU的架构有关)
struct vm_struct {
26         void                    *addr;
27         unsigned long           size;
28         unsigned long           flags;
29         struct page             **pages;
30         unsigned int            nr_pages;
31         unsigned long           phys_addr;
32         struct vm_struct        *next;
33 };
34 “内核镜像包括内核所有用到的数据结构,”自然也就不对了,因为做不到。
分配方式决定分配过程,vm_area_struct,vm_area这两位分属两地,vmalloc 分配的空间被称为内核虚拟地址,vmalloc 分配的内核空间,其结构是 vm_area,用户空间malloc 分配的的结构 vm_area_struct ,前者由内核页表映射,而后者则由用户页表映射,二者要转换,进行下去,比如是否有缺页等,这些需求是与两类进程联系在一起的。
欢迎你常来讨论问题,这是所有爱好开源的人沟通的第二课堂,欢迎大家接着讨论问题。

提供两个图,版权属于所有者,不属于我。

附件

Fid_255/255_5023.png (83 KB)

2007-2-1 07:29

Fid_255/255_5023.png

Fid_255/255_5024.png (53 KB)

2007-2-1 07:29

Fid_255/255_5024.png

2、宝贵?-----进程竟争的结果。
多看看深入理解linux内核源代码
发新话题