(莱昂氏unix源代码分析导读-1) 引子

                                                                                那一年不知怎样,此书忽在世间出现,天下学武之人自然个个都想得到,大家你抢我夺,一塌里胡涂。

 

一直以来,操作系统都是程序员心中的圣殿,每个程序员都想登堂入室,掌握其中的奥秘。但是,在上世纪六七十年代,对普通程序员来说,这只能是个梦想。因为在那时,操作系统不啻为一个蛮荒巨兽,它往往由数十万乃至数百万行的汇编语句组成,对普通程序员而言,根本无法对其进行分析和理解。

 

Unix的出现改变了这一切。肯·汤姆森和丹尼斯·里奇在19747月号上的《ACM通信》上的一篇论文“The UNIX Time Sharing System”正式将unix操作系统介绍给世人,立即引起了学术界的广泛兴趣。人们惊奇的发现,同传统的操作系统相比,unix有两个显著的特点:

(1)         代码量要少1~2个数量级,但却实现了在当时看来十分强大的功能;

(2)         其内核代码多由c语言写就,只有极少量的代码由汇编完成。

 

例如,作为莱昂模型的unix v6,其内核仅有9000多行代码,而汇编代码仅不到1000行。

 

更重要的是,unix采用源代码方式进行发行,只要购买了unix许可证就可以获得整个源代码。其后不久,一本神秘的小册子开始流行,并引发了大规模的违法复印活动。这本小册子就是《莱昂氏unix源代码分析》。毫不夸张的说,这本书的流行极大促进了unix的发展,并哺育了一代unix精英。因此,此书在unix界具有极高的声誉。

 

时过境迁,我们现在可以轻易的找到各种开源操作系统的源码和分析,此书的重要性已大大降低。但是,它仍具有巨大的价值,它以区区9000多行代码实现了一个操作系统的基本功能,其设计之巧妙、代码质量之高,令人叹为观止。从教育的角度看,它仍然是最好的学习操作系统的教材之一。

 

对我来说,阅读此书是个快乐的过程,同时也是个痛苦的过程。因此,我决定写下自己的一点心得,希望能够为大家的读码过程减轻一点痛苦吧。

目 录 献辞 致谢 序(一) 序(二) 历史注记 上篇 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 用户态执行
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值