《Linux编程白皮书》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美)(D.A.罗斯林)David A. Rusling等著;朱珂等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2000
  • ISBN:7111078047
  • 页数:378 页
图书介绍:本书对Linux操作系统及其编程作了整体介绍,对内存管理、进程及其通信机制、PCI、内核模块编程及内核系统结构作了详细的解释。

前言 6

第1章 硬件基础与软件基础 6

1.1硬件基础 6

第一部分 Linux内核 6

1.1.1 CPU 7

1.1.2存储器 8

1.1.3总线 8

1.1.4控制器和外设 8

1.2软件基础 9

1.2.1计算机语言 9

1.1.6时钟 9

1.1.5地址空间 9

1.2.2什么是操作系统 11

1.2.3内核数据结构 13

第2章 内存管理 15

2.1虚拟内存抽象模型 15

2.1.1请求调页 17

2.1.2交换 17

2.1.4物理寻址模式和虚拟寻址模式 18

2.1.5访问控制 18

2.1.3共享虚拟内存 18

2.2高速缓存 19

2.3 Linux页表 20

2.4页分配和回收 21

2.4.1页分配 22

2.4.2页回收 22

2.5内存映射 22

2.6请求调页 23

2.7 Linux页缓存 24

2.8.1减少缓冲区和页缓存大小 25

2.8页换出和淘汰 25

2.8.2换出System V共享内存页 26

2.8.3换出和淘汰页 27

2.9交换缓存 27

2.10页换入 28

第3章 进程 29

3.1 Linux进程 29

3.2标识符 31

3.3调度 32

3.4文件 34

3.5虚拟内存 35

3.6创建进程 36

3.7时间和定时器 37

3.8执行程序 38

3.8.1 ELF 39

3.8.2脚本文件 40

第4章 进程间通信机制 41

4.1信号机制 41

4.2管道 42

4.3套接字 44

4.3.1 System V的进程间通信机制 44

4.3.2消息队列 44

4.3.3信号量 45

4.3.4共享存储区 47

第5章 PCI 49

5.1 PCI的地址空间 49

5.2 PCI配置头 50

5.3 PCI的I/O和存储地址空间 51

5.4 PCI-ISA桥 51

5.5 PCI-PCI桥 51

5.5.1 PCI-PCI桥:PCI I/O和存储地址空间的窗口 51

5.5.2 PCI-PCI桥:PCI配置周期和PCI总线编号 52

5.6.2 PCI设备驱动程序 53

5.6 Linux PCI初始化 53

5.6.1 Linux内核PCI数据结构 53

5.6.3 PCI的BIOS函数 56

5.6.4 PCI修正过程 57

第6章 中断处理与设备驱动程序 60

6.1中断与中断处理 60

6.1.1可编程中断控制器 61

6.1.2初始化中断处理数据结构 61

6.1.3中断处理 62

6.2设备驱动程序 63

6.2.1测试与中断 64

6.2.2直接存储器访问(DMA) 65

6.2.3存储器 66

6.2.4设备驱动程序与内核的接口 66

6.2.5硬盘 69

6.2.6网络设备 74

第7章 文件系统 77

7.1第二个扩展文件系统EXT2 78

7.1.1 EXT2系统的inode节点 79

7.1.2 EXT2系统的超级块 80

7.1.3 EXT2系统的组描述符 80

7.1.5在EXT2文件系统中查找文件 81

7.1.4 EXT2系统的目录 81

7.1.6在EXT2文件系统中改变文件的大小 82

7.2虚拟文件系统 83

7.2.1 VFS文件系统的超级块 84

7.2.2 VFS文件系统的inode节点 84

7.2.3注册文件系统 85

7.2.4装配文件系统 85

7.2.6卸载文件系统 87

7.2.7 VFS文件系统的inode缓存 87

7.2.5在虚拟文件系统中查找文件 87

7.2.8目录缓存 88

7.3缓冲区缓存 88

7.3.1 bdflush内核守护进程 90

7.3.2 update进程 90

7.4 /proc文件系统 91

第8章 网络 92

8.1 TCP/IP网络概述 92

8.2 Linux中的TCP/IP网络层次结构 95

8.3 BSD套接字接口 96

8.4 INET的套接字层 97

8.4.1创建BSD套接字 98

8.4.2为INET BSD Socket绑定地址 99

8.4.3建立INET BSD Socket连接 99

8.4.4 INET BSD Socket侦听 100

8.4.5接受连接请求 100

8.5 IP层 100

8.5.1套接字缓冲区 100

8.5.2接收IP报文 101

8.5.3发送IP报文 102

8.5.4数据分片 102

8.6地址解析协议 103

8.7 IP路由 104

第9章 内核机制与模块 107

9.1内核机制 107

9.1.1 Bottom Half控制 107

9.1.2任务队列 108

9.1.3定时器 109

9.1.4等待队列 110

9.1.5自旋锁 110

9.1.6信号量 110

9.2模块 111

9.2.1模块载入 112

9.2.2模块卸载 113

第10章 处理器 115

10.1 X86 115

10.2 ARM 115

10.3 Alpha AXP处理器 115

第11章 Linux内核源代码 117

11.1怎样得到Linux内核源码 117

11.2内核源码的编排 117

11.3从何处看起 118

第12章 Linux数据结构 120

附录A 有用的Web和FTP站点 138

附录B 词汇表 139

第二部分 Linux内核模块编程指南 145

致谢 145

前言 145

第1章 Hello,World 145

1.1内核模块的Makefiles文件 146

1.2多重文件内核模块 147

第2章 字符设备文件 149

第3章 /proc文件系统 158

第4章 把/proc用于输入 162

第5章 把设备文件用于输入 170

第6章 启动参数 182

第7章 系统调用 185

第8章 阻塞处理 190

第9章 替换printk 199

第10章 任务调度 202

第11章 中断处理程序 207

第12章 对称多处理 211

第13章 常见错误 212

附录A 2.0和2.2之间的差异 213

附录B 其他资源 214

附录C 给出你的评价 215

第1章Linux操作系统 219

第三部分 Linux程序员指南 219

第2章Linux内核 220

第3章Linux libc包 221

第4章 系统调用 222

第5章 “瑞士军刀”:ioctl 223

第6章Linux进程间通信 224

6.1介绍 224

6.2半双工Unix管理 224

6.2.1基本概念 224

6.2.2用C语言创建管道 225

6.2.3简便方法 229

6.2.4管道的原子操作 233

6.2.5关于半双工管道需要注意的几个问题 233

6.3命名管道 234

6.3.1基本概念 234

6.3.2创建FIFO 234

6.3.3 FIFO操作 235

6.3.4 FIFO上的阻塞动作 236

6.3.5 SIGPIPE信号 237

6.4系统V IPC 237

6.4.1基本概念 237

6.4.2消息队列 239

6.4.3信号量 251

6.4.4 semtool:交互式信号量操作程序 260

6.4.5共享内存 267

第7章 声音编程 274

7.1内部扬声器编程 274

7.2声卡编程 274

第8章 字符单元图形 276

8.1 libc中的I/O函数 277

8.1.1格式化输出 277

8.2.1前言 278

8.1.2格式化输入 278

8.2 termcap库 278

8.2.2获得终端描述 279

8.2.3查看终端描述 279

8.2.4 termcap权能 280

8.3 Ncurses简介 280

8.4初始化 282

8.5窗口 283

8.6输出 284

8.6.1格式化输出 285

8.6.3删除字符/行 286

8.6.2插入字符/行 286

8.6.4方框和直线 287

8.6.5背景字符 287

8.7输入 288

8.8选项 289

8.8.1输出选项 289

8.8.2输入选项 290

8.8.3终端属性 291

8.8.4使用选项 291

8.9更新终端 292

8.10视频属性与颜色 293

8.11光标和屏幕坐标 294

8.12滚动 294

8.13小键盘 295

8.14软标签 295

8.15杂项 295

8.16低级访问 296

8.17屏幕转储 296

8.18 Termcap模拟 296

8.19 Terminfo函数 296

8.21.1布尔型权能 297

8.21 Terminfo权能 297

8.20调试函数 297

8.21.2数值型权能 298

8.21.3字符串型权能 299

8.22 [N]Curses函数概述 306

第9章 I/O端口编程 307

9.1鼠标编程 307

9.2调制解调器编程 308

9.3打印机编程 308

9.4游戏杆编程 308

10.2信号处理 309

第10章 把应用程序移植到Linux上 309

10.1介绍 309

10.2.1 SVR4、BSD和POSIX.1下的信号 310

10.2.2 Linux信号选项 310

10.2.3 Linux下的信号 310

10.2.4 Linux支持的信号 311

10.3终端I/O 311

10.4进程信息和控制 311

10.4.2 ptrace和/proc文件系统 312

10.4.3 Linux下的进程控制 312

10.4.1 kvm过程 312

10.5可移植条件编译 313

10.6补充说明 314

附录 以字母顺序排列的系统调用 315

第四部分 Linux内核概念系统结构 323

摘要 323

前言 324

第1章 系统结构 325

1.1系统概述 325

1.2内核的目标 325

1.3内核结构的概述 325

1.4支持多个开发人员 327

1.5.1任务列表 328

1.5.2内存映射 328

1.5.3索引节点 328

1.5系统数据结构 328

1.5.4数据连接 329

第2章 子系统的系统结构 330

2.1进程调度程序系统结构 330

2.1.1目标 330

2.1.2模块 330

2.2.1目标 331

2.2.3数据表示 331

2.2.2模块 331

2.1.4依赖性、数据流和控制流 331

2.2内存管理程序系统结构 331

2.1.3数据表达 331

2.2.4数据流、控制流和依赖性 332

2.3虚拟文件系统系统结构 333

2.3.1目标 333

2.3.2模块 333

2.3.3数据表示 333

2.4.2模块 334

2.4.1目标 334

2.3.4数据流、控制流和依赖性 334

2.4网络接口系统结构 334

2.4.3数据表示 335

2.4.4数据流、控制流和依赖性 335

2.5进程间通信系统结构 335

第3章 结论 336

附录A 术语定义 337

附录B 参考文献 338

第五部分 Linux内核具体系统结构 341

摘要 341

1.2 Linux介绍 342

1.3软件系统结构的背景知识 342

第1章 前言 342

1.1目标 342

1.4方法与途径 343

1.5适用本书的读者 344

1.6本部分的章节安排 344

第2章 系统结构 345

3.1.3子系统描述 346

3.1.2外部接口 346

3.1.1目标 346

3.1进程调度程序 346

第3章 子系统结构 346

3.1.4数据结构 347

3.1.5子系统结构 348

3.1.6子系统依赖性 348

3.2内存管理程序 348

3.2.1目标 348

3.2.2外部接口 349

3.2.3子系统描述 349

3.2.5子系统结构 350

3.2.4数据结构 350

3.2.6子系统依赖性 351

3.3虚拟文件系统 352

3.3.1目标 352

3.3.2外部接口 352

3.3.3子系统描述 353

3.3.4设备驱动程序 353

3.3.5逻辑文件系统 354

3.3.6模块 354

3.4.1目标 355

3.4进程间通信 355

3.3.8子系统结构 355

3.3.7数据结构 355

3.3.9子系统依赖性 355

3.4.2外部接口 357

3.4.3子系统描述 357

3.4.4数据结构 358

3.4.5子系统结构 359

3.4.6子系统依赖性 359

3.5网络接口 360

3.5.1目标 360

3.5.3子系统描述 361

3.5.2外部接口 361

3.5.4数据结构 362

3.5.5子系统结构 363

3.5.6子系统依赖性 363

第4章 结论 365

附录A 术语定义 366

附录B 参考文献 368

第六部分 附录 372

附录A Linux文档工程拷贝许可证 372

附录B GNU通用公共许可证 374