Linux内核学习小记-1
内存映射
在Linux系统中mmap来实现,该函数的原理包括以下几个关键步骤:
1、虚拟内存区域创建:系统首先在进程的虚拟地址空间中寻找一段满足要求的连续空闲虚拟地址,然后为这段虚拟地址分配一个vm_area_struct结构,这个结构用于描述虚拟内存区域的各种属性,
如起始地址、结束地址、权限等,并将其插入到进程的虚拟地址区域链表或树中;
2、地址映射建立:通过待映射的文件指针,找到对应的文件描述符,进而链接到内核 “已打开文件集” 中该文件的文件结构体。再通过这个文件结构体,调用内核函数mmap,定位到文件磁盘物理地址,
然后通过remap_pfn_range函数建立页表,实现文件物理地址和进程虚拟地址的一一映射关系;
3、数据加载就是缺页处理:
当进程首次访问映射区域中的数据时,由于数据还未在物理内存中,会触发缺页异常。内核会捕获这个异常,然后在交换缓存空间(swap cache)中寻找需要访问的内存页,如果没有找到,则调用nopage函数把所缺的页从磁盘装入到主存中 。
slab分配器
slab 分配器的工作机制基于对象复用和缓存技术。它预先分配一组相同大小的内存块,将这些内存块组成一个缓存(Cache),每个缓存专门用