Blue Flower

深入linux内核架构是一本专业的linux内核学习指导书,由德国资深Linux专家莫尔勒编著。本书结合了linux内核版本2.6.24源代码中关键的部分,深入讨论Lirnux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等,并引导读者阅读内核源代码,熟悉Lirnux妍有的内在工作机理,充分展现Linux系统的魅力,欢迎免费下载阅读。
202209171911398520940000

基本介绍

《深入linux内核架构》讨论了Linux内核的概念、结构和实现。主要内容包括多任务、调度和进程管理,物理内存的管理以及内核与相关硬件的交互,用户空间的进程如何访问虚拟内存,如何编写设备驱动程序,模块机制以及虚拟文件系统,Ext文件系统属性和访问控制表的实现方式,内核中网络的实现,系统调用的实现方式,内核对时间相关功能的处理,页面回收和页交换的相关机制以及审计的实现等。此外,本书还借助内核源代码中关键的部分进行讲解,帮助读者掌握重要的知识点,从而在运用中充分展现Linux系统的魅力。非常适合Linux系统编程人员、系统管理者以及Linux爱好者学习使用。

内容概述

本书讨论了Linux内核的概念、结构和实现。各章分别介绍了下述主题
第1章概述Linux内核,讲述了内核的总体图景,后续章节则根据总体结构对内核进行更详细的研究。
第2章讨论了多任务、调度和进程管理的基本知识,并分析了这些基本技术和概念抽象的实现方式。
第3章讨论了如何管理物理内存。本章既讨论了内核与相关硬件的交互,也讨论了内核内部通过伙伴系统和slab分配器来分配内存的方式。
第4章继续对内存进行讨论,讲解了用户空间的进程如何访问虚拟内存,以及在内核层面实现虚拟内存视图所需要的详细的数据结构和相关机制。
第5章介绍了保证内核能够在多处理器系统上正确运作所需的机制。此外,本章还介绍了进程如何相互通信。
第6章引导读者理解如何编写设备驱动程序,使内核支持新的硬件。
第7章阐述了模块机制,该机制能够向内核动态添加新的功能。
第8章讨论了虚拟文件系统,这是内核中一个一般的间接层,能够支持各种各样的不同文件系统,包括物理文件系统和虚拟文件系统。
第9章讲解了Ext文件系统族,包括Ext2和Ext3文件系统,这是很多Linux系统安装的标准选项。第10章继续讨论文件系统,包括procfs和sysfs。这两个文件系统并非用来存储信息,而是向用户层分享关于内核的元信息。此外,本章阐述了一些减轻编写文件系统负担的方法。
第11章给出了Ext文件系统属性和访问控制表的实现方式,这两者有助于提高系统的安全性。
第12章讨论内核中网络的实现,内容集中于IPv4、TCP、UDP和netfilter。
第13章介绍了系统调用的实现方式,系统调用是从用户层请求内核服务的标准机制。
第14章对中断触发内核活动的方式进行了分析,并介绍了内核中将工作延迟至后续时间点执行的机制。
第15章说明了内核对时间相关功能的处理,包括了高低两种分辨率的情形。
第16章讨论了借助于页缓存和块缓存来加速内核操作。
第17章讨论了如何对内存中缓存的数据与持久存储设备上的数据源进行同步。
第18章介绍了页面回收和页交换的相关机制。
第19章介绍了审计的实现,审计负责详细记录内核的活动。
附录A讨论了内核所支持的各种计算机体系结构的特点。
附录B简述了有效使用内核源代码的各种工具和方法。
附录C分享了关于C语言的一些技术札记,并讨论了GNU C编译器的结构。
附录D给出了内核的启动过程。
附录E介绍了ELF二进制格式。
附录F讨论了内核开发的许多社会性的方面,以及Linux内核社区。
202209171911401254260001

深入linux内核架构节目录

第1章 简介和概述11.1 内核的任务21.2 实现策略21.3 内核的组成部分31.3.1 进程、进程切换、调度31.3.2 UNIX进程41.3.3 地址空间与特权级别61.3.4 页表91.3.5 物理内存的分配111.3.6 计时131.3.7 系统调用131.3.8 设备驱动程序、块设备和字符设备141.3.9 网络141.3.10 文件系统141.3.11 模块和热插拔151.3.12 缓存161.3.13 链表处理161.3.14 对象管理和引用计数171.3.15 数据类型201.3.16 本书的局限性221.4 为什么内核是特别的231.5 行文注记231.6 小结27第2章 进程管理和调度282.1 进程优先级282.2 进程生命周期302.3 进程表示322.3.1 进程类型372.3.2 命名空间372.3.3 进程ID号432.3.4 进程关系492.4 进程管理相关的系统调用502.4.1 进程复制502.4.2 内核线程622.4.3 启动新程序632.4.4 退出进程662.5 调度器的实现672.5.1 概观672.5.2 数据结构692.5.3 处理优先级742.5.4 核心调度器792.6 完全公平调度类842.6.1 数据结构852.6.2 CFS操作852.6.3 队列操作892.6.4 选择下一个进程912.6.5 处理周期性调度器922.6.6 唤醒抢占932.6.7 处理新进程932.7 实时调度类942.7.1 性质942.7.2 数据结构952.7.3 调度器操作962.8 调度器增强972.8.1 SMP调度972.8.2 调度域和控制组1012.8.3 内核抢占和低延迟相关工作1022.9 小结106第3章 内存管理1073.1 概述1073.2 (N)UMA模型中的内存组织1093.2.1 概述1093.2.2 数据结构1113.3 页表1233.3.1 数据结构1243.3.2 页表项的创建和操作1293.4 初始化内存管理1293.4.1 建立数据结构1303.4.2 特定于体系结构的设置1353.4.3 启动过程期间的内存管理1533.5 物理内存的管理1593.5.1 伙伴系统的结构1593.5.2 避免碎片1613.5.3 初始化内存域和结点数据结构1673.5.4 分配器API1723.5.5 分配页1773.5.6 释放页1923.5.7 内核中不连续页的分配1953.5.8 内核映射2013.6 slab分配器2053.6.1 备选分配器2063.6.2 内核中的内存管理2073.6.3 slab分配的原理2093.6.4 实现2123.6.5 通用缓存2263.7 处理器高速缓存和TLB控制2283.8 小结230第4章 进程虚拟内存2314.1 简介2314.2 进程虚拟地址空间2314.2.1 进程地址空间的布局2324.2.2 建立布局2344.3 内存映射的原理2374.4 数据结构2384.4.1 树和链表2384.4.2 虚拟内存区域的表示2394.4.3 优先查找树2414.5 对区域的操作2444.5.1 将虚拟地址关联到区域2454.5.2 区域合并2464.5.3 插入区域2474.5.4 创建区域2484.6 地址空间2504.7 内存映射2514.7.1 创建映射2514.7.2 删除映射2534.7.3 非线性映射2544.8 反向映射2574.8.1 数据结构2584.8.2 建立逆向映射2594.8.3 使用逆向映射2594.9 堆的管理2614.10 缺页异常的处理2634.11 用户空间缺页异常的校正2684.11.1 按需分配/调页2694.11.2 匿名页2714.11.3 写时复制2714.11.4 获取非线性映射2724.12 内核缺页异常2724.13 在内核和用户空间之间复制数据2744.14 小结276第5章 锁与进程间通信2775.1 控制机制2775.1.1 竞态条件2775.1.2 临界区2785.2 内核锁机制2795.2.1 对整数的原子操作2805.2.2 自旋锁2825.2.3 信号量2835.2.4 RCU机制2845.2.5 内存和优化屏障2865.2.6 读者/写者锁2875.2.7 大内核锁2885.2.8 互斥量2885.2.9 近似的per-CPU计数器2905.2.10 锁竞争与细粒度锁2915.3 SystemV进程间通信2925.3.1 SystemV机制2925.3.2 信号量2925.3.3 消息队列3005.3.4 共享内存3035.4 其他IPC机制3035.4.1 信号3035.4.2 管道和套接字3105.5 小结311第6章 设备驱动程序3126.1 I/O体系结构3126.2 访问设备3166.2.1 设备文件3166.2.2 字符设备、块设备和其他设备3176.2.3 使用ioctl进行设备寻址3196.2.4 主从设备号的表示3206.2.5 注册3216.3 与文件系统关联3246.3.1 inode中的设备文件成员3246.3.2 标准文件操作3256.3.3 用于字符设备的标准操作3256.3.4 用于块设备的标准操作3256.4 字符设备操作3266.4.1 表示字符设备3266.4.2 打开设备文件3266.4.3 读写操作3286.5 块设备操作3296.5.1 块设备的表示3306.5.2 数据结构3316.5.3 向系统添加磁盘和分区3386.5.4 打开块设备文件3396.5.5 请求结构3416.5.6 BIO3436.5.7 提交请求3456.5.8 I/O调度3506.5.9 ioctl的实现3526.6 资源分配3536.6.1 资源管理3536.6.2 I/O内存3556.6.3 I/O端口3576.7 总线系统3586.7.1 通用驱动程序模型3586.7.2 PCI总线3636.7.3 USB3706.8 小结376第7章 模块3777.1 概述3777.2 使用模块3787.2.1 添加和移除3787.2.2 依赖关系3807.2.3 查询模块信息3817.2.4 自动加载3827.3 插入和删除模块3847.3.1 模块的表示3857.3.2 依赖关系和引用3897.3.3 模块的二进制结构3917.3.4 插入模块3967.3.5 移除模块4037.4 自动化与热插拔4047.4.1 kmod实现的自动加载4047.4.2 热插拔4057.5 版本控制4087.5.1 校验和方法4087.5.2 版本控制函数4117.6 小结412第8章 虚拟文件系统4138.1 文件系统类型4138.2 通用文件模型4148.2.1 inode4158.2.2 链接4168.2.3 编程接口4168.2.4 将文件作为通用接口4178.3 VFS的结构4178.3.1 结构概观4188.3.2 inode4198.3.3 特定于进程的信息4238.3.4 文件操作4278.3.5 目录项缓存4318.4 处理VFS对象4368.4.1 文件系统操作4368.4.2 文件操作4508.5 标准函数4568.5.1 通用读取例程4578.5.2 失效机制4598.5.3 权限检查4618.6 小结463第9章 Ext文件系统族4649.1 简介4649.2 Ext2文件系统4659.2.1 物理结构4659.2.2 数据结构4709.2.3 创建文件系统4849.2.4 文件系统操作4859.3 Ext3文件系统5079.3.1 概念5089.3.2 数据结构5099.4 小结511第10章 无持久存储的文件系统51210.1 proc文件系统51210.1.1 /proc的内容51310.1.2 数据结构51910.1.3 初始化52210.1.4 装载proc文件系统52310.1.5 管理/proc数据项52510.1.6 读取和写入信息52810.1.7 进程相关的信息53010.1.8 系统控制机制53510.2 简单的文件系统54210.2.1 顺序文件54210.2.2 用libfs编写文件系统54610.2.3 调试文件系统54710.2.4 伪文件系统54910.3 sysfs54910.3.1 概述55010.3.2 数据结构55010.3.3 装载文件系统55410.3.4 文件和目录操作55610.3.5 向sysfs添加内容56210.4 小结564第11章 扩展属性和访问控制表56511.1 扩展属性56511.1.1 到虚拟文件系统的接口56611.1.2 Ext3中的实现57011.1.3 Ext2中的实现57611.2 访问控制表57711.2.1 通用实现57711.2.2 Ext3中的实现58011.2.3 Ext2中的实现58511.3 小结585……第12章 网络586第13章 系统调用655第14章 内核活动678第15章 时间管理714第16章 页缓存和块缓存761第17章 数据同步793第18章 页面回收和页交换821第19章 审计882附录A 体系结构相关知识899附录B 使用源代码919附录C 有关C语言的注记947附录D 系统启动985附录E ELF二进制格式附录F 内核开发过程参考文献

使用说明

1、下载并解压,得出pdf文件
2、如果打不开本文件,请务必下载pdf阅读器
3、安装后,在打开解压得出的pdf文件
4、双击进行阅读>

下载仅供下载体验和测试学习,不得商用和正当使用。

下载体验

请输入密码查看内容!

如何获取密码?

 

点击下载