版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux 内核分析,Linux 引导和初始化,Linux引导简述 Linux初始化(head.S),0 0 xfff,0 x1000 0 x9ffff,0 xa0000 0 xbffff,0 xc0000 0 xc7fff,0 xf00000 xfffff,0 xc8000 0 xdffff,Linux 引导和初始化,0 0 x1000: BIOS 0 xa0000 0 xbffff: Video RAM 0 xc0000 0 xc7fff: Video ROM 0 xc8000 0 xdffff: Extension ROM 0 xf0000 0 xfffff: System ROM 内核
2、映像驻存在: 0 x100000 ,Linux 引导和初始化,段寄存器初始化CS, DS, ES, SS 保护模式初始化Enable MMU映射0 x0 0 x800000 0 xc0000000 0 xc0800000.根据ABI386标准, 系统空间从0 xc0000000开始。,内存管理,Linux虚拟空间结构,0 xc00000000 xf7ffffff (系统空间),用户 空间 (低3G 空间),用户 空间 (低3G 空间),用户 空间 (低3G 空间),内存管理,0 xc0000000 0 xf7ffffff: 系统空间, 896M 0 xf7ffffff 0 xffffffff:
3、 用于vmalloc, 128M,内存管理,系统空间初始化E820中断获取RAM资源系统初始化物理空间0 896M构造内存页面位图, 用于初始阶段的内存分配。,内存管理,MMU0 x0 0 x38000000 0 xc0000000 0 xf8000000页面大小4K32位地址:22bit 31bit: 页目录索引12bit 21bit: 页面索引0bit 11bit: 页内位移,内存管理,MMU,内存管理,分配页结构系统中每个物理页面相应有一个物理页结构。每个页结构对应物理的一个页面。,内存管理,Zone管理系统空间被分为3个zone.DMA: 0 16M (0 xc0000000 0 xc
4、0100000)NORMAL:16M 896M (0 xc0100000 0 xf8000000)HIGH MEMORY: 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字节 专用slabproc slab cache.Vfs slab cache.,内存管理,系统内存管理结构,DMA ZONE,Buddy 结构,slab,NORMAL ZONE,Buddy 结构,slab,HIGHMEM ZONE,Buddy 结构,内存管理,建立私有slab cachekmem_cache_create功能: 建立slab cache参数:name: slab cache名字。Size: slab对象大小, 对象大小小于32个页面(128k)Offset: 页面偏移量。Flags: 对齐属性Ctor: 对象创建函数Dtor:
6、 对象释放函数, 为空返回值: slab cache管理区, 即kmem_cache_s结构。,内存管理,从私有slab管理区中分配slab对象kmem_cache_alloc功能:从slab中分配一个对象参数: cachep: slab cache管理结构, 即mem_cache_s.flag: 建立slab flag返回值:slab中的对象。,内存管理,释放私有slab对象_kmem_cache_free功能:释放slab队列中对象。参数:cachep: slab cache管理区objp: 释放对象。,内存管理,从通用slab cache中分配对象Kmalloc功能: 从通用SLAB队列
7、中分配空间参数:size: 空间大小(32 128K)flag: 分配flag, 如果为DMA, 从通用SLAB的DMA队列中分配。,内存管理,释放通用slab cache 对象Kfree功能: 释放通用slab对象参数:objp: 释放的对象。,内存管理,从buddy管理区中分配页面_get_free_pages功能: 分配页面参数: gfp_mask: 分配策略, 即从DMA,NORMAL, 或HIGH zone分配页面。Order: 分配页面的大小, 2的幂, 小于10。,内存管理,释放分配的页面_free_pages功能: 释放页面参数:page: 释放的页面。Order:页面大小,
8、2的幂。,内存管理,虚拟地址转换为物理地址_pa(addr)addr 0 xc0000000 物理地址转换为虚拟地址_va(addr)addr + 0 xc0000000,文件系统,VFS和文件系统 VFS是虚拟的文件系统, 提供给用户和特定文件系统统一接口。,文件系统,VFS和文件系统,VFS,EXT2,EXT3,UFS,FAT,文件系统,文件系统的操作1、对super block的操作2、对目录的操作3、对文件的操作,文件系统,Dentry和inodedentry在物理上是不存在的,dentry代表文件名, 目录名。Inode在物理上是存在的, 在存储介质上存在, 代表文件, 目录在存储介
9、质上的存储结构。 目录也是文件, 包含目录名和文件名。,文件系统,Dentry和inode由于链接的引入, 一个inode可能对应几个dentry.Eg:touch testln s test1 testln s test2 test,文件系统,Dentry和inode,Dentry text,Dentry text1,Dentry text2,inode text,文件系统,Dentry和inode查找文件:如/usr/tmp/test查找usr的dentry, 根据dentry中的inode, 得到/usr目录在存储介质上的位置, 读取/usr目录, 从/usr目录中查找tmp的inode
10、信息, 在系统中创建/usr/tmp的dentry, 从/usr/tmp的inode信息中读取/usr/tmp目录, 查找test。,文件系统,Dentry和inodeInode中包含了对文件或目录的操作集合。,文件系统,文件系统的实现1、实现对super block 的操作和解释。Super block的位置是固定的, 从存储介质1K开始的1K字节。Super block 中的magic字段表明是什么文件系统。2、实现对目录操作.3、实现对文件操作.,文件系统,Super block 操作read_super: 读取并解释super block.write_super: 写super blo
11、ck.read_inode, write_inode: 读写inode.,文件系统,对文件操作open: 文件打开。read: 文件的读。write: 文件的写。lseek:文件定位。.,文件系统,对目录操作mkdir: 建立目录。rmdir: 删除目录。link: 建立链接。unlink: 删除链接。mknod: 建立设备节点。,文件系统,EXT2文件系统分析 EXT2文件系统在硬盘上的分布,文件系统,文件系统,文件系统,EXT2文件系统硬盘空间被分为以块为单位。(1k 或 4k)块被分为组。每组分配inode数。,文件系统,文件系统和块设备的接口getblk,块设备驱动程序,块设备驱动接口
12、(block_device_operations)openreleaseioctlcheck_media_change,块设备驱动程序,Open打开设备接口, 对于块设备, 如无硬件的开启工作, 则一般是增加使用计数。 Release关闭设备接口, 如无硬件的关闭工作, 则是减少使用计数。 Ioctl块设备IO控制接口, 如获取块设备大小,获取设备分区信息等。,块设备驱动程序,check_media_change一般用于可热插拔设备。 块设备的输入输出接口呢?块设备驱动程序与系统接口的例程中没有输入输出接口, 系统如何与驱动程序打交道呢。块设备驱动程序的特点: 数据的输入是主动的, 即如果不请
13、求则无数据输入。,块设备驱动程序,块设备数据输入接口块设备中断例程。 request_irq注册设备中断。,块设备驱动程序,块设备输出接口块设备驱动的输出接口是由块设备的队列实现的。 blk_dev_struct每个块设备都有一个blk_dev_struct结构, 这个机构中最重要的是设备的请求队列,request_queue_t。,块设备驱动程序,设备请求队列。request_queue_t请求队列中包含的要素:读请求数据包队列。写请求数据包队列。请求处理函数接口。向后合并接口。向前合并接口。合并请求接口。,块设备驱动程序,设备请求队列构造请求包接口。 数据请求包用于块设备读写请求。请求读写
14、的设备。读写设备的开始地址。读写设备的大小。,块设备驱动程序,数据请求包数据缓冲区地址。 块设备驱动相关的全局变量gendisk:包含设备的名字, major, 分区, 每个分区的大小blksize_size:,块设备驱动程序,块设备驱动相关的全局变量块设备的块大小。hardsect_size:块设备的扇区大小。blk_size:块设备大小。max_sectors:块设备读写的最大扇区数。,块设备驱动程序,块设备驱动程序初始化初始化设备队列(输出接口)。分配数据请求包缓冲区。注册数据请求接口,合并接口初始化gendisk结构。将驱动程序的gendisk链接到系统的gendisk_array结构
15、中。,块设备驱动程序,块设备驱动程序初始化初始化设备的块大小blksize_size, 扇区大小hardsect_size, 最大读取扇区数max_sectors注册块设备中断(设备输入接口)request_irq注册块设备, register_disk.,块设备驱动程序,块设备中断处理例程b_end_io 块设备请求队列合并请求(向前合并, 向后合并)电梯算法。生成请求数据包。发送数据请求。,内核线程和系统同步,内核线程内核线程的特点:共享系统栈无私有栈空间运行于系统空间clone()调用生成执行内核函数, 而不是可执行映像文件,内核线程和系统同步,系统栈系统栈空间: 8K, 连续的两个页面
16、,Task_struct,内核线程和系统同步,Fork Vfork Clone,内核线程和系统同步,系统同步机制 Spin_lockspin_lock不释放cpu资源, 用于smp下。 关闭中断的spin_lock Spin_lock读 Spin_lock写,内核线程和同步机制,关中断, 开中断用于保护和中断例程的共享资源 cli Sti,系统线程和同步机制,信号量同步共享资源 Down占有共享资源*会引起进程调度, 并释放cpu资源 Up释放共享资源,系统线程和同步机制,原子操作锁总线,并对共享资源操作 原子加atomic_add 原子减atomic_sub,内核模块开发及加载,内核模块内核
17、模块是经过编译, 但为经过链接的.o文件。内核模块的加载简单说就是两个问题:1、内核模块链接内核的符号。2、内核链接内核模块的符号。,内核模块开发及加载,ELF文件格式内核模块是.o文件, 未链接的文件, .o文件的ELF文件格式:Elf HeaderProgram HeaderTable(option)Section1.SectionN.Section Header Table,内核模块开发及加载,ELF文件格式模块加载的重点既是分析ELF文件中symbol section中未能解析的symbol。 解析未定位symbol内核模块调用了内核的函数, 访问了内核的数据, 调用了其他模块的函数,
18、 访问了其他模块的数据。但是没有链接,所以加载程序的任务就是查找内核符号表, 查找,内核模块开发及加载,解析未定位symbol系统已加载模块符号表, 定位要加载模块中未定位的符号。如果要加载模块中所有符号得到解析, 则模块加载成功, 否则失败。,内核模块开发及加载,内核模块加载1、加载模块至用户空间。2、将模块中未定位的符号进行重定位。3、建立module数据结构, 并预定所需系统空间。4、将模块从用户空间装入系统空间, 并注册模块接口, 建立内核同模块的链接。,内核模块开发及加载,sys_query_module查找系统符号表。,内核模块开发及加载,sys_create_module创建内核映像,内核模块开发及加载,sys_init_module加载模块映像至系统空间, 注册模块接口。,内核模块开发及加载,内核模块开发1、module_init(fn)实现初始化fn,fn的功能是初始化并注册。Module_init将fn放入对象文件的.initcall.init区, 在系统加载中将调用这个接口。2、module_exit(fn)实现退出fn, fn的功能是退出注销。,内核模块开发及加载,内核模块开发module_exit将fn放入对象文件的exitcall.exit, 当卸载模块时, 调用这个接口。3、EXPORT_SYMBOL输出变量或接口, 供其他模块访问。 EXPOR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026贵州遵义习水县人民医院招聘见习人员8人笔试备考题库及答案解析
- 2026江西南昌航空大学高层次人才团队招聘装配与测试工程师笔试备考题库及答案解析
- 2025浙江温州市瑞安市市属国有企业招聘(第二批)拟聘用人员笔试历年常考点试题专练附带答案详解
- 2025河南开封经济技术开发区投资控股有限公司招聘工作人员5人笔试历年备考题库附带答案详解
- 蓬安县政协会请假制度
- 小屋安全管理制度
- 维护网络安全是靠制度
- 安全制度签发
- 维稳队员管理制度
- 工地安全设施工厂管理制度
- 2026年部编版新教材道德与法治小学三年级下册教学计划(含进度表)
- 学校洗衣机卫生消毒制度
- 2025年河南信阳事业单位联考《公共基础知识》试题附答案
- 2026年重庆公务员考试《申论》试题题库(答案+解析)
- 2026年书记员考试题库100道含答案(考试直接用)
- 2026年时事政治测试题库100道附完整答案【考点梳理】
- 2025至2030中国变频器行业调研及市场前景预测评估报告
- 动物疫病防治员题库(含参考答案)
- 2025年平顶山工业职业技术学院单招职业适应性考试题库附答案
- 2025年宁夏财经职业技术学院单招职业倾向性测试题库附答案解析
- 2026年山西药科职业学院单招职业技能考试题库及答案详解一套
评论
0/150
提交评论