找传奇、传世资源到传世资源站!

深入分析Linux内核源代码.pdf

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

深入分析Linux内核源代码.pdf Linux内核编程-第1张深入分析Linux内核源代码.pdf Linux内核编程-第2张深入分析Linux内核源代码.pdf Linux内核编程-第3张深入分析Linux内核源代码.pdf Linux内核编程-第4张深入分析Linux内核源代码.pdf Linux内核编程-第5张深入分析Linux内核源代码.pdf Linux内核编程-第6张深入分析Linux内核源代码.pdf Linux内核编程-第7张深入分析Linux内核源代码.pdf Linux内核编程-第8张深入分析Linux内核源代码.pdf Linux内核编程-第9张深入分析Linux内核源代码.pdf Linux内核编程-第10张目 录第一章 走进 Linux ...................................................................... 11.1 GNU 与 Linux 的成长............................................................ 11.2 Linux 的开发模式和运作机制 .................................................. 21.3 走进 Linux 内核 ................................................................ 41.3.1 Linux 内核的特征 ....................................................... 41.3.2 Linux 内核版本的变化 .................................................. 51.4 分析 Linux 内核的意义 ......................................................... 71.4.1 开发适合自己的操作系统................................................ 81.4.2 开发高水平软件......................................................... 91.4.3 有助于计算机科学的教学和科研......................................... 91.5 Linux 内核结构 ................................................................ 91.5.1 Linux 内核在整个操作系统中的位置 ................................... 101.5.2 Linux 内核的作用 ...................................................... 111.5.3 Linux 内核的抽象结构 ................................................. 111.6 Linux 内核源代码 ............................................................. 121.6.1 多版本的内核源代码 ................................................... 131.6.2 Linux 内核源代码的结构 ............................................... 131.6.3 从何处开始阅读源代码................................................. 141.7 Linux 内核源代码分析工具.................................................... 161.7.1 Linux 超文本交叉代码检索工具 ........................................ 161.7.2 Windows 平台下的源代码阅读工具(Source Insight)................. 17第二章 Linux 运行的硬件基础.......................................................... 192.1 i386 的寄存器................................................................. 192.1.1 通用寄存器............................................................. 192.1.2 段寄存器............................................................... 202.1.3 状态和控制寄存器...................................................... 202.1.4 系统地址寄存器........................................................ 232.1.5 调试寄存器和测试寄存器............................................... 242.2 内存地址 ...................................................................... 252.3 段机制和描述符 ............................................................... 262.3.1 段机制 ................................................................. 26 深入分析 Linux 内核源代码– 2 –2.3.2 描述符的概念 .......................................................... 272.3.3 系统段描述符 .......................................................... 292.3.4 描述符表............................................................... 302.3.5 选择符与描述符表寄存器............................................... 302.3.6 描述符投影寄存器...................................................... 322.3.7 Linux 中的段........................................................... 322.4 分页机制 ...................................................................... 342.4.1 分页机构............................................................... 362.4.2 页面高速缓存 .......................................................... 392.5 Linux 中的分页机制........................................................... 402.5.1 与页相关的数据结构及宏的定义........................................ 412.5.2 对页目录及页表的处理................................................. 422.6 Linux 中的汇编语言........................................................... 442.6.1 AT&T 与 Intel 汇编语言的比较 ......................................... 442.6.2 AT&T 汇编语言的相关知识 .............................................. 462.6.3 gcc 嵌入式汇编 ........................................................ 492.6.4 Intel386 汇编指令摘要 ................................................ 52第三章 中断机制 ....................................................................... 553.1 中断基本知识 ................................................................. 553.1.1 中断向量............................................................... 553.1.2 外设可屏蔽中断........................................................ 563.1.3 异常及非屏蔽中断...................................................... 573.1.4 中断描述符表 .......................................................... 593.1.5 相关汇编指令 .......................................................... 603.2 中断描述符表的初始化 ........................................................ 613.2.1 外部中断向量的设置 ................................................... 613.2.2 中断描述符表 IDT 的预初始化.......................................... 633.2.3 中断向量表的最终初始化............................................... 653.3 异常处理 ...................................................................... 683.3.1 在内核栈中保存寄存器的值 ............................................ 683.3.2 中断请求队列的初始化................................................. 703.3.3 中断请求队列的数据结构............................................... 703.4 中断处理 ...................................................................... 773.4.1 中断和异常处理的硬件处理。.......................................... 773.4.2 Linux 对中断的处理.................................................... 783.4.3 与堆栈有关的常量、数据结构及宏 ..................................... 793.4.4 中断处理程序的执行 ................................................... 813.4.5 从中断返回............................................................. 85 目 录– 3 –3.5 中断的后半部分处理机制...................................................... 863.5.1 为什么把中断分为两部分来处理........................................ 863.5.2 实现机制............................................................... 873.5.3 数据结构的定义........................................................ 893.5.4 软中断、bh 及 tasklet 的初始化 ....................................... 913.5.5 后半部分的执行........................................................ 923.5.6 把 bh 移植到 tasklet................................................... 96第四章 进程描述 ....................................................................... 974.1 进程和程序(Process and Program)......................................... 974.2 Linux 中的进程概述........................................................... 994.3 task_struct 结构描述........................................................ 1004.4 task_struct 结构在内存中的存放............................................ 1074.4.1 进程内核栈............................................................ 1074.4.2 当前进程(current 宏) .............................................. 1084.5 进程组织方式 ................................................................ 1094.5.1 哈希表 ................................................................ 1094.5.2 双向循环链表 ......................................................... 1104.5.3 运行队列.............................................................. 1114.5.4 进程的运行队列链表 .................................................. 1114.5.5 等待队列.............................................................. 1124.6 内核线程 ..................................................................... 1154.7 进程的权能................................................................... 1164.8 内核同步 ..................................................................... 1174.8.1 信号量 ................................................................ 1184.8.2 原子操作.............................................................. 1184.8.3 自旋锁、读写自旋锁和大读者自旋锁.................................. 119第五章 进程调度与切换 ............................................................... 1235.1 Linux 时间系统 .............................................................. 1235.1.1 时钟硬件.............................................................. 1235.1.2 时钟运作机制 ......................................................... 1245.1.3 Linux 时间基准 ....................................................... 1255.1.4 Linux 的时间系统 ..................................................... 1265.2 时钟中断 ..................................................................... 1265.2.1 时钟中断的产生....................................................... 1265.2.2 Linux 实现时钟中断的全过程 ......................................... 1275.3 Linux 的调度程序—Schedule( ) ........................................ 1315.3.1 基本原理.............................................................. 132 深入分析 Linux 内核源代码– 4 –5.3.2 Linux 进程调度时机................................................... 1335.3.3 进程调度的依据....................................................... 1355.3.4 进程可运行程度的衡量................................................ 1365.3.5 进程调度的实现....................................................... 1375.4 进程切换 ..................................................................... 1395.4.1 硬件支持.............................................................. 1395.4.2 进程切换.............................................................. 142第六章 Linux 内存管理................................................................ 1476.1 Linux 的内存管理概述 ....................................................... 1476.1.1 Linux 虚拟内存的实现结构............................................ 1486.1.2 内核空间和用户空间 .................................................. 1496.1.3 虚拟内存实现机制间的关系 ........................................... 1516.2 Linux 内存管理的初始化..................................................... 1526.2.1 启用分页机制 ......................................................... 1526.2.2 物理内存的探测....................................................... 1576.2.3 物理内存的描述....................................................... 1636.2.4 页面管理机制的初步建立.............................................. 1666.2.5 页表的建立............................................................ 1736.2.6 内存管理区............................................................ 1776.3 内存的分配和回收............................................................ 1856.3.1 伙伴算法.............................................................. 1866.3.2 物理页面的分配和释放................................................ 1876.3.3 Slab 分配机制......................................................... 1946.3.4 内核空间非连续内存区的管理......................................... 2016.4 地址映射机制 ................................................................ 2046.4.1 描述虚拟空间的数据结构.............................................. 2056.4.2 进程的虚拟空间....................................................... 2096.4.3 内存映射.............................................................. 2126.5 请页机制 ..................................................................... 2186.5.1 页故障的产生 ......................................................... 2186.5.2 页错误的定位 ......................................................... 2196.5.3 进程地址空间中的缺页异常处理....................................... 2206.5.4 请求调页.............................................................. 2216.5.5 写时复制.............................................................. 2236.5.6 对本节的几点说明..................................................... 2256.6 交换机制 ..................................................................... 2256.6.1 交换的基本原理....................................................... 2256.6.2 页面交换守护进程 kswapd ............................................. 229 目 录– 5 –6.6.3 交换空间的数据结构 .................................................. 2336.6.4 交换空间的应用....................................................... 2346.7 缓存和刷新机制 .............................................................. 2366.7.1 Linux 使用的缓存 ..................................................... 2366.7.2 缓冲区高速缓存....................................................... 2376.7.3 翻译后援存储器(TLB) ................................................. 2406.7.4 刷新机制.............................................................. 2426.8 进程的创建和执行............................................................ 2456.8.1 进程的创建............................................................ 2456.8.2 程序执行.............................................................. 2526.8.3 执行函数.............................................................. 255第七章 进程间通信.................................................................... 2637.1 管道.......................................................................... 2637.1.1 Linux 管道的实现机制 ................................................ 2647.1.2 管道的应用............................................................ 2657.1.3 命名管道 CFIFOC ...................................................... 2677.2 信号(signal) .............................................................. 2677.2.1 信号种类.............................................................. 2687.2.2 信号掩码.............................................................. 2707.2.3 系统调用.............................................................. 2717.2.4 典型系统调用的实现 .................................................. 2727.2.5 进程与信号的关系..................................................... 2747.2.6 信号举例.............................................................. 2757.3 System V 的 IPC 机制 ........................................................ 2767.3.1 信号量 ................................................................ 2767.3.2 消息队列.............................................................. 2827.3.3 共享内存.............................................................. 285第八章 虚拟文件系统 ................................................................. 2898.1 概述.......................................................................... 2898.2 VFS 中的数据结构 ............................................................ 2928.2.1 超级块 ................................................................ 2928.2.2 VFS 的索引节点 ....................................................... 2958.2.3 目录项对象............................................................ 2978.2.4 与进程相关的文件结构................................................ 2988.2.5 主要数据结构间的关系................................................ 3028.2.6 有关操作的数据结构 .................................................. 3028.3 高速缓存 ..................................................................... 308 深入分析 Linux 内核源代码– 6 –8.3.1 块高速缓存............................................................ 3088.3.2 索引节点高速缓存..................................................... 3128.3.3 目录高速缓存 ......................................................... 3158.4 文件系统的注册、安装与卸载 ................................................ 3168.4.1 文件系统的注册....................................................... 3168.4.2 文件系统的安装....................................................... 3198.4.3 文件系统的卸载....................................................... 3268.5 限额机制 ..................................................................... 3268.6 具体文件系统举例............................................................ 3288.6.1 管道文件系统 pipefs.................................................. 3298.6.2 磁盘文件系统 BFS ..................................................... 3328.7 文件系统的系统调用 ......................................................... 3338.7.1 open 系统调用 ........................................................ 3338.7.2 read 系统调用......................................................... 3358.7.3 fcntl 系统调用....................................................... 3368.8 Linux 2.4 文件系统的移植问题 .............................................. 337第九章 Ext2 文件系统................................................................. 3439.1 基本概念 ..................................................................... 3439.2 Ext2 的磁盘布局和数据结构.................................................. 3459.2.1 Ext2 的磁盘布局 ...................................................... 3459.2.2 Ext2 的超级块......................................................... 3469.2.3 Ext2 的索引节点 ...................................................... 3499.2.4 组描述符.............................................................. 3529.2.5 位图................................................................... 3539.2.6 索引节点表及实例分析................................................ 3539.2.7 Ext2 的目录项及文件的定位........................................... 3589.3 文件的访问权限和安全 ....................................................... 3619.4 链接文件 ..................................................................... 3639.5 分配策略 ..................................................................... 3669.5.1 数据块寻址............................................................ 3679.5.2 文件的洞.............................................................. 3689.5.3 分配一个数据块....................................................... 369第十章 模块机制 ...................................................................... 37310.1 概述 ........................................................................ 37310.1.1 什么是模块 .......................................................... 37310.1.2 为什么要使用模块? .................................................. 37410.1.3 Linux 内核模块的优缺点 ............................................ 374 目 录– 7 –10.2 实现机制.................................................................... 37510.2.1 数据结构............................................................. 37510.2.2 实现机制的分析...................................................... 37910.3 模块的装入和卸载 .......................................................... 38510.3.1 实现机制............................................................. 38510.3.2 如何插入和卸载模块 ................................................. 38610.4 内核版本.................................................................... 38710.4.1 内核版本与模块版本的兼容性........................................ 38710.4.2 从版本 2.0 到 2.2 内核 API 的变化 ................................... 38810.4.3 把内核 2.2 移植到内核 2.4........................................... 39210.5 编写内核模块 ............................................................... 40010.5.1 简单内核模块的编写 ................................................. 40110.5.2 内核模块的 Makefiles 文件 .......................................... 40110.5.3 内核模块的多个文件 ................................................. 402第十一章 设备驱动程序 ............................................................... 40511.1 概述 ........................................................................ 40511.1.1 I/O 软件 ............................................................. 40511.1.2 设备驱动程序 ........................................................ 40711.2 设备驱动基础 ............................................................... 40911.2.1 I/O 端口 ............................................................. 40911.2.2 I/O 接口及设备控制器 ............................................... 41011.2.3 设备文件............................................................. 41111.2.4 VFS 对设备文件的处理 ............................................... 41311.2.5 中断处理............................................................. 41311.2.6 驱动 DMA 工作 ........................................................ 41611.2.7 I/O 空间的映射 ...................................................... 41711.2.8 设备驱动程序框架 ................................................... 41911.3 块设备驱动程序............................................................. 42011.3.1 块设备驱动程序的注册............................................... 42011.3.2 块设备基于缓冲区的数据交换........................................ 42211.3.3 块设备驱动程序的几个函数 .......................................... 42811.3.4 RAM 盘驱动程序的实现............................................... 43211.3.5 硬盘驱动程序的实现 ................................................. 43311.4 字符设备驱动程序 .......................................................... 43711.4.1 简单字符设备驱动程序............................................... 43711.4.2 字符设备驱动程序的注册 ............................................ 43811.4.3 一个字符设备驱动程序的实例........................................ 44011.4.4 驱动程序的编译与装载............................................... 445 深入分析 Linux 内核源代码– 8 –第十二章 网络 ........................................................................ 44712.1 概述 ........................................................................ 44712.2 网络协议.................................................................... 44812.2.1 网络参考模型 ........................................................ 44812.2.2 TCP/IP 工作原理及数据流............................................ 44912.2.3 Internet 协议....................................................... 44912.2.4 TCP................................................................... 45012.3 套接字(socket) .......................................................... 45212.3.1 套接字在网络中的地位和作用........................................ 45212.3.2 套接字接口的种类 ................................................... 45312.3.3 套接字的工作原理 ................................................... 45412.3.4 socket 的通信过程 .................................................. 45612.3.5 socket 为用户提供的系统调用 ....................................... 46012.4 套接字缓冲区(sk_buff) .................................................. 46112.4.1 套接字缓冲区的特点 ................................................. 46112.4.2 套接字缓冲区操作基本原理 .......................................... 46112.4.3 sk_buff 数据结构的核心内容 ........................................ 46312.4.4 套接字缓冲区提供的函数 ............................................ 46512.4.5 套接字缓冲区的上层支持例程........................................ 46712.5 网络设备接口 ............................................................... 46812.5.1 基本结构............................................................. 46812.5.2 命名规则............................................................. 46912.5.3 设备注册............................................................. 46912.5.4 网络设备数据结构 ................................................... 47012.5.5 支持函数............................................................. 473第十三章 Linux 启动系统 ............................................................. 47713.1 初始化流程 ................................................................. 47713.1.1 系统加电或复位...................................................... 47813.1.2 BIOS 启动 ............................................................ 47813.1.3 Boot Loader ......................................................... 47913.1.4 操作系统的初始化 ................................................... 47913.2 初始化的任务 ............................................................... 47913.2.1 处理器对初始化的影响............................................... 47913.2.2 其他硬件设备对处理器的影响........................................ 48013.3 Linux 的 Boot Loader ....................................................... 48013.3.1 软盘的结构 .......................................................... 48013.3.2 硬盘的结构 .......................................................... 48113.3.3 Boot Loader ......................................................... 481 目 录– 9 –13.3.4 LILO ................................................................. 48213.3.5 LILO 的运行分析 ..................................................... 48513.4 进入操作系统 ............................................................... 48713.4.1 Setup.S .............................................................. 48713.4.2 Head.S ............................................................... 48813.5 main.c 中的初始化.......................................................... 49113.6 建立 init 进程 .............................................................. 49513.6.1 init 进程的建立 ..................................................... 49513.6.2 启动所需的 Shell 脚本文件 .......................................... 497附录 A Linux 内核 API ................................................................. 501附录 B 在线文档....................................................................... 529参考文献 ............................................................................... 531

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复