深入理解Linux内核
2017-01-24 16:03:00 0 举报
AI智能生成
Linux内核是操作系统的核心,负责管理系统的硬件资源和提供程序运行环境。它由许多子系统组成,包括进程调度、内存管理、文件系统等。Linux内核采用模块化设计,每个模块负责一个特定的功能,通过内核API进行通信。这种设计使得内核易于扩展和维护。此外,Linux内核还支持多种处理器架构,如x86、ARM等,具有很强的移植性。总之,深入理解Linux内核有助于我们更好地掌握操作系统原理和技术。
作者其他创作
大纲/内容
进程
内存寻址
内存地址
三种地址
逻辑地址 (logical address)
由段选择符和指定段内地址偏移量组成
线性地址 (linear address) 或 虚拟地址 (virtual address)
物理地址 (physical adress)
内存控制单元(MMU)转换
逻辑地址 -> [分段单元 (segmention unit)] -> 线性地址 -> [分页单元 (paging unit)] -> 物理地址
分段
硬件中的分段
段寄存器 (Segment Register)
存放段选择符
段选择符 (Segment Selector)
指向段描述符,由索引号(Index),表描述符 (Table Indicator,TI) 和请求特权等级(Request Privilege Level,RPL) 组成
段描述符 (Segment Descriptor)
描述段的特征,放在全局描述符表(Global Descriptor Talbe,GDT)或者局部描述符表(Local Descriptor Talbe,LDT)中
格式,字段特性
分段单元
根据TI选择寄存器,根据Index计算段描述符地址,根据段描述符Base字段与逻辑地址Offset相加得到虚拟地址
Linux 中的分段
GDT布局结构
内核定义缺省LDT
分页
硬件中的分页
页框 (page frame)
主存的固定区域
页 (page)
和页框长度一致的数据块
页表 (page table)
把线性地址映射到物理地址的数据结构,内核在启用分页单元之前对其进行适当的初始化
目录项和表项都有相同的结构,字段特性
分页单元 (paging unit)
根据Directory字段选择目录项,Table字段决定指向适当的页表,Offset字段决定页框内的相对位置
扩展分页 (extened paging)
把大段连续的线性地址转换成相应物理地址,减少一次转换
物理地址扩展 (Physical Address Extention, PAE)
为增强寻址能力,新增了页目录指针表(Page Directory Pointer Table, PDPT)
硬件高速缓存 (hardware cache memory)
命中可以减少I/O操作时间
转换后援缓冲器 (Translation Lookaside Buffer, TLB)
缓冲物理地址,加快线性地址转换
Linux 中的分页
64位系统采用四级分页模型
页全局目录 (Page Global Directory)
页上级目录 (Page Upper Directory)
页中间目录 (Page Middle Directory)
页表
线性地址字段宏定义
页表处理宏和函数
物理内存布局
硬件会保留开始的页框,之后的页框依赖于内核的配置方案
Linux更愿跳过硬件保留的空间,把内核装在一组连续的页框里
进程页表
内核态的寻址空间
用户态的寻址空间
内核页表
临时内核页表
根据RAM大小调整最终内核页表
处理硬件高速缓存和TLB
TLB处理方法
TLB宏
0 条评论
下一页