精华内容
下载资源
问答
  • 学习linux的几本书

    千次阅读 2012-04-12 12:58:51
  • linux多线程编程是指基于Linux操作系统下的多线程编程,包括多任务程序的设计,并发程序设计,网络程序设计,数据共享等。Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用...

    linux多线程编程是指基于Linux操作系统下的多线程编程,包括多任务程序的设计,并发程序设计,网络程序设计,数据共享等。Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。小编今天就来把几本linux多线程编程书籍推荐给大家,希望能够帮助到想要了解和学习linux多线程编程的攻城狮们。

      linux多线程编程书籍推荐no.1:《精通Linux

      

    精通Linux(第2版)

      我们学习Linux的原因可能各不相同。对于IT从业者(如系统运维人员)来说,他们需要了解本书中的几乎所有内容。对于Linux软件架构和开发人员来说,他们同样需要了解这些内容,以便发挥操作系统的最大功效。对于研究人员和学生来说,本书能够让他们理解为什么我们要这样设置系统。本书菜鸟与老鸟通吃,既可作为菜鸟的入门教程,也可以作为老鸟的进阶指南。

      linux多线程编程书籍推荐no.2:《Linux设备驱动开发详解:基于最新的Linux 4.0内核

      

    Linux设备驱动开发详解:基于最新的Linux 4.0内核(china-pub首发)

      历时8年,三次重构,内窖愈加炉火纯青。

      全部代码更新至全新的Linux4.0版本。

      全面讲解ARM Linux新版本内核架构,如设备树等。

      不仅仅注重知识和程序的讲解,更注重程序的思想、演变、架构和算法。

      linux多线程编程书籍推荐no.3:《深度实践KVM:核心技术、管理运维、性能优化与项目实施

      

    深度实践KVM:核心技术、<a target=_blank href=

      中国运维领域里划时代著作,国内顶尖KVM专家和运维专家多年大规模生产环境实践经验总结,国内数十位运维专家鼎力支持和推荐。

      从核心技术、管理运维、性能优化、项目实施等多个维度系统、深入讲解KVM虚拟化技术的工作原理、应用方法和技术生态,并针对生产环境中的各种难题给出了解决方案。

      linux多线程编程书籍推荐no.4:《Linux性能优化大师

      

    Linux性能优化大师

      本书适合广大Linux用户深入学习,并适合计算机专业本科、硕士等专业的学生学习参考。

      为特定服务器的应用程序调整关键参数,从而产生优异的性能。

      linux多线程编程书籍推荐no.5:《精通Linux内核网络

      

    精通Linux内核网络

      专注于各网络协议实现技术的精髓及其遵循的指导方针和原则。

      重点讲解数据包在Linux内核网络栈中的传输过程,阐述其与网络各层及各子系统之间的交互。

      从网络开发者视角,配合清晰图表,深入剖析Linux内核网络子系统的内部细节及核心实现。

      最详尽的Linux内核网络专著,深入剖析IPsec、Wireless、InfiniBand等重要内核网络子系统。

      linux多线程编程的学习一定要与时俱进,杜绝闭门造车。以上的linux多线程编程书籍推荐如果还是不能满足你的需求,你还想要寻找更多重磅的计算机好书,请点击关注》》计算机图书频道。

    展开全文
  • linux多线程编程是指基于Linux操作系统下的多线程编程,包括多任务程序的设计,并发程序设计,网络程序设计,数据共享等。Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用...

     linux多线程编程是指基于Linux操作系统下的多线程编程,包括多任务程序的设计,并发程序设计,网络程序设计,数据共享等。Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。小编今天就来把几本linux多线程编程书籍推荐给大家,希望能够帮助到想要了解和学习linux多线程编程的攻城狮们。

      linux多线程编程书籍推荐no.1:《精通Linux

      

    精通Linux(第2版)

      我们学习Linux的原因可能各不相同。对于IT从业者(如系统运维人员)来说,他们需要了解本书中的几乎所有内容。对于Linux软件架构和开发人员来说,他们同样需要了解这些内容,以便发挥操作系统的最大功效。对于研究人员和学生来说,本书能够让他们理解为什么我们要这样设置系统。本书菜鸟与老鸟通吃,既可作为菜鸟的入门教程,也可以作为老鸟的进阶指南。

      linux多线程编程书籍推荐no.2:《Linux设备驱动开发详解:基于最新的Linux 4.0内核

      

    Linux设备驱动开发详解:基于最新的Linux 4.0内核(china-pub首发)

      历时8年,三次重构,内窖愈加炉火纯青。

      全部代码更新至全新的Linux4.0版本。

      全面讲解ARM Linux新版本内核架构,如设备树等。

      不仅仅注重知识和程序的讲解,更注重程序的思想、演变、架构和算法。

      linux多线程编程书籍推荐no.3:《深度实践KVM:核心技术、管理运维、性能优化与项目实施

      

    深度实践KVM:核心技术、<a href=

      中国运维领域里划时代著作,国内顶尖KVM专家和运维专家多年大规模生产环境实践经验总结,国内数十位运维专家鼎力支持和推荐。

      从核心技术、管理运维、性能优化、项目实施等多个维度系统、深入讲解KVM虚拟化技术的工作原理、应用方法和技术生态,并针对生产环境中的各种难题给出了解决方案。

      linux多线程编程书籍推荐no.4:《Linux性能优化大师

      

    Linux性能优化大师

      本书适合广大Linux用户深入学习,并适合计算机专业本科、硕士等专业的学生学习参考。

      为特定服务器的应用程序调整关键参数,从而产生优异的性能。

      linux多线程编程书籍推荐no.5:《精通Linux内核网络

      

    精通Linux内核网络

      专注于各网络协议实现技术的精髓及其遵循的指导方针和原则。

      重点讲解数据包在Linux内核网络栈中的传输过程,阐述其与网络各层及各子系统之间的交互。

      从网络开发者视角,配合清晰图表,深入剖析Linux内核网络子系统的内部细节及核心实现。

      最详尽的Linux内核网络专著,深入剖析IPsec、Wireless、InfiniBand等重要内核网络子系统。

      linux多线程编程的学习一定要与时俱进,杜绝闭门造车。以上的linux多线程编程书籍推荐如果还是不能满足你的需求,你还想要寻找更多重磅的计算机好书,请点击关注》》计算机图书频道。



    《精通Linux内核网络》讨论Linux 内核网络栈的实现及其原理,深入而详尽地分析网络子系统及其架构,主要内容包括:内核网络基础知识、Netlink 套接字、ARP、邻居发现和ICMP 等重要协议的实现、IPv4 和IPv6 的深入探索、Linux 路由选择、Netfilter 和IPsec 的实现、Linux 无线网络、InfiniBand 等。
    《精通Linux内核网络》不仅适合从事网络相关项目的专业人员参考,也能为相关研究人员和学生提供极大帮助。 

    作译者

    Rami Rosen 
    资深软件工程师,Linux内核网络专家。从业十余年间,参与过多个尖端Linux内核项目,曾就Linux内核网络和虚拟化发表过多篇文章,并做过多次演讲。博客地址:http://ramirose.wix.com/ramirosen
    译者简介:
    袁国忠 
    自由译者;2000年起专事翻译,主译图书,偶译新闻稿、软文;出版译著40余部,其中包括《C++ Prime Plus中文版》《CCNA学习指南》《CCNP ROUTE学习指南》《面向模式的软件架构:模式系统》《Android应用UI设计模式》《风投的选择:谁是下一个十亿美元级公司》等,总计700余万字;专事翻译前,从事过三年化工产品分析和开发,做过两年杂志和图书编辑。 

    目录

    第1章 绪论 1
    1.1 Linux网络栈 2
    1.2 网络设备 4
    1.2.1 网络设备中的NAPI 5
    1.2.2 数据包的收发 5
    1.2.3 套接字缓冲区 7
    1.3 Linux内核网络开发模型 10
    1.4 总结 12
    第2章 Netlink套接字 13
    2.1 Netlink簇 13
    2.1.1 Netlink套接字库 15
    2.1.2 结构sockaddr_nl 15
    2.1.3 用于控制TCP/IP联网的用户
    空间包 15
    2.1.4 内核Netlink套接字 16
    2.1.5 Netlink消息报头 20
    2.1.6 NETLINK_ROUTE消息 22
    2.1.7 在路由选择表中添加和删除
    路由选择条目 24
    2.2 通用Netlink协议 25
    2.2.1 创建和发送通用Netlink消息 29
    2.2.2 套接字监视接口 31
    2.3 总结 32
    2.4 快速参考 32
    第3章 Internet控制消息协议(ICMP) 36
    3.1 ICMPv4 36
    3.1.1 ICMPv4的初始化 37
    3.1.2 ICMPv4报头 38
    3.1.3 接收ICMPv4消息 42
    3.1.4 发送ICMPv4消息:目的地
    不可达 43
    3.2 ICMPv6 47
    3.2.1 ICMPv6初始化 47
    3.2.2 ICMPv6报头 48
    3.2.3 接收ICMPv6消息 49
    3.2.4 发送ICMPv6消息 52
    3.3 ICMP套接字(ping套接字) 55
    3.4 总结 56
    3.5 快速参考 56
    3.5.1 方法 56
    3.5.2 表格 57
    3.5.3 procfs条目 58
    3.5.4 使用iptables创建“目的地
    不可达”消息 59
    第4章 IPv4 61
    4.1 IPv4报头 62
    4.2 IPv4的初始化 63
    4.3 接收IPv4数据包 64
    4.4 接收IPv4组播数据包 67
    4.5 IP选项 69
    4.5.1 时间戳选项 71
    4.5.2 记录路由选项 74
    4.5.3 IP选项和分段 82
    4.5.4 创建IP选项 84
    4.6 发送IPv4数据包 85
    4.7 分段 89
    4.7.1 快速路径 90
    4.7.2 慢速路径 93
    4.8 重组 94
    4.9 转发 99
    4.10 总结 101
    4.11 快速参考 101
    4.11.1 方法 102
    4.11.2 宏 104
    第5章 IPv4路由选择子系统 105
    5.1 转发和FIB 105
    5.2 在路由选择子系统中进行查找 107
    5.3 FIB表 110
    5.3.1 FIB信息 110
    5.3.2 缓存 115
    5.3.3 下一跳 115
    5.3.4 策略路由选择 117
    5.3.5 FIB别名 118
    5.4 ICMPv4重定向消息 121
    5.4.1 生成ICMPv4重定向消息 122
    5.4.2 接收ICMPv4重定向消息 123
    5.4.3 IPv4路由选择缓存 125
    5.5 总结 126
    5.6 快速参考 126
    5.6.1 方法 127
    5.6.2 宏 128
    5.6.3 表 128
    5.6.4 路由标志 129
    第6章 高级路由选择 131
    6.1 组播路由选择 131
    6.1.1 IGMP 132
    6.1.2 组播路由选择表 133
    6.1.3 组播转发缓存(MFC) 134
    6.1.4 组播路由器 136
    6.1.5 vif设备 137
    6.1.6 IPv4组播接收路径 138
    6.1.7 方法ip_mr_forward() 141
    6.1.8 方法ipmr_queue_xmit() 143
    6.1.9 方法ipmr_forward_finish() 145
    6.1.10 组播流量中的TTL 146
    6.2 策略路由选择 146
    6.2.1 策略路由选择的管理 147
    6.2.2 策略路由选择的实现 147
    6.3 多路径路由选择 148
    6.4 总结 149
    6.5 快速参考 149
    6.5.1 方法 149
    6.5.2 宏 151
    6.5.3 procfs组播条目 152
    6.5.4 表 152
    第7章 Linux邻接子系统 153
    7.1 邻接子系统的核心 153
    7.1.1 创建和释放邻居 160
    7.1.2 用户空间和邻接子系统之间
    的交互 161
    7.1.3 处理网络事件 163
    7.2 ARP协议(IPv4) 163
    7.2.1 ARP:发送请求 165
    7.2.2 ARP:接收请求和应答 168
    7.3 NDISC协议(IPv6) 174
    7.3.1 重复地址检测(DAD) 174
    7.3.2 NIDSC:发送请求 176
    7.3.3 NDISC:接收邻居请求和
    通告 179
    7.4 总结 185
    7.5 快速参考 186
    7.5.1 方法 186
    7.5.2 宏 189
    7.5.3 结构neigh_statistics 190
    7.5.4 表 191
    第8章 IPv6 192
    8.1 IPv6简介 192
    8.2 IPv6地址 193
    8.2.1 特殊地址 193
    8.2.2 组播地址 194
    8.3 IPv6报头 195
    8.4 扩展报头 197
    8.5 IPv6初始化 199
    8.6 自动配置 200
    8.7 接收IPv6数据包 201
    8.7.1 本地投递 204
    8.7.2 转发 206
    8.8 接收IPv6组播流量 210
    8.9 组播侦听者发现(MLD) 211
    8.9.1 加入和退出组播组 212
    8.9.2 MLDv2组播侦听者报告 215
    8.9.3 组播源过滤 215
    8.10 发送IPv6数据包 220
    8.11 IPv6路由选择 221
    8.12 总结 221
    8.13 快速参考 221
    8.13.1 方法 221
    8.13.2 宏 224
    8.13.3 表 224
    8.13.4 特殊地址 225
    8.13.5 IPv6路由选择表的管理 226
    第9章 Netfilter 227
    9.1 Netfilter框架 227
    9.2 Netfilter挂接点 228
    注册Netfilter钩子回调函数 229
    9.3 连接跟踪 230
    9.3.1 连接跟踪的初始化 231
    9.3.2 连接跟踪条目 234
    9.3.3 连接跟踪辅助方法和期望
    连接 238
    9.3.4 iptables 241
    9.3.5 投递到当前主机 243
    9.3.6 转发数据包 245
    9.3.7 网络地址转换(NAT) 245
    9.3.8 NAT钩子回调函数和连接
    跟踪钩子回调函数 247
    9.3.9 NAT钩子回调函数 250
    9.3.10 连接跟踪扩展 252
    9.4 总结 253
    9.5 快速参考 253
    9.5.1 方法 253
    9.5.2 宏 255
    9.5.3 表 255
    9.5.4 工具和库 256
    第10章 IPsec 257
    10.1 概述 257
    10.2 Internet密钥交换(IKE) 257
    10.3 IPsec和加密 259
    10.4 XFRM框架 259
    10.4.1 XFRM的初始化 260
    10.4.2 XFRM策略 260
    10.4.3 XFRM状态(安全关联) 263
    10.5 IPv4 ESP的实现 266
    10.6 接收IPsec数据包(传输模式) 268
    10.7 发送IPsec数据包(传输模式) 271
    10.8 XFRM查找 272
    10.9 IPsec的NAT穿越功能 275
    10.10 总结 276
    10.11 快速参考 276
    10.11.1 方法 276
    10.11.2 表 278
    第11章 第4层协议 280
    11.1 套接字 280
    11.2 创建套接字 281
    11.3 用户数据包协议(UDP) 285
    11.3.1 UDP的初始化 286
    11.3.2 发送UDP数据包 287
    11.3.3 接收来自网络层(L3)的
    UDP数据包 290
    11.4 传输控制协议(TCP) 293
    11.4.1 TCP报头 293
    11.4.2 TCP的初始化 295
    11.4.3 TCP定时器 296
    11.4.4 TCP套接字的初始化 297
    11.4.5 TCP连接的建立 297
    11.4.6 接收来自网络层(L3)的
    TCP数据包 298
    11.4.7 发送TCP数据包 299
    11.5 流控制传输协议(SCTP) 300
    11.5.1 SCTP数据包和数据块 301
    11.5.2 SCTP块头 302
    11.5.3 SCTP块 302
    11.5.4 SCTP关联 303
    11.5.5 建立SCTP关联 305
    11.5.6 接收SCTP数据包 305
    11.5.7 发送SCTP数据包 306
    11.5.8 SCTP心跳 306
    11.5.9 SCTP多流 306
    11.5.10 SCTP多宿主 307
    11.6 数据报拥塞控制协议(DCCP) 307
    11.6.1 DCCP报头 307
    11.6.2 DCCP的初始化 309
    11.6.3 DCCP套接字的初始化 310
    11.6.4 接收来自网络层(L3)的
    DCCP数据包 311
    11.6.5 发送DCCP数据包 311
    11.6.6 DCCP和NAT 312
    11.7 总结 313
    11.8 快速参考 313
    11.8.1 方法 313
    11.8.2 宏 315
    11.8.3 表 315
    第12章 无线子系统 317
    12.1 mac80211子系统 317
    12.2 802.11 MAC帧头 318
    12.3 802.11 MAC帧头的其他成员 320
    12.4 网络拓扑 321
    12.4.1 基础设施BSS 321
    12.4.2 IBSS(对等模式) 322
    12.5 省电模式 322
    12.5.1 进入省电模式 322
    12.5.2 退出省电模式 322
    12.5.3 处理组播/广播缓冲区 323
    12.6 管理层 325
    12.6.1 扫描 325
    12.6.2 身份验证 325
    12.6.3 关联 325
    12.6.4 重新关联 325
    12.7 mac80211的实现 326
    12.7.1 接收路径 328
    12.7.2 传输路径 328
    12.7.3 分段 329
    12.7.4 mac80211 debugfs 330
    12.7.5 无线模式 331
    12.8 高吞吐量(IEEE 802.11n) 331
    12.9 网状网络(802.11s) 334
    12.9.1 HWMP 335
    12.9.2 组建网状网络 336
    12.10 Linux无线开发流程 337
    12.11 总结 337
    12.12 快速参考 338
    12.12.1 方法 338
    12.12.2 表 341
    第13章 InfiniBand 343
    13.1 RDMA和InfiniBand概述 343
    13.1.1 RDMA栈的组织结构 344
    13.1.2 RDMA技术的优点 345
    13.1.3 InfiniBand硬件组件 345
    13.1.4 InfiniBand中的编址 345
    13.1.5 InfiniBand的功能 346
    13.1.6 InfiniBand数据包 346
    13.1.7 管理实体 347
    13.2 RDMA资源 348
    13.2.1 RDMA设备 348
    13.2.2 PD 350
    13.2.3 AH 350
    13.2.4 MR 350
    13.2.5 FMR池 351
    13.2.6 MW 352
    13.2.7 CQ 352
    13.2.8 XRC 353
    13.2.9 SRQ 353
    13.2.10 QP 355
    13.2.11 工作请求的处理 360
    13.2.12 RDMA架构支持的操作 361
    13.2.13 组播组 365
    13.2.14 用户空间RDMA API
    和内核级RDMA API
    的差别 365
    13.3 总结 366
    13.4 快速参考 366
    第14章 高级主题 372
    14.1 网络命名空间 372
    14.1.1 命名空间的实现 373
    14.1.2 UTS命名空间的实现 381
    14.1.3 网络命名空间的实现 383
    14.1.4 网络命名空间的管理 388
    14.2 cgroup 392
    14.2.1 cgroup的实现 393
    14.2.2 cgroup设备控制器:一个
    简单示例 395
    14.2.3 cgroup内存控制器:一个
    简单示例 396
    14.2.4 net_prio模块 396
    14.2.5 分类器cls_cgroup 397
    14.2.6 挂载cgroup子系统 398
    14.3 频繁轮询套接字 399
    14.3.1 全局启用 400
    14.3.2 对特定套接字启用 401
    14.3.3 调整和配置 401
    14.3.4 性能 401
    14.4 Linux蓝牙子系统 401
    14.4.1 HCI层 404
    14.4.2 HCI连接 406
    14.4.3 L2CAP 407
    14.4.4 BNEP 407
    14.4.5 蓝牙数据包接收示意图 408
    14.4.6 L2CAP扩展功能 409
    14.4.7 蓝牙工具 409
    14.5 IEEE 802.15.4和6LoWPAN 410
    14.5.1 邻居发现优化 411
    14.5.2 Linux内核的6LoWPAN
    实现 412
    14.6 NFC 415
    14.6.1 NFC标签 415
    14.6.2 NFC设备 416
    14.6.3 通信模式和操作模式 416
    14.6.4 主机控制器接口 417
    14.6.5 Linux对NFC的支持 417
    14.6.6 用户空间架构 421
    14.6.7 Android NFC 421
    14.7 通知链 422
    14.8 PCI子系统 425
    14.9 组合网络设备 428
    14.10 PPPoE协议 428
    14.10.1 PPPoE报头 429
    14.10.2 PPPoE的初始化 430
    14.10.3 PPPoE数据包的收发 432
    14.11 Android 435
    14.11.1 Android联网技术 436
    14.11.2 Android内部原理:资料 437
    14.12 总结 438
    14.13 快速参考 438
    14.13.1 方法 438
    14.13.2 宏 443
    附录A Linux API 444
    附录B 网络管理 520
    附录C 术语表 537 


    性能调优有时被称为"黑色艺术",因为有时有效地调整一个系统,要求具有更深层次的知识,且需要了解一个系统的硬件和软件组成,以及系统之间的相互作用。性能优化是针对特定环境来定制系统的配置过程,或者是让某个特定的应用程序得到更好的响应时间或吞吐量的过程。
    《Linux性能优化大师》首先对Linux 操作系统进行了深入剖析,并对最常用的企业监控工具Benchmark 及其他监控工具进行了详细的介绍,此外分析了系统中识别和分析瓶颈的过程,最后阐述如何使用性能衡量工具,以及如何对系统的4 大子系统进行调整,使系统以最优状态应对不同的工作环境。
    《Linux性能优化大师》适合广大Linux 用户深入学习,并适合计算机专业本科、硕士等专业的学生学习参考。 

    作译者

    赵永刚,2006-2008年期间主要从事思科网络研究,并在2008年获得思科CCNA 与CCNP国际认证。2009至今一直在从事Linux系统的研究,并在2009年和2010年分别获得红帽RHCE和RHCA国际认证。

    目录

    第1章深入理解Linux操作系统 1
    1.1 Linux进程管理 1
    1.1.1 什么是进程 2
    1.1.2 进程的生命周期 2
    1.1.3 线程 3
    1.1.4 进程优先级和nice等级 4
    1.1.5 上下文切换 4
    1.1.6 中断处理 5
    1.1.7 进程状态 5
    1.1.8 进程的内存段 6
    1.1.9 Linux CPU调度程序 7
    1.2 Linux内存体系结构 8
    1.2.1 物理内存和虚拟内存 8
    1.2.2 虚拟内存管理 10
    1.3 Linux文件系统 12
    1.3.1 虚拟文件系统 12
    1.3.2 文件系统日志 13
    1.3.3 Ext2 13
    1.3.4 Ext3 15
    1.3.5 Ext4 15
    1.3.6 XFS 18
    1.3.7 Btrfs 19
    1.3.8 JFS 20
    1.3.9 ReiserFS 20
    1.4 Linux 磁盘 I/O 子系统 20
    1.4.1 I/O子系统的体系结构 20
    1.4.2 Cache 20
    1.4.3 块层 23
    1.4.4 I/O 设备驱动程序 25
    1.4.5 RAID与文件系统 26
    1.5 Linux 网络子系统 26
    1.5.1 网络化的实现 26
    1.5.2 TCP/IP 30
    1.5.3 Offload 32
    1.5.4 Bonding模块 32
    1.6 了解Linux性能度量标准 32
    1.6.1 处理器度量标准 32
    1.6.2 内存度量标准 33
    1.6.3 块设备度量标准 34
    1.6.4 网络接口度量标准 34
    第2章 监控工具 35
    2.1 介绍 35
    2.2 工具功能概述 35
    2.3 监控工具 36
    2.3.1 top 36
    2.3.2 uptime 38
    2.3.3 ps、pstree 38
    2.3.4 free 43
    2.3.5 mpstat 44
    2.3.6 vmstat 46
    2.3.7 iostat 50
    2.3.8 netstat、ss 53
    2.3.9 sar 58
    2.3.10 numastat 70
    2.3.11 pmap 72
    2.3.12 iptraf 73
    2.3.13 tcpdump和wireshark 76
    2.3.14 strace和ltrace 92
    2.3.15 gnuplot 97
    2.3.16 Gnome System Monitor 106
    2.3.17 KDE System Guard 114
    第3章 Benchmark工具 123
    3.1 CPU2006 124
    3.1.1 安装与运行 126
    3.1.2 runspec命令 130
    3.1.3 配置文件 139
    3.2 STREAM 167
    3.2.1 什么是STREAM 167
    3.3 Bonnie++ 172
    3.4 Netperf 177
    3.4.1 Netperf介绍 177
    3.4.2 Netperf设计 178
    3.4.3 CPU使用率 179
    3.4.4 全局命令行选项 181
    3.4.5 使用Netperf测量"批量数据"传输 186
    3.4.6 使用Netperf测量"请求/响应" 192
    3.4.7 使用netperf来测试总体性能 196
    3.4.8 使用netperf测量双向传输 201
    3.4.9 omni测试 203
    3.4.10 其他的nerperf测试 206
    第4章分析性能瓶颈 208
    4.1 识别系统瓶颈 208
    4.1.1 收集信息 208
    4.1.2 分析服务器性能 210
    4.2 CPU瓶颈 210
    4.2.1 查找CPU瓶颈 211
    4.2.2 SMP 211
    4.2.3 性能调整选项 211
    4.3 内存瓶颈 212
    4.3.1 查找内存瓶颈 212
    4.3.2 性能调整选项 213
    4.4 磁盘瓶颈 214
    4.4.1 查找磁盘瓶颈 214
    4.4.2 性能调整选项 216
    4.5 网络瓶颈 216
    4.5.1 查找网络瓶颈 216
    4.5.2 性能调整选项 217
    第5章调整操作系统 218
    5.1 调整原则 218
    5.1.1 变更管理 219
    5.2 安装注意事项 219
    5.2.1 安装 219
    5.2.2 检查当前的配置 220
    5.2.3 最小化资源使用 227
    5.2.4 SELinux 231
    5.2.5 编译内核 232
    5.3 更改内核参数 233
    5.3.1 proc文件系统 233
    5.3.2 存储参数的位置 235
    5.3.3 使用sysctl命令 235
    5.4 调整处理器子系统 235
    5.4.1 调整进程优先级 236
    5.4.2 CPU亲和力 237
    5.4.3 平衡中断 240
    5.4.4 NUMA系统 240
    5.5 调整内存子系统 243
    5.5.1 内存回收(设置内核交换和刷新脏数据行为) 243
    5.5.2 调整swap 245
    5.5.3 HugeTLBfs 247
    5.5.4 内存同页合并 250
    5.6 调整磁盘子系统 252
    5.6.1 安装Linux前的硬件注意事项 252
    5.6.2 I/O调度的调整和选择 254
    5.6.3 文件系统的选择和调整 258
    5.6.4 虚拟化存储 261
    5.7 调整网络子系统 263
    5.7.1 网卡绑定 263
    5.7.2 巨帧 265
    5.7.3 速度与双工模式 266
    5.7.4 增加网络缓冲区 268
    5.7.5 增加数据包队列 270
    5.7.6 增加传输队列长度 270
    5.7.7 配置offload 271
    5.7.8 Netfilter 对性能的影响 272
    5.7.9 流量特性的注意事项 275
    5.7.10 额外的TCP/IP调整 276
    5.8 限制资源使用 278 


    虚拟化技术是大数据和云计算应用中的核心技术,经过几年的友展,KVM已经非常成熟和稳定,逐渐取代Xen等商业虚拟化技术和产品,成为该领域事实上的标准。因为采用KVM技术的业务规模都比较大,生产环境大多比较复杂,加上KVM整个技术生态中涉及的技术较多,使用起来有一定的门槛,企业的学习成本较高。
    当KVM技术在国内鲜有人使用时,本书作者团队就开始钻研并在生产环境中使用,短短几年内,就为公司节省了上亿的运莒成本,帮助公司多个处于生命周期末的游戏项目实现扭亏为盈。本书中所有的知识和经验都来自国内一线的互联网公司的生产环境,比如金山西山居、盛大游戏等,最大的特点就是业务规模大、环境复杂,非常具有代表性,极为珍贵。
    本书从多个维度详细讲解了KVM虚拟化原理、技术及性能调优、软硬件选型,生产环境虚拟化项目实施方法,开源管理平台介绍及部署,虚拟化后端存储方案,开源分布式文件系统GIusterFS、Ceph在虚拟化中的使用方法,虚拟化监控、报警、应急方案的制定,并附有大量生产环境案例。 

    作译者

    肖力,资深运维专家,拥有15年运维经验,就职于金山西山居,担任系统运维经理,曾就职于盛大游戏,在运维圈有极大的影响力。国内最顶尖的KVM专家之一,从2009年开始研究KVM技术,是国内较早在生产环境大规模实践KVM的人之一,积累了非常丰富的经验。
    热衷于技术传播,一直在无私地为运维领域的发展做贡献,维护有微信订阅号“KVM虚拟化实践”,分享了大量KVM和运维领域的干货内容,同时还运营着多个运维相关的微信群。此外,他还是华章“运维前线”系列图书的总策划,无偿地在组织大量愿意无私分享经验的运维工程师们来参与写作。
    汪爱伟,资深运维专家,安居客资深系统工程师,曾就职于阿里云、UCloud、盛大游戏等知名互联网公司。对KVM技术有深入的研究,在虚拟化集群方面有丰富的生产环境经验,擅长KVM虚拟化项目的实施和运维。
    杨俊俊,资深虚拟化技术专家和运维工程师,就职于盛大,担任盛大游戏公有云“G云”运维负责人和Intel联合实验室技术负责人,曾任职51。com,精通虚拟化项目的评估与实施,精通开源分布式文件系统在生产环境的运维与实践。
    赵德禄,资深运维工程师和虚拟化工程师,就职于携程,担任高级云平台运维工程师,曾就职于盛大游戏,担任资深虚拟化工程师。精通KVM、OpenStack、OpenvSwitch、桌面虚拟化等技术,在生产环境下的实践经验非常丰富。

    目录

    本书赞誉
    前  言 
    第一篇 KVM技术详解与实践
    第1章 企业虚拟化选型与KVM介绍 2
    1.1 KVM的前世今生 2
    1.2 KVM与常用企业级虚拟化产品的PK 7
    1.3 判断企业是否适合使用KVM的标准 9
    1.4 本章小结 10
    第2章 开始自己的第一台虚拟机 11
    2.1 服务器BIOS设置 11
    2.2 宿主机CentOS 6.5、CentOS 7系统安装与配置技巧 13
    2.3 第一台虚拟机安装 15
    2.4 本章小结 21
    第3章 CPU、内存虚拟化技术与应用场景 22
    3.1 NUMA技术与应用 22
    3.1.1 KVM虚拟机NUMA调优 24
    3.1.2 CPU绑定操作方法 27
    3.2 CPU热添加与应用 32
    3.3 CPU host-passthrough 技术与应用 36
    3.4 CPU Nested 技术与配置方法 38
    3.5 KSM技术与应用 39
    3.6 内存气球技术详解与应用 40
    3.7 内存限制技术与应用 43
    3.8 巨型页内存技术与应用 44
    3.9 本章小结 47
    第4章 网络虚拟化技术与应用场景 48
    4.1 半虚拟化网卡技术详解 48
    4.1.1 半虚拟化网卡的配置 49
    4.1.2 全虚拟化网卡、半虚拟化网卡性能比较 50
    4.1.3 全虚拟化网卡、半虚拟化网卡的应用场景 63
    4.2 MacVTap和vhost-net技术原理与应用 63
    4.2.1 MacVTap技术与应用 64
    4.2.2 vhost_net技术 66
    4.3 网卡的中断与多队列 66
    4.4 网卡PCI Passthrough技术 71
    4.5 SR-IVO虚拟化技术 72
    4.6 虚拟化软件交换机Open vSwitch的安装与配置 75
    4.6.1 Open vSwitch安装 75
    4.6.2 Open vSwitch典型配置 77
    4.7 多网卡绑定与建桥 79
    4.8 本章小结 82
    第5章 KVM磁盘虚拟化技术与应用场景 83
    5.1 磁盘虚拟化方式性能比较与应用场景 83
    5.1.1 QEMU磁盘虚拟化方式概述 83
    5.1.2 IDE与Virtio性能比较测试 84
    5.2 Virtio磁盘缓存方式详解、性能比较与应用场景 85
    5.2.1 磁盘缓存详解 86
    5.2.2 缓存方式的性能比较测试 87
    5.2.3 缓存方式的应用场景 89
    5.3 磁盘镜像格式 89
    5.3.1 QEMU支持的磁盘镜像格式 89
    5.3.2 裸设备使用 96
    5.3.3 KVM虚拟机镜像管理利器guestfish 97
    5.3.4 raw、qcow2、裸盘、lvm性能比较 106
    5.3.5 磁盘镜像格式的应用场景 107
    5.4 文件系统块对齐 108
    5.4.1 什么是块对齐 108
    5.4.2 块对齐与块不对齐性能比较 109
    5.4.3 生产环境如何配置块对齐 110
    5.5 SSD在KVM虚拟化中的使用实践 111
    5.5.1 SSD原理与写放大 111
    5.5.2 SSD在KVM中的使用 112
    5.5.3 Flachcache配置与性能测试 117
    5.5.4 DM-cache配置 120
    5.5.5 LVM cache配置与性能测试 122
    5.5.6 生产环境中SSD使用要点 123
    5.6 本章小结 126
    第6章 KVM虚拟机的资源限制 127
    6.1 哪些场景要做虚拟机的资源限制 127
    6.2 使用CGroups 130
    6.3 KVM虚拟机CPU资源限制配置 142
    6.4 KVM虚拟机网络资源限制 144
    6.5 KVM虚拟机磁盘资源限制 150
    6.6 本章小结 151
    第7章 物理机转虚拟机实践 152
    7.1 哪些应用场景适合做物理机转虚拟机 152
    7.2 P2V的技术实施方案 152
    7.3 Windows系统物理机转虚拟机的操作方法 153
    7.3.1 WinPE的制作方法 153
    7.3.2 Windows系统P2V操作方法 155
    7.4 Linux物理服务器转换虚拟机操作 155
    7.5 使用virt-p2v工具进行P2V转换 157
    7.6 P2V经验总结 160
    7.7 关于V2V 160
    7.8 本章小结 160
    第8章 KVM桌面虚拟化实践 161
    8.1 桌面虚拟化简介及Spice协议 161
    8.2 桌面虚拟化实践经验 162
    8.3 本章小结 167
    第二篇 分布式文件系统
    第9章 几种常见开源文件系统在KVM中的应用 170
    9.1 演示环境基础配置 170
    9.2 DRBD在KVM中的应用 172
    9.2.1 DRBD介绍 172
    9.2.2 DRBD搭建方法及在KVM中的应用 173
    9.2.3 DRBD在KVM虚拟化中的优化方案 183
    9.3 GlusterFS在KVM虚拟化中的应用 184
    9.3.1 GlusterFS介绍 184
    9.3.2 GlusterFS集群搭建与使用 189
    9.3.3 GlusterFS在KVM虚拟化中的应用 195
    9.3.4 GlusterFS在KVM虚拟化中的优化方案 198
    9.4 Sheepdog在KVM中的应用 199
    9.4.1 Sheepdog介绍 199
    9.4.2 Sheepdog搭建方法及在KVM中的应用 201
    9.5 MooseFS在KVM中的应用 207
    9.5.1 MooseFS介绍 208
    9.5.2 MFS搭建方法及在KVM虚拟化中的应用 208
    9.6 本章小结 213
    第10章 Ceph在KVM虚拟化中的应用与故障处理 214
    10.1 Ceph简介 214
    10.2 Ceph部署方法及在KVM中的应用 217
    10.2.1 使用ceph-deploy工具部署Ceph 217
    10.2.2 挂载CephFS 221
    10.2.3 通过Librbd方式使用Ceph RBD 223
    10.2.4 使用内核方式挂载并使用Ceph RBD 226
    10.3 CRUSH算法介绍及调优方法 228
    10.3.1 CRUSH算法介绍 228
    10.3.2 CRUSH算法调优方法 230
    10.4 多角度评估Ceph在KVM虚拟化环境中的应用 234
    10.5 Ceph生产环境搭建案例 240
    10.5.1 使用CephFS集中备份虚拟机 240
    10.5.2 使用Librbd将虚拟机运行在Ceph RBD 241
    10.5.3 在CephFS上创建qcow2文件作为云硬盘 242
    10.6 Ceph常见故障处理 242
    10.6.1 Ceph集群监控状态检查 243
    10.6.2 Ceph常见错误提示的含义与处理方法 244
    10.7 本章小结 245
    第三篇 KVM虚拟化管理平台
    第11章 利用OpenStack管理KVM 248
    11.1 OpenStack搭建 248
    11.1.1 OpenStack简介 248
    11.1.2 控制节点的安装 249
    11.1.3 计算节点的安装 266
    11.2 OpenStack实用技巧 269
    11.2.1 RabbitMQ Cluster搭建 269
    11.2.2 利用Haproxy和Keepalived实现控制节点高可用 271
    11.2.3 冷迁移虚拟机的方法 277
    11.3 本章小结 277
    第12章 利用OpenNebula管理KVM 278
    12.1 OpenNebula架构 278
    12.1.1 OpenNebula架构介绍 278
    12.1.2 OpenNebula组件介绍 279
    12.2 在KVM中使用OpenNebula 280
    12.2.1 在CentOS 6.5上快速搭建OpenNebula 280
    12.2.2 使用OpenNebula创建第一台KVM虚拟机 285
    12.2.3 使虚拟机硬盘创建在宿主机本地硬盘上 288
    12.3 OpenNebula常见故障处理 291
    12.4 本章小结 293
    第13章 其他管理平台介绍 294
    13.1 ConVirt管理平台介绍 294
    13.1.1 ConVirt的理念 294
    13.1.2 ConVirt的架构 295
    13.2 CloudStack管理平台介绍 295
    13.3 oVirt管理平台介绍 297
    13.4 WebVirtMgr管理平台介绍 299
    13.5 如何选择管理平台 303
    13.6 本章小结 304
    第四篇 KVM虚拟化项目实施
    第14章 业务性能评估与压力模型建立 306
    14.1 Linux 系统性能数据采集原则与方法 306
    14.2 Linux 系统压力模型建立 311
    14.3 Windows系统性能数据采集原则与方法 314
    14.4 Windows 系统压力模型建立 317
    14.5 本章小结 319
    第15章 宿主机选型与基础性能测试 320
    15.1 宿主机CPU选型原则 320
    15.2 宿主机内存选型注意事项 322
    15.3 宿主机硬盘选型 324
    15.4 RAID卡选型 326
    15.5 服务器网卡选型 327
    15.6 宿主机性能基准测试实践 328
    15.7 本章小结 345
    第16章 虚拟机镜像制作、配置与测试 346
    16.1 Windows虚拟机制作方法 346
    16.1.1 Windows镜像制作 346
    16.1.2 Windows虚拟机sysprep初始化封装 361
    16.2 Linux镜像制作方法 362
    16.2.1 RHEL/CentOS镜像制作方法 362
    16.2.2 Ubuntu、Debian虚拟机配置注意点 364
    16.3 虚拟机自动配置IP的实现办法 365
    16.3.1 通过DHCP给虚拟机配置IP 365
    16.3.2 通过Libvirt实现虚拟机自动配置IP 365
    16.3.3 笔者生产环境虚拟机IP自动配置的方法 365
    16.4 虚拟机镜像测试 375
    16.5 本章小结 375
    第17章 单机虚拟化技术与生产环境实践 376
    17.1 单机虚拟化技术与应用场景 376
    17.1.1 单机虚拟化的优势和劣势 377
    17.1.2 单机虚拟化技术 378
    17.1.3 单机虚拟化应用场景 380
    17.2 单机虚拟化生产环境注意点 381
    17.2.1 单机虚拟化灾备与应急方案 381
    17.2.2 单机虚拟化生产环境部署实践 382
    17.3 本章小结 385
    第18章 KVM虚拟化集群技术与应用场景 386
    18.1 虚拟化集群设计思路与架构 386
    18.2 虚拟化集群的实施流程与技术方案 389
    18.3 虚拟化集群搭建 392
    18.3.1 计算节点配置与管理 392
    18.3.2 网络设计与配置 403
    18.3.3 虚拟机迁移管理 404
    18.3.4 虚拟化集群的备份与恢复 407
    18.4 Dell EqualLogic存储的管理实践经验 414
    18.5 本章小结 419
    第19章 业务迁移到虚拟化环境流程 420
    19.1 性能评估与测试环境测试 420
    19.2 上线前的检查工作 428
    19.3 小规模部署及逐步切换到虚拟化环境 429
    19.4 本章小结 430
    第20章 宿主机自动化运维管理 431
    20.1 Puppet简介与安装部署 431
    20.2 利用Puppet管理宿主机的运维架构设计 436
    20.3 利用Puppet配置宿主机初始化操作 441
    20.4 利用Puppet管理宿主机配置与更新 442
    20.5 利用Puppet推送宿主机的非一致性配置 445
    20.6 本章小结 449
    第21章 虚拟化监控、报警与应急响应方案 450
    21.1 虚拟化监控内容 450
    21.1.1 宿主机CPU监控要点 450
    21.1.2 宿主机内存监控注意点 455
    21.1.3 宿主机网络监控注意点 458
    21.1.4 宿主机磁盘监控注意点 460
    21.1.5 宿主机层面监控虚拟机的方法 461
    21.2 监控软件Cacti、Zabbix 463
    21.2.1 用Cacti监控宿主机 464
    21.2.2 用Zabbix监控宿主机 471
    21.3 应急方案 487
    21.3.1 应急方案制定注意要点 487
    21.3.2 单机虚拟化应急方案 491
    21.3.3 集群虚拟化应急方案 495
    21.4 本章小结 497
    第五篇 KVM虚拟化典型案例
    第22章 生产环境问题案例与分析 500
    22.1 游戏在虚拟机上非常慢的案例 500
    22.2 虚拟机流量过高引起网络风暴的案例一 502
    22.3 虚拟机流量过高引起网络风暴的案例二 517
    22.4 其他生产环境问题案例 520
    22.4.1 共享存储集群虚拟机迁移故障案例 520
    22.4.2 宿主机异常关机后虚拟机无法启动案例 522
    22.4.3 宿主机使用CentOS 5.6系统问题案例 523
    22.4.4 Windows虚拟机网络闪断、不通问题案例 523
    22.4.5 Windows 7虚拟机只能使用2个CPU案例 524
    22.4.6 生产环境非常奇怪的一个案例 524
    22.4.7 U盘在虚拟机上挂载问题案例 526
    22.4.8 HP ILO4固件Bug引起宿主机重启案例 528
    22.4.9 一次机房断电引起的问题案例 529
    22.4.10 CPU绑定问题案例 531
    22.4.11 生产环境存储故障导致50个虚拟机丢失案例 532
    22.4.12 生产环境Ubuntu虚拟机故障问题案例 533
    22.5 本章小结 538
    附录 笔者推荐的KVM学习资料 539 

    对于嵌入式工程师来说,进入更高阶段后,学习Linux设备驱动开发无疑就是职业生涯的一次“重生”。这是因为Linux设备驱动开发不仅仅涉及操作系统的转换,开发方式的转换,更重要的是思维上的转变。对于Linux这样一个复杂系统,如何从复杂的代码中抓住设备驱动开发的关键是任何一个Linux设备驱动开发者入门时需要面对的挑战。除了知识、工具之外,往往还需要思路上的指导。本书不但帮助Linux设备驱动开发的初学者厘清必要的概念,还从具体的实例、设备驱动开发的指导原则循序渐进地引导读者渐入学习佳境。为了让读者能够达到Linux设备驱动开发的至臻境界,作者更是从软件工程的角度抽象出设备驱动开发的一般思想。毫无疑问,本书将成为读者学习Linux设备驱动开发过程中的一座“灯塔”。 

    作译者

    宋宝华 
    Linux布道者,知名嵌入式系统专家,《Essential Linux Device Drivers》译者。作为最早从事Linux内核与设备驱动研究的专家之一,他在众多国内外知名企业开展Linux技术培训。他也是一位活跃的Linux开发者和深度实践者,为Linux官方内核贡献了大量的Linux源码并承担代码审核工作。至今已向Linux官方内核提交逾数万行代码和几百个补丁。他的《Linux设备驱动开发详解》系列书在嵌入式Linux开发者中有口皆碑,是众多Linux书籍中为数不多的畅销书。 

    目录

    赞誉 
    推荐序一 
    推荐序二 
    前言 
    第1章 Linux设备驱动概述及开发环境构建 1
    1.1 设备驱动的作用 1
    1.2 无操作系统时的设备驱动 2
    1.3 有操作系统时的设备驱动 4
    1.4 Linux设备驱动 5
    1.4.1 设备的分类及特点 5
    1.4.2 Linux设备驱动与整个软硬件系统的关系 6
    1.4.3 Linux设备驱动的重点、难点 7
    1.5 Linux设备驱动的开发环境构建 8
    1.5.1 PC上的Linux环境 8
    1.5.2 QEMU实验平台 11
    1.5.3 源代码阅读和编辑 13
    1.6 设备驱动Hello World:LED驱动 15
    1.6.1 无操作系统时的LED驱动 15
    1.6.2 Linux下的LED驱动 15
    第2章 驱动设计的硬件基础 20
    2.1 处理器 20
    2.1.1 通用处理器 20
    2.1.2 数字信号处理器 22
    2.2 存储器 24
    2.3 接口与总线 28
    2.3.1 串口 28
    2.3.2 I2C 29
    2.3.3 SPI 30
    2.3.4 USB 31
    2.3.5 以太网接口 33
    2.3.6 PCI和PCI-E 34
    2.3.7 SD和SDIO 36
    2.4 CPLD和FPGA 37
    2.5 原理图分析 40
    2.6 硬件时序分析 42
    2.6.1 时序分析的概念 42
    2.6.2 典型的硬件时序 43
    2.7 芯片数据手册阅读方法 44
    2.8 仪器仪表使用 47
    2.8.1 万用表 47
    2.8.2 示波器 47
    2.8.3 逻辑分析仪 49
    2.9 总结 51
    第3章 Linux内核及内核编程 52
    3.1 Linux内核的发展与演变 52
    3.2 Linux 2.6后的内核特点 56
    3.3 Linux内核的组成 59
    3.3.1 Linux内核源代码的目录结构 59
    3.3.2 Linux内核的组成部分 60
    3.3.3 Linux内核空间与用户空间 64
    3.4 Linux内核的编译及加载 64
    3.4.1 Linux内核的编译 64
    3.4.2 Kconfig和Makefile 66
    3.4.3 Linux内核的引导 74
    3.5 Linux下的C编程特点 75
    3.5.1 Linux编码风格 75
    3.5.2 GNU C与ANSI C 78
    3.5.3 do { } while(0) 语句 83
    3.5.4 goto语句 85
    3.6 工具链 85
    3.7 实验室建设 88
    3.8 串口工具 89
    3.9 总结 91
    第4章 Linux内核模块 92
    4.1 Linux内核模块简介 92
    4.2 Linux内核模块程序结构 95
    4.3 模块加载函数 95
    4.4 模块卸载函数 97
    4.5 模块参数 97
    4.6 导出符号 99
    4.7 模块声明与描述 100
    4.8 模块的使用计数 100
    4.9 模块的编译 101
    4.10 使用模块“绕开”GPL 102
    4.11 总结 103
    第5章 Linux文件系统与设备文件 104
    5.1 Linux文件操作 104
    5.1.1 文件操作系统调用 104
    5.1.2 C库文件操作 108
    5.2 Linux文件系统 109
    5.2.1 Linux文件系统目录结构 109
    5.2.2 Linux文件系统与设备驱动 110
    5.3 devfs 114
    5.4 udev用户空间设备管理 116
    5.4.1 udev与devfs的区别 116
    5.4.2 sysfs文件系统与Linux设备模型 119
    5.4.3 udev的组成 128
    5.4.4 udev规则文件 129
    5.5 总结 133
    第6章 字符设备驱动 134
    6.1 Linux字符设备驱动结构 134
    6.1.1 cdev结构体 134
    6.1.2 分配和释放设备号 136
    6.1.3 file_operations结构体 136
    6.1.4 Linux字符设备驱动的组成 138
    6.2 globalmem虚拟设备实例描述 142
    6.3 globalmem设备驱动 142
    6.3.1 头文件、宏及设备结构体 142
    6.3.2 加载与卸载设备驱动 143
    6.3.3 读写函数 144
    6.3.4 seek函数 146
    6.3.5 ioctl函数 146
    6.3.6 使用文件私有数据 148
    6.4 globalmem驱动在用户空间中的验证 156
    6.5 总结 157
    第7章 Linux设备驱动中的并发控制 158
    7.1 并发与竞态 158
    7.2 编译乱序和执行乱序 160
    7.3 中断屏蔽 165
    7.4 原子操作 166
    7.4.1 整型原子操作 167
    7.4.2 位原子操作 168
    7.5 自旋锁 169
    7.5.1 自旋锁的使用 169
    7.5.2 读写自旋锁 173
    7.5.3 顺序锁 174
    7.5.4 读-复制-更新 176
    7.6 信号量 181
    7.7 互斥体 183
    7.8 完成量 184
    7.9 增加并发控制后的globalmem的设备驱动 185
    7.10 总结 188
    第8章 Linux设备驱动中的阻塞与非阻塞I/O 189
    8.1 阻塞与非阻塞I/O 189
    8.1.1 等待队列 191
    8.1.2 支持阻塞操作的globalfifo设备驱动 194
    8.1.3 在用户空间验证globalfifo的读写 198
    8.2 轮询操作 198
    8.2.1 轮询的概念与作用 198
    8.2.2 应用程序中的轮询编程 199
    8.2.3 设备驱动中的轮询编程 201
    8.3 支持轮询操作的globalfifo驱动 202
    8.3.1 在globalfifo驱动中增加轮询操作 202
    8.3.2 在用户空间中验证globalfifo设备的轮询 203
    8.4 总结 205
    第9章 Linux设备驱动中的异步通知与异步I/O 206
    9.1 异步通知的概念与作用 206
    9.2 Linux异步通知编程 207
    9.2.1 Linux信号 207
    9.2.2 信号的接收 208
    9.2.3 信号的释放 210
    9.3 支持异步通知的globalfifo驱动 212
    9.3.1 在globalfifo驱动中增加异步通知 212
    9.3.2 在用户空间中验证globalfifo的异步通知 214
    9.4 Linux异步I/O 215
    9.4.1 AIO概念与GNU C库AIO 215
    9.4.2 Linux内核AIO与libaio 219
    9.4.3 AIO与设备驱动 222
    9.5 总结 223
    第10章 中断与时钟 224
    10.1 中断与定时器 224
    10.2 Linux中断处理程序架构 227
    10.3 Linux中断编程 228
    10.3.1 申请和释放中断 228
    10.3.2 使能和屏蔽中断 230
    10.3.3 底半部机制 230
    10.3.4 实例:GPIO按键的中断 235
    10.4 中断共享 237
    10.5 内核定时器 238
    10.5.1 内核定时器编程 238
    10.5.2 内核中延迟的工作delayed_work 242
    10.5.3 实例:秒字符设备 243
    10.6 内核延时 247
    10.6.1 短延迟 247
    10.6.2 长延迟 248
    10.6.3 睡着延迟 248
    10.7 总结 250
    第11章 内存与I/O访问 251
    11.1 CPU与内存、I/O 251
    11.1.1 内存空间与I/O空间 251
    11.1.2 内存管理单元 252
    11.2 Linux内存管理 256
    11.3 内存存取 261
    11.3.1 用户空间内存动态申请 261
    11.3.2 内核空间内存动态申请 262
    11.4 设备I/O端口和I/O内存的访问 267
    11.4.1 Linux I/O端口和I/O内存访问接口 267
    11.4.2 申请与释放设备的I/O端口和I/O内存 268
    11.4.3 设备I/O端口和I/O内存访问流程 269
    11.4.4 将设备地址映射到用户空间 270
    11.5 I/O内存静态映射 276
    11.6 DMA 277
    11.6.1 DMA与Cache一致性 278
    11.6.2 Linux下的DMA编程 279
    11.7 总结 285
    第12章 Linux设备驱动的软件架构思想 286
    12.1 Linux驱动的软件架构 286
    12.2 platform设备驱动 290
    12.2.1 platform总线、设备与驱动 290
    12.2.2 将globalfifo作为platform设备 293
    12.2.3 platform设备资源和数据 295
    12.3 设备驱动的分层思想 299
    12.3.1 设备驱动核心层和例化 299
    12.3.2 输入设备驱动 301
    12.3.3 RTC设备驱动 306
    12.3.4 Framebuffer设备驱动 309
    12.3.5 终端设备驱动 311
    12.3.6 misc设备驱动 316
    12.3.7 驱动核心层 321
    12.4 主机驱动与外设驱动分离的设计思想 321
    12.4.1 主机驱动与外设驱动分离 321
    12.4.2 Linux SPI主机和设备驱动 322
    12.5 总结 330
    第13章 Linux块设备驱动 331
    13.1 块设备的I/O操作特点 331
    13.2 Linux块设备驱动结构 332
    13.2.1 block_device_operations结构体 332
    13.2.2 gendisk结构体 334
    13.2.3 bio、request和request_queue 335
    13.2.4 I/O调度器 339
    13.3 Linux块设备驱动的初始化 340
    13.4 块设备的打开与释放 342
    13.5 块设备驱动的ioctl函数 342
    13.6 块设备驱动的I/O请求处理 343
    13.6.1 使用请求队列 343
    13.6.2 不使用请求队列 347
    13.7 实例:vmem_disk驱动 349
    13.7.1 vmem_disk的硬件原理 349
    13.7.2 vmem_disk驱动模块的加载与卸载 349
    13.7.3 vmem_disk设备驱动的block_device_operations 351
    13.7.4 vmem_disk的I/O请求处理 352
    13.8 Linux MMC子系统 354
    13.9 总结 357
    第14章 Linux网络设备驱动 358
    14.1 Linux网络设备驱动的结构 358
    14.1.1 网络协议接口层 359
    14.1.2 网络设备接口层 363
    14.1.3 设备驱动功能层 367
    14.2 网络设备驱动的注册与注销 367
    14.3 网络设备的初始化 369
    14.4 网络设备的打开与释放 370
    14.5 数据发送流程 371
    14.6 数据接收流程 372
    14.7 网络连接状态 375
    14.8 参数设置和统计数据 377
    14.9 DM9000网卡设备驱动实例 380
    14.9.1 DM9000网卡硬件描述 380
    14.9.2 DM9000网卡驱动设计分析 380
    14.10 总结 386
    第15章 Linux I2C核心、总线与设备驱动 387
    15.1 Linux I2C体系结构 387
    15.2 Linux I2C核心 394
    15.3 Linux I2C适配器驱动 396
    15.3.1 I2C适配器驱动的注册与注销 396
    15.3.2 I2C总线的通信方法 397
    15.4 Linux I2C设备驱动 399
    15.4.1 Linux I2C设备驱动的模块加载与卸载 400
    15.4.2 Linux I2C设备驱动的数据传输 400
    15.4.3 Linux的i2c-dev.c文件分析 400
    15.5 Tegra I2C总线驱动实例 405
    15.6 AT24xx EEPROM的I2C设备驱动实例 410
    15.7 总结 413
    第16章 USB主机、设备与Gadget驱动 414
    16.1 Linux USB驱动层次 414
    16.1.1 主机侧与设备侧USB驱动 414
    16.1.2 设备、配置、接口、端点 415
    16.2 USB主机控制器驱动 420
    16.2.1 USB主机控制器驱动的整体结构 420
    16.2.2 实例:Chipidea USB主机驱动 425
    16.3 USB设备驱动 425
    16.3.1 USB设备驱动的整体结构 425
    16.3.2 USB请求块 430
    16.3.3 探测和断开函数 435
    16.3.4 USB骨架程序 436
    16.3.5 实例:USB键盘驱动 443
    16.4 USB UDC与Gadget驱动 446
    16.4.1 UDC和Gadget驱动的关键数据结构与API 446
    16.4.2 实例:Chipidea USB UDC驱动 451
    16.4.3 实例:Loopback Function驱动 453
    16.5 USB OTG驱动 456
    16.6 总结 458
    第17章 I2C、SPI、USB驱动架构类比 459
    17.1 I2C、SPI、USB驱动架构 459
    17.2 I2C主机和外设眼里的Linux世界 460
    第18章 ARM Linux设备树 461
    18.1 ARM设备树起源 461
    18.2 设备树的组成和结构 462
    18.2.1 DTS、DTC和DTB等 462
    18.2.2 根节点兼容性 468
    18.2.3 设备节点兼容性 470
    18.2.4 设备节点及label的命名 475
    18.2.5 地址编码 477
    18.2.6 中断连接 479
    18.2.7 GPIO、时钟、pinmux连接 480
    18.3 由设备树引发的BSP和驱动变更 484
    18.4 常用的OF API 490
    18.5 总结 493
    第19章 Linux电源管理的系统架构和驱动 494
    19.1 Linux电源管理的全局架构 494
    19.2 CPUFreq驱动 495
    19.2.1 SoC的CPUFreq驱动实现 495
    19.2.2 CPUFreq的策略 501
    19.2.3 CPUFreq的性能测试和调优 501
    19.2.4 CPUFreq通知 502
    19.3 CPUIdle驱动 504
    19.4 PowerTop 508
    19.5 Regulator驱动 508
    19.6 OPP 511
    19.7 PM QoS 515
    19.8 CPU热插拔 518
    19.9 挂起到RAM 522
    19.10 运行时的PM 528
    19.11 总结 534
    第20章 Linux芯片级移植及底层驱动 535
    20.1 ARM Linux底层驱动的组成和现状 535
    20.2 内核节拍驱动 536
    20.3 中断控制器驱动 541
    20.4 SMP多核启动以及CPU热插拔驱动 549
    20.5 DEBUG_LL和EARLY_PRINTK的设置 556
    20.6 GPIO驱动 557
    20.7 pinctrl驱动 560
    20.8 时钟驱动 572
    20.9 dmaengine驱动 578
    20.10 总结 580
    第21章 Linux设备驱动的调试 581
    21.1 GDB调试器的用法 581
    21.1.1 GDB的基本用法 581
    21.1.2 DDD图形界面调试工具 591
    21.2 Linux内核调试 594
    21.3 内核打印信息——printk() 596
    21.4 DEBUG_LL和EARLY_PRINTK 599
    21.5 使用“/proc” 600
    21.6 Oops 606
    21.7 BUG_ON()和WARN_ON() 608
    21.8 strace 609
    21.9 KGDB 610
    21.10 使用仿真器调试内核 612
    21.11 应用程序调试 613
    21.12 Linux性能监控与调优工具 616
    21.13 总结 618 



    展开全文
  • 了解linux内核必读的5本书

    万次阅读 2018-10-06 19:06:26
    了解linux内核必读的5本书 1.《Linux内核设计与实现》 简称LKD,从入门开始,介绍了诸如进程管理、系统调用、中断和中断处理程序、内核同步、时间管理、内存管理、地址空间、调试技术等方面,内容比较浅显易懂,...

                              了解linux内核必读的5本书

    1.《Linux内核设计与实现》

    简称LKD,从入门开始,介绍了诸如进程管理、系统调用、中断和中断处理程序、内核同步、时间管理、内存管理、地址空间、调试技术等方面,内容比较浅显易懂,个人认为是内核新人首先必读的书籍。

     
    2.《深入理解Linux内核》

    简称ULK,相比于LKD的内容不够深入、覆盖面不广,ULK要深入全面得多。 

     

    3.《Linux设备驱动程序》

    简称LDD,驱动开发者都要人手一本了。

     

    4.《深入理解Linux虚拟内存管理》

    简称LVMM,是一本介绍Linux虚拟内存管理机制的书。如果你希望深入的研究Linux的内存管理子系统,仔细的研读这本书无疑是最好的选择。

     

    5.《深入理解LINUX网络内幕》

     一本讲解网络子系统实现的书,通过这本书,我们可以了解到Linux内核是如何实现复杂的网络功能的。

         

          这5本书各有侧重,正如下面的图所展示的那样,恰好代表了个人一直主张的内核学习方法:首先通过LKD或ULK了解内核的设计实现特点,对内核有个整体全局的认识和理解,然后可分为两个岔路:

    (1)如果从事驱动开发,则钻研LDD,如果希望对内核不是泛泛而谈而是有更深入的理解,则可以选择一个自己感兴趣的子系统,仔细分析它的代码,不懂的地方就通过社区、邮件列表或者直接发Email给maintainer请教等途径弄懂,切勿得过且过,这样分析下来,对同步、中断等等内核的很多机制也同样会非常了解,俗话说的一通则百通就是这个道理。

    (2)当然,如果你选择研究的是内存管理或者网络,则可以有上面的两本书可以学习,如果是其他子系统,可能就没有这么好的运气了。

     

    展开全文
  • linux内核编程--4netfiter钩子函数

    千次阅读 2018-03-09 22:16:51
    1. 背景京东金融资深C/C++开发工程师 岗位被面试到,本来在《深入linux内核架构》一书中见过,但由于整本书看的不是很懂,也没实验,当时吱吱唔唔的回答了,答案不是很理想。后来也就没有了后来······2. 概述...
  • 不能错过的4Linux好书

    万次阅读 多人点赞 2013-07-01 09:31:30
    2010年大学毕业,在Linux下编程已三...再回头数数,这几年买过的关于Linux的书籍太多了:《嵌入式Linux应用开发完全手册》《Linux设备驱动开发详解》《深入理解LINUX内核》《LINUX设备驱动程序(第3版) 博韦》《unix环
  • 其实Linux内核是一个庞大而复杂的操作系统的核心,学习linux内核有五作用,下面我们来盘点linux内核五作用。 1、管理进程:内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出),不同进程间通讯...
  • Linux程序设计》第4版 核心笔记

    千次阅读 2017-05-08 19:22:26
    本书的学习目标: 1. 掌握标准linux C语言函数库和个中linux或unix标准指定的其他工具的使用方法 2. 掌握如何使用大多数标准linux开发工具 3. 学会通过DBM和MySQL数据库系统存储Linux中的数据 4. 理解如何为X视窗...
  • Linux 就该这么学

    万次阅读 多人点赞 2018-08-14 00:44:41
    本书源自日均阅读量近万次火爆的线上同名课程,口碑与影响力俱佳,旨在打造简单易学且实用性强的轻量级 Linux 入门教程。 本书基于红帽 RHEL 系统编写,且内容通用于 CentOS、Fedora 等系统。本书共分为20章,内容...
  • Linux

    千次阅读 2008-11-22 00:50:00
    转贴自 http://www.linuxsir.org/main/?q=node/192Linux 文件类型 及文件的扩展名作者:北南南北来自:LinuxSir.Org摘要: Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等,...
  • Linux系统编程(第2版) 跳转至: 导航、 搜索 目录 1 入门和基本概念2 文件I/O3 缓冲I/O4 高级文件I/O5 进程管理6 高级进程管理7 线程8 文件和目录管理9 内存管理10 信号11 ...
  • Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。 执行如下命令,可以查看文件所有的信息 [deng@localhost ~]$ ls -lhi 总...
  • 本博实时更新《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)的最新进展。 目前已经完成稿件。 ...本书微信公众号"linux阅码场", 扫描下方二维码关注
  • Linux 二进制分析

    千次阅读 2018-11-06 11:55:21
    内容简介 二进制分析属于信息安全业界逆向工程中的一种技术,通过利用可执行的机器代码(二进制)来分析应用程序...本书是一本剖析 Linux ELF 工作机制的图书,共分为9章,其内容涵盖了 Linux 环境和相关工具、ELF ...
  • 点击查看北航出版社《追踪LINUX TCP/IP代码运行》情况介绍     <br /> <br />  转眼一年过去了,经过艰难而漫长的审稿、校稿之后,大家期待多时的《追踪LINUX TCP/IP代码运行》...
  • linux基础教程 黑鹰基地Linux运维特训班 谈谈如何学习Linux 1、假如你从来接触过Linux的话,首先要做的就找一本指导书来学习 2、现在公认的Linux的入门书籍是“鸟哥的私房菜”...4、学习Linux的时候,或者学习其他网...
  • 4.gcc和arm-linux-gcc

    千次阅读 2018-12-20 10:43:34
    4.静态连接和动态连接 1.gcc和arm-linux-gcc有何不同? 从本质来讲他们都是编译器,而gcc是linux系统下面用来将代码编译成一个可执行程序的手段。编译出来的是适用于linux系统的可执行二进制文件。可执行程序其实...
  • 《Unix & Linux》大学教程小结

    千次阅读 2013-11-15 19:47:59
    大概在两个月以前我就开始看这本书了,我没有看书的习惯。应该可以说这是第一本我看了这么多的书,这本书内容比较简单,讲的东西都很容易理解。现在我已经看到了第12章,今天忽然想到应该做点小总结不然看完了又什么...
  • Linux 内核分析及应用

    千次阅读 2018-11-06 11:55:57
    本书分模块介绍了 Linux 操作系统的内核设计和实现,针对关键概念、算法和数据结构做了重点的讲解。同时,对诸多经典应用程序进行了剖析,如 Nginx、Memcached、Redis、LVS 等,讲解如何利用操作系统提供的底层支持...
  • linux 下C编程 牛总结

    千次阅读 2013-01-02 10:26:30
    在很多人的眼里,C语言和linux常常是分不开的。这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品。当然,linux操作系统本身对C语言的支持也是相当到位的。作为一个真正的程序员来说,如果...
  • Linux kernel development

    千次阅读 2017-01-06 14:53:56
    linux
  • Linux从一个黑客的个人项目发展到一个遍布全球的操作系统,这一历程就象一次生物的进化。八十年代早期, Richard Stallman发起了GNU项目,为开源软件的发展奠定了基础。 Andrew Tanenbaum教授开发的MINIX系统,把...
  • Linux——linux学习全攻略 (转)

    万次阅读 多人点赞 2011-02-23 10:26:00
    Linux——linux学习全攻略 Linux——linux学习全攻略 Linux——linux学习全攻略
  • 搭建Linux虚拟机并编写简单程序

    万次阅读 多人点赞 2019-05-28 18:25:43
    现在越来越多IT行业公司要求熟练使用Linux平台下的编程技术,因为目前部分主机使用Linux相关系统(Linux称为内核更确切一些),并且逐年增加。造成这种现象的主要原因是: 免费、开源: 大多数服务器系统采用闭源...
  • Linux 系统结构详解

    万次阅读 2017-04-05 10:49:24
    Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。 1. linux...
  • Linux学习路线

    万次阅读 2015-04-09 10:19:27
    自己的学习路线写一下最近个人的linux学习路线,学完后再好好参考其他人的:1.《Linux程序设计》- 靠它来入门,然后装一个linux系统,学习shell(bash)和linux C,把基础打牢; 2. 《深入理解Linux内核》...4.《Advance
  • Kali Linux 秘籍 第二章 定制 Kali Linux

    万次阅读 2016-07-28 16:52:23
    第二章 定制 Kali Linux 作者:Willie L. Pritchett, David De Smet 译者:飞龙 协议:CC BY-NC-SA 4.0 这一章会向你介绍Kali的定制,便于你更好地利用它。我们会涉及到ATI和英伟达GPU技术的安装和配置,以及...
  • Linux过滤器

    千次阅读 2016-09-12 13:10:55
    最近在看《unix & Linux 大学教程》这本书 ,觉得看完鸟哥再看这本书收获 还是很多的,鸟哥告诉你how do,这本书告诉你why do ,很多命令很多设置是非常 容易忘记的,因为linux or unix 的高度可定制化的哈。今天就...
  • Linux心得体会

    千次阅读 2017-09-22 17:49:12
    今天不讲深入的东西,只想将自己多年来...很多新手都有一个很疑惑的问题:“Linux我听过,但是学习linux系统,能在上面干什么呢,或者说linux系统具体能做什么”,带着这个疑问,在本书的开篇,我们先来了解下Linux

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,170
精华内容 22,068
关键字:

linux4大本书

linux 订阅