目 录
献辞
致谢
序(一)
序(二)
历史注记
上篇 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.2 malloc(2528) 242
5.1.3 mfree(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.1 exec(3020) 285
12.6.2 fork(3322) 286
12.6.3 sbreak(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.1 file(5507) 316
18.4.2 inode(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
2024-02-18 18:01:58
9.56MB
unix
1