欢迎来到天天文库
浏览记录
ID:49378798
大小:342.00 KB
页数:79页
时间:2020-02-04
《Linux内核分析.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Linux内核分析Linux引导和初始化Linux引导简述Linux初始化(head.S)0~0xfff0x1000~0x9ffff0xa0000~0xbffff0xc0000~0xc7fff0xf0000~0xfffff0xc8000~0xdffffLinux引导和初始化0~0x1000:BIOS0xa0000~0xbffff:VideoRAM0xc0000~0xc7fff:VideoROM0xc8000~0xdffff:ExtensionROM0xf0000~0xfffff:SystemROM内核映像驻存在:0x100000~Linux引
2、导和初始化段寄存器初始化CS,DS,ES,SS保护模式初始化EnableMMU映射0x0~0x8000000xc0000000~0xc0800000.根据ABI386标准,系统空间从0xc0000000开始。内存管理Linux虚拟空间结构0xc0000000~0xf7ffffff(系统空间)用户空间(低3G空间)用户空间(低3G空间)用户空间(低3G空间)内存管理0xc0000000~0xf7ffffff:系统空间,896M0xf7ffffff~0xffffffff:用于vmalloc,128M内存管理系统空间初始化E820中断获取RAM资
3、源系统初始化物理空间0~896M构造内存页面位图,用于初始阶段的内存分配。内存管理MMU0x0~0x380000000xc0000000~0xf8000000页面大小=4K32位地址:22bit~31bit:页目录索引12bit~21bit:页面索引0bit~11bit:页内位移内存管理MMU01….1023….….01…..102301….1023内存管理分配页结构系统中每个物理页面相应有一个物理页结构。每个页结构对应物理的一个页面。内存管理Zone管理系统空间被分为3个zone.DMA:0~16M(0xc0000000~0
4、xc0100000)NORMAL:16M~896M(0xc0100000~0xf8000000)HIGHMEMORY:896M以上内存管理Zone页面管理zone中的页面是按着buddy算法管理。什么是buddy算法?Buddy算法管理的页面:从1个至512个连续页面。内存管理系统空间DMA区(按buddy算法管理1~512个连续页面)NORMAL区(按buddy算法管理1~512个连续页面)HIGHMEM区(按buddy算法管理1~512个连续页面)内存管理Slab高速缓存什么是slab?Slab和高速缓存关系。如何利用高速缓
5、存。(染色算法)什么是染色算法。内存管理通用slab32字节~128k字节专用slabprocslabcache.Vfsslabcache.……内存管理系统内存管理结构DMAZONEBuddy结构slabNORMALZONEBuddy结构slabHIGHMEMZONEBuddy结构内存管理建立私有slabcachekmem_cache_create功能:建立slabcache参数:name:slabcache名字。Size:slab对象大小,对象大小小于32个页面(128k)Offset:页面偏移量。Flags:对齐属性Ctor:对
6、象创建函数Dtor:对象释放函数,为空返回值:slabcache管理区,即kmem_cache_s结构。内存管理从私有slab管理区中分配slab对象kmem_cache_alloc功能:从slab中分配一个对象参数:cachep:slabcache管理结构,即mem_cache_s.flag:建立slabflag返回值:slab中的对象。内存管理释放私有slab对象__kmem_cache_free功能:释放slab队列中对象。参数:cachep:slabcache管理区objp:释放对象。内存管理从通用slabcache中分配对象
7、Kmalloc功能:从通用SLAB队列中分配空间参数:size:空间大小(32~128K)flag:分配flag,如果为DMA,从通用SLAB的DMA队列中分配。内存管理释放通用slabcache对象Kfree功能:释放通用slab对象参数:objp:释放的对象。内存管理从buddy管理区中分配页面__get_free_pages功能:分配页面参数:gfp_mask:分配策略,即从DMA,NORMAL,或HIGHzone分配页面。Order:分配页面的大小,2的幂,小于10。内存管理释放分配的页面__free_pages功能:释放页面
8、参数:page:释放的页面。Order:页面大小,2的幂。内存管理虚拟地址转换为物理地址__pa(addr)addr–0xc0000000物理地址转换为虚拟地址_
此文档下载收益归作者所有