标题：莱昂氏UNIX源代码分析
基本信息
  原书名： Lions' Commentary on Unix 6 edition
原出版社：Annabooks/Rtc Books
作者： (澳)John Lions
译者： 尤晋元
出版社：机械工业出版社
出版日期：2006 年8月
书本简介
该书最早于1976年在作者当时所在的澳大利亚新南威尔士大学内部流通，但是由于有关公司希望保守在UNIX内核方面的商业机密，该书多年来从未正式出版。但本书一直受到UNIX黑客的关注，私下广为流传于世，是一部杰出、经典之作。在各方有识之士的努力下，该书终于于1996年正式出版。全书语言简洁、透彻；作为一本自学UNIX的教材，二十多年来一直鼓舞和激励着计算机和高级操作系统方面的专业人员和学生。[1]　
本书由上、下两篇组成。上篇为UNIX版本6的源代码，下篇是莱昂先生对UNIX操作系统版本6源代码的详细分析。本书语言简洁、透彻，曾作为未公开出版物广泛流传了二十多年，是一部杰出经典之作。本书适合UNIX操作系统编程人员、大专院校师生学习参考使用。
目 录
献辞
致谢
序(一)
序(二)
历史注记
上篇unix操作系统版本6源代码
unix操作系统过程分类索引3
unix操作系统文件及过程5
unix操作系统定义的符号列表7
unix操作系统源代码交叉引用列表9
第一部分 初始化、进程初始化25
第二部分 陷入、中断、系统调用和进程管理75
第三部分 程序交换、基本输入/输出、块设备109
第四部分 文件和目录、文件系统、管道133
第五部分 面向字符的特殊文件181
下篇 莱昂氏unix源代码分析
前言207
第1章 绪论209
1.1 unix操作系统209
1.2 公用程序209
1.3 其他文档210
1.4 unix程序员手册210
1.5 unix文档211
1.6 unix操作系统源代码211
1.7 源代码中各部分212
1.8 源代码文件212
1.9 分析的使用212
1.10 对程序设计水平的一条注释212
第2章 基础知识214
2.1 处理机214
2.2 处理机状态字214
2.3 通用寄存器214
2.4 指令集215
2.5 寻址方式216
2.5.1 寄存器方式217
2.5.2 寄存器延迟方式217
2.5.3 自动增1方式217
2.5.4 自动减1方式217
2.5.5 变址方式217
2.5.6 立即方式218
2.5.7 相对方式218
2.6 unix汇编程序 219
2.7 存储管理219
2.8 段寄存器220
2.9 页说明寄存器220
2.10 存储分配220
2.11 状态寄存器221
2.12 “i”和“d”空间221
2.13 启动条件221
2.14 专用设备寄存器221
第3章 阅读“c”程序222
3.1 某些选出的例子222
3.2 例1 222
3.3 例2 223
3.4 例3 223
3.5 例4 225
3.6 例5 225
3.7 例6 227
3.8 例7 227
3.9 例8 228
3.10 例9 228
3.11 例10 229
3.12 例11 229
3.13 例12 230
3.14 例13 230
3.15 例14 231
3.16 例15 231
3.17 例16 232
3.18 例17 233
第4章 概述235
4.1 变量分配235
4.2 全局变量235
4.3 “c”预处理程序235
4.4 第一部分236
4.4.1 第1组“.h”文件236
4.4.2 汇编语言文件237
4.4.3 在第一部分中的其他文件237
4.5 第二部分237
4.6 第三部分238
4.7 第四部分238
4.8 第五部分239
第一部分 初始化、进程初始化
第5章 两个文件241
5.1 文件malloc.c 241
5.1.1 列表维护规则241
5.1.2malloc(2528) 242
5.1.3mfree(2556) 243
5.1.4 结论244
5.2 文件prf.c 244
5.2.1 printf(2340) 244
5.2.2 printn(2369) 245
5.2.3 putchar(2386) 246
5.2.4 panic(2419) 247
5.2.5 prdev(2433)、deverror(2447) 247
5.3 包含的文件247
第6章 系统初启249
6.1 操作员的动作249
6.2 start(0612) 249
6.3 main(1550) 251
6.4 进程252
6.5 proc〔0〕的初始化252
6.6 sched(1940) 253
6.7 sleep(2066) 253
6.8 swtch(2178) 253
6.9 再回到main 254
第7章 进程256
7.1 进程映像256
7.2 proc结构(0358) 257
7.3 user结构(0413) 257
7.4 每个进程数据区258
7.5 段258
7.6 映像的执行258
7.7 核心态执行259
7.8 用户态执行259
7.9 一个实例259
7.10 设置段寄存器260
7.11 estabur(1650) 260
7.12 sureg(1739) 261
7.13 newproc(1826) 261
第8章 进程管理263
8.1 进程切换263
8.2 中断263
8.3 程序交换263
8.4 作业264
8.5 汇编语言过程264
8.6 savu(0725) 264
8.7 retu(0740) 264
8.8 aretu(0734) 264
8.9 swtch(2178) 265
8.10 setpri(2156) 265
8.11 sleep(2066) 266
8.12 wakeup(2133) 266
8.13 setrun(2134) 266
8.14 expand(2268) 267
8.15 再回到swtch 267
8.16 临界区268
第二部分 陷入、中断、系统调用
和进程管理
第9章 硬件中断和陷入269
9.1 硬件中断269
9.2 中断矢量270
9.3 中断处理程序270
9.4 优先级270
9.5 中断优先级271
9.6 中断处理程序的规则271
9.7 陷入272
9.8 汇编语言trap 272
9.9 返回273
第10章 汇编语言“trap”例程274
10.1 陷入和中断源274
10.2 fuibyte(0814)与fuiword(0844) 274
10.3 中断275
10.4 call(0776) 275
10.5 用户程序陷入276
10.6 核心态栈277
第11章 时钟中断279
11.1 clock(3725) 279
11.2 timeout(3845) 281
第12章 陷入与系统调用282
12.1 trap(2693) 282
12.2 核心态陷入282
12.3 用户态陷入283
12.4 系统调用284
12.5 系统调用处理程序285
12.6 文件sys1.c 285
12.6.1exec(3020) 285
12.6.2fork(3322) 286
12.6.3sbreak(3354) 286
12.7 文件sys2.c和sys3.c 287
12.8 文件sys4.c 287
第13章 软件中断288
13.1 设置期望动作288
13.2 对进程造成中断288
13.3 作用289
13.4 跟踪289
13.5 过程289
13.5.1 期望动作的设置289
13.5.2 造成软件中断289
13.5.3 作用289
13.5.4 跟踪290
13.6 ssig(3614) 290
13.7 kill(3630) 290
13.8 signal(3949) 290
13.9 psignal(3963) 291
13.10 issig(3991) 291
13.11 psig(4043) 291
13.12 core(4094) 292
13.13 grow(4136) 292
13.14 exit(3219) 292
13.15 rexit(3205) 293
13.16 wait(3270) 293
13.17 跟踪293
13.18 stop(4016) 294
13.19 wait(3270)(继续) 294
13.20 ptrace(4164) 295
13.21 procxmt(4204) 295
第三部分 程序交换、基本输入
/输出、块设备
第14章 程序交换297
14.1 正文段297
14.2 sched(1940) 298
14.3 xswap(4368) 299
14.4 xalloc(4433) 299
14.5 xfree(4398) 300
第15章 基本输入/输出介绍301
15.1 buf.h文件301
15.2 devtab(4551) 301
15.3 conf.h文件301
15.4 conf.c文件302
15.5 系统生成302
15.6 swap(5196) 302
15.7 竞态条件303
15.8 可重入304
15.9 继续分析“u.u_ssav” 304
第16章rk磁盘驱动器305
16.1 控制状态寄存器rkcs 306
16.2 字计数寄存器rkwc 306
16.3 磁盘地址寄存器rkda 306
16.4 rk.c文件306
16.5 rkstrategy(5389) 306
16.6 rkaddr(5420) 307
16.7 devstart(5096) 307
16.8 rkintr(5451) 307
16.9 iodone(5018) 308
第17章 缓存处理309
17.1 标志309
17.2 一个类超高速缓存存储309
17.3 clrbuf(5038) 309
17.4 incore(4899) 310
17.5 getblk(4921) 310
17.6 brelse(4869) 310
17.7 binit(5055) 311
17.8 bread(4754) 312
17.9 breada(4773) 312
17.10 bwrite(4809) 312
17.11 bawrite(4856) 313
17.12 bdwrite(4836) 313
17.13 bflush(5229) 313
17.14 physio(5259) 313
第四部分 文件和目录、文件
系统、管道
第18章 文件存取和控制315
18.1 源代码第四部分315
18.2 文件特征315
18.3 系统调用316
18.4 控制表316
18.4.1file(5507) 316
18.4.2inode(5659) 316
18.5 要求专用的资源317
18.6 打开一个文件317
18.7 creat(5781) 317
18.8 open1(5804) 317
18.9 open(5763) 318
18.10 再回到open1 318
18.11 close(5846) 318
18.12 closef(6643) 319
18.13 iput(7344) 319
18.14 删除文件319
18.15 读和写文件319
18.16 rdwr(5731) 320
18.17 readi(6221) 321
18.18 writei(6276) 322
18.19 iomove(6364) 322
18.20 bmap(6415) 322
18.21 剩余部分322
第19章 文件目录和目录文件323
19.1 文件名323
19.2 目录数据结构323
19.3 目录文件323
19.4 namei(7518) 324
19.5 一些注释325
19.6 link(5909) 326
19.7 wdir(7477) 327
19.8 maknode(7455) 327
19.9 unlink(3510) 327
19.10 mknod(5952) 327
19.11 access(6746) 328
第20章 文件系统329
20.1 超级块(5561) 329
20.2 mount表(0272) 329
20.3 iinit(6922) 330
20.4 安装330
20.5 smount(6086) 330
20.6 注释331
20.7 iget(7276) 331
20.8 getfs(7167) 332
20.9 update(7201) 332
20.10 sumount(6144) 333
20.11 资源分配333
20.12 alloc(6956) 334
20.13 itrunc(7414) 334
20.14 free(7000) 335
20.15 iput(7344) 335
20.16 ifree(7134) 335
20.17 iupdat(7374) 335
第21章 管道337
21.1 pipe(7723) 337
21.2 readp(7758) 337
21.3 writep(7805) 338
21.4 plock(7862) 338
21.5 prele(7882) 338
第五部分 面向字符的特殊文件
第22章 面向字符的特殊文件339
22.1 lp11行式打印机驱动程序339
22.2 lpopen(8850) 340
22.3 注释340
22.4 lpoutput(8986) 340
22.5 lpstart(8967) 341
22.6 lpint(8976) 341
22.7 lpwrite(8870) 342
22.8 lpclose(8863) 342
22.9 讨论342
22.10 lpcanon(8879) 342
22.11 对读者的建议343
22.12 pc11纸带阅读机/穿孔机驱动
程序344
第23章 字符处理345
23.1 cinit(8234) 346
23.2 getc(0930) 346
23.3 putc(0967) 347
23.4 字符集347
23.5 图形字符348
23.6 unix惯例349
23.7 maptab(8117) 349
23.8 partab(7947) 349
第24章 交互式终端351
24.1 接口351
24.2 tty结构(7926) 351
24.3 注释352
24.4 初始化352
24.5 stty(8183) 352
24.6 sgtty(8201) 353
24.7 klsgtty(8090) 353
24.8 ttystty(8577) 353
24.9 dl11/kl11终端设备处理程序353
24.10 设备寄存器354
24.11 接收器状态寄存器354
24.12 接收器数据缓存寄存器354
24.13 发送器状态寄存器354
24.14 发送器数据缓存寄存器 354
24.15 单总线地址354
24.16 软件方面的考虑355
24.17 中断矢量地址355
24.18 源代码355
24.19 klopen(8023) 355
24.20 klclose(8055) 356
24.21 klxint(8070) 356
24.22 klrint(8078) 356
第25章tty.c文件357
25.1 flushtty(8252) 357
25.2 wflushtty(8217) 357
25.3 字符输入358
25.3.1 ttread(8535) 358