linux内核源码学习

linux内核源码学习

ID:32866026

大小:682.48 KB

页数:24页

时间:2019-02-16

linux内核源码学习_第1页
linux内核源码学习_第2页
linux内核源码学习_第3页
linux内核源码学习_第4页
linux内核源码学习_第5页
资源描述:

《linux内核源码学习》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux内核源码学习--浅谈内存管理郭帆学习步骤•理论调研•Linux内核的整体结构•每个子系统的功能及子系统之间的联系•子系统的组成模块及对应的详细功能和基本原理•源码阅读(针对特定子系统)•模块分解(找到相应的源文件)•熟悉主要数据结构•阅读源码第一阶段:理论调研•目标•熟悉Linux内核的整体架构•熟悉各个子系统的功能及相互之间的联系•熟悉子系统内部的模块组成及功能•方法•阅读经典书籍:《Linux内核设计与实现》、《深入理解Linux内核》等•博客、论坛等.1.1Linux内核架构•Linux内核特点:模块化、分层、耦合度高1.2Linux内存管理--机制•Linux采

2、用页式内存管理•应用给出的地址是虚拟地址,需要通过查询页表转换成物理内存地址1.2内存管理子系统--功能•功能:提供对虚拟内存空间和物理内存的管理0GB3GB4GBKernel虚拟内存VirtualAddressSpaceUserSpace(Stack,Heap...)Space管理LinearMappedPageMapped物理内存PhysicalMemory管理0GB1GB4GB1.2内存管理子系统--架构1.3内存管理子系统--子模块•物理内存管理•物理内存页分配、回收、迁移、交换•虚拟内存管理•虚拟内存分配、内存映射、页表管理、虚拟空间管理•页缓存管理•页缓存的分配、管理

3、、预取、访问•异常管理•内存相关的异常管理机制1.3子模块分析--分配与映射•C语言中的malloc在内核中包含两步•分配虚拟地址区间•访问虚拟地址时分配物理页,建立页表映射•malloc(<128KB)操作的执行流程•用户态•应用调用malloc申请内存->malloc从空闲堆空间缓冲区链表申请内存,若有内存则返回,若不足则调用sys_brk()扩充进程的堆空间•内核态1.在mm_struct中的堆上界brk延伸到newbrk:即申请一块vma,vma.start=brkvma.end=newbrk2.当进程访问其中某个虚拟地址,触发缺页中断再申请物理页并进行映射第二阶段:源码

4、阅读•目标•熟悉每个源文件的功能•熟悉主要数据结构•详细分析特定模块的源码•方法:•从点切入,追踪调用路径•用调试手段分析源码(printk、kgdb、dump_stack)•仔细阅读注释,参考源码解读2.1源文件分类•物理内存管理•内存分配•page_alloc:伙伴分配系统•debug-pagealloc:伙伴分配系统辅助函数•slab、slub、slob:基于伙伴系统之上的内存分配算法•huge_memory、hugetlb:大页模式的支持(分配)•slob:用于嵌入式的简单内存分配器•slab_common:slab和slub共用的功能函数•bootmem:启动期间的内存

5、分配器•memblock:初始化期间物理内存块的管理,是对bootmem的改进替代•mmzone:managementcodesforpgdats,zonesandpageflags•mempool:内存池,内存资源极度紧张情况下使用,可保证无死锁、内存分配不会失败•...2.1源文件分类•物理内存管理•内存回收与迁移•vmscan:内存回收算法•compaction:内存碎片整理(调用migrate)•migrate:MemoryMigrationfunctionality•内存交换•swapfile:内存页交换到硬盘空间•swap:对物理页换入换出的支持函数2.1源文件分类•

6、虚拟内存管理•页表(映射)建立与管理•memory:页表映射管理(MMU)•huge_memory、hugetlb:大页模式的支持(映射)•rmap:physicaltovirtualreversemappings•mmap:虚拟空间内存管理(structmm_struct/structvm_area_struct)•mempolicy:内存映射策略•vmalloc:虚拟内存分配•bounce:高端内存的临时映射访问机制•highmem:Highmemoryhandlingcommoncodeandvariables•pagewalk:页表遍历函数•pgtable-generic

7、:页表帮助函数•mmu_context:任务的内存地址空间切换•init-mm:初始化进程的内存地址空间2.2主要数据结构分析•与物理内存管理相关的数据结构•内存节点描述符:structpglist_data•记录每个内存(CPU)节点的内存情况,例如包含几个内存区域(zone),以及node内的页框数•内存区域描述符:structzone•记录单个内存节点内部不同用途的内存区域,例如ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM•页描述符:structpag

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。