《莱昂氏UNIX源代码分析》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(澳)John Lions著;尤晋元译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2000
  • ISBN:7111080181
  • 页数:378 页
图书介绍:本书由上、下两篇组成。上篇为UNIX版本6的源代码,下篇是莱昂先生对UNIX操作系统版本6源代码的详细分析。本书语言简洁、透彻,曾作为未公开出版物广泛流传了二十多年,是一部杰出经典之作。本书适合UNIX操作系统编程人员、大专院校师生学习参考使用。

上篇 UNIX操作系统版本6源代码 3

UNIX操作系统过程分类索引 3

UNIX操作系统文件及过程 5

UNIX操作系统定义的符号列表 7

UNIX操作系统源代码交叉引用列表 9

第一部分 初始化、进程初始化 25

第二部分 陷入、中断、系统调用和进程管理 75

第三部分 程序交换、基本输入/输出、块设备 109

第四部分 文件和目录、文件系统、管道 133

第五部分 面向字符的特殊文件 181

下篇 莱昂氏UNIX源代码分析 207

前言 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

第一部分 初始化、进程初始化 241

第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

第二部分 陷入、中断、系统调用和进程管理 269

第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 文件sysl.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.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

第三部分 程序交换、基本输入/输出、块设备 297

第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(4769) 310

17.7 binit(5055) 311

17.8 bread(4854) 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

第四部分 文件和目录、文件系统、管道 315

第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

第五部分 面向字符的特殊文件 339

第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 DLL11/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

25.3.2 canon(8274) 358

25.3.3 前一个字符不是“\” 358

25.3.4 前一个字符是“\” 358

25.3.5 字符准备 359

25.3.6 已得到1行 359

25.3.7 注释 359

25.3.8 ttyinput(8333) 359

25.4 字符输出 360

25.4.1 ttwrite(8550) 360

25.4.2 ttstart(8505) 360

25.4.3 ttrstrt(8486) 360

25.4.4 ttyoutput(8373) 360

25.4.5 具有受限字符集的终端 361

25.5 结束语 362

第26章 练习 363

罗斯跋 366

奥德尔跋 368

古德哈特跋 370

克林森跋 372

雷杰斯跋 375

作者小传 377