选读1万行编码,深层次了解操作系统原理!
高性能计算机“京”的L1缓存文件设计师青柳隆宏经典书籍!
完全了解Unix源码!
需不需要阅读文章核心源码
对计算机软件的全景图有更深层次的掌握
对学得的优化算法和构思触类旁通
加重对电脑操作系统的了解
提高本身的技术实力
为何挑选UNIX V6?
编码行数约为1 万行
有丰富的材料可参照
手机了电脑操作系统的基本要素
简单化的布置
有利于用户系统对有详细的掌握
有手机模拟器可供参考
这书是1本Unix核心源码的阅读文章手册。创作者融合UNIX V6已公布的有关文本文档,对其核心源代码开展详尽分析,致力于让用户更深层次地了解系统进程、终断、块I/O系统软件、系统文件、空格符I/O系统软件、起动系统软件等电脑操作系统的基本概念。《Unix核心源代码分析》是1本UNIX V6核心源码的阅读文章手册。创作者融合UNIX V6已公布的有关文本文档,对UNIX V6的核心源代码开展详尽分析,致力于让用户更深层次地了解系统进程、终断、块I/O系统软件、系统文件、空格符I/O系统软件、起动系统软件等电脑操作系统的基本概念。
《Unix核心源代码分析》合适电脑操作系统的初级学生阅读文章,非常合适根据大学课程和别的新手入门书对电脑操作系统有一定的掌握,可是对实际关键点欠缺深层次了解的用户,及其这些对电脑操作系统的实际保持有兴趣爱好的用户。
目录
- 第I部分
- 什么是UNIX V6 1
- 第1章 UNIX V6的全貌 2
- 1.1 什么是UNIX V6 2
- 1.2 UNIX的历史2
- 1.3 UNIX V6内核 4
- 1.4 构成UNIX V6运行环境的硬件 4
- PDP-11 5
- 1.5 代码 9
- 1.6 手册 9
- 1.7 小结 10
- 第II部分
- 进程 11
- 第2章 进程 12
- 2.1 进程的概要 12
- 什么是进程 12
- 进程的并行执行 12
- 进程的执行状态 14
- 用户模式和内核模式 14
- 交换处理15
- 2.2 proc结构体和user结构体 15
- proc结构体 16
- user结构体 17
- 2.3 为进程分配的内存 21
- 代码段 21
- 数据段 21
- 虚拟地址空间 22
- 变换地址 24
- 2.4 小结 26
- 第3章 进程的管理I 27
- 3.1 进程的生命周期 27
- 3.2 创建进程 28
- 进程的复制 28
- 父进程和子进程 29
- 系统调用fork 29
- newproc() 32
- panic() 36
- 3.3 切换执行进程 37
- 中断执行进程 37
- 进程的执行状态 37
- 选择执行进程的算法 38
- 上下文切换 39
- 系统调用wait 39
- sleep() 39
- swtch() 41
- swtch() 的返回位置 44
- setpri() 51
- wakeup() 51
- setrun() 52
- 3.4 执行程序 53
- 程序执行文件的格式 53
- 系统调用exec 54
- estabur() 62
- sureg() 65
- expand() 66
- 3.5 进程的终止 68
- 系统调用exit 69
- 系统调用wait 71
- 3.6 数据区域的扩展 73
- 系统调用break 73
- 3.7 管理内存和交换空间 76
- map结构体 76
- 获取未使用区域 77
- 释放区域 79
- 3.8 小结 81
- 第4章 交换处理 82
- 4.1 什么是交换处理 82
- 代码段和数据段 82
- sched() 83
- xswap() 87
- 4.2 共享代码段的处理 88
- xalloc() 90
- xfree() 93
- xccdec() 93
- 4.3 小结 94
- 第III 部分
- 中断 95
- 第5章 中断与陷入 96
- 5.1 什么是中断与陷入 96
- 什么是中断 96
- 什么是陷入 97
- 5.2 优先级与向量(Vector) 98
- 中断优先级和处理器优先级 98
- 中断和陷入向量 100
- 5.3 中断和陷入的处理流程 100
- 发生中断或陷入 101
- 执行call和trap 104
- 5.4 时钟中断处理函数 107
- 时钟设备的规格 107
- 时钟中断处理函数的内容 108
- clock() 113
- 5.5 陷入处理函数 117
- trap() 117
- grow() 122
- 5.6 系统调用的处理流程 123
- 传递参数的方法 123
- sysent结构体 124
- trap() 126
- 5.7 小结 128
- 第6章 信号 129
- 6.1 什么是信号 129
- 信号的发送方法 129
- 确认接收信号 129
- 信号的种类 130
- ssig() 131
- kill() 132
- signal() 133
- psignal() 133
- issig() 134
- psig() 134
- core() 136
- 在系统调用处理中处理信号 136
- 6.2 跟踪功能 137
- 什么是跟踪 137
- ipc结构体 138
- 跟踪的处理流程 138
- stop() 139
- ptrace() 140
- procxmt() 142
- wait() 143
- 6.3 小结 144
- 第IV 部分
- 块I/O 系统 145
- 第7章 块设备子系统 146
- 7.1 设备的基础 146
- 设备的种类 146
- 设备驱动 146
- 类别和设备编号 147
- 特殊文件 147
- 7.2 块设备子系统 148
- 缓冲区 148
- b-list和av-list 150
- RAW 输入输出 151
- 7.3 缓冲区的初始化 152
- binit() 152
- clrbuf() 153
- 7.4 缓冲区的获取和释放 154
- getblk() 154
- notavail() 156
- brelse() 157
- 7.5 读取 158
- 读取的种类 158
- bread() 159
- iowait() 160
- iodone() 160
- geterror() 161
- breada() 161
- incore() 162
- 7.6 写入 163
- 写入的种类 163
- bwrite() 164
- bawrite() 165
- bdwrite() 165
- bflush() 166
- 7.7 RAW输入输出 167
- physio() 167
- swap() 169
- 7.8 小结 171
- 第8章 块设备驱动 172
- 8.1 什么是块设备驱动 172
- 块设备驱动表 172
- 设备处理队列 173
- 处理流程 173
- 8.2 RK-11磁盘驱动 174
- RK11-D 175
- 特殊文件 175
- 设定bdevsw[] 176
- 中断处理函数 176
- RK11-D 的寄存器 177
- rkstrategy() 179
- rkstart() 180
- rkaddr() 180
- devstart() 181
- rkintr() 182
- RAW 输入输出 184
- 8.3 小结 184
- 第V 部分
- 文件系统 185
- 第9章 文件系统 186
- 9.1 什么是文件系统 186
- inode 186
- 树状结构的命名空间 187
- 挂载 187
- 访问权限 188
- 根磁盘 189
- 9.2 块设备的区域 189
- 用于启动的区域 190
- 超级块 190
- inode区域 191
- 存储区域 193
- 9.3 挂载 193
- mount结构体 193
- 系统调用mount 194
- getmdev() 196
- 系统调用umount 197
- 9.4 inode的获取和释放 198
- inode[] 198
- iget() 201
- iput() 203
- iupdat() 204
- 9.5 inode与存储区域的对应关系 205
- bmap() 208
- itrunc() 211
- 9.6 分配块设备中的块 213
- ialloc() 213
- ifree() 216
- alloc() 217
- free() 220
- getfs() 222
- badblock() 222
- 9.7 将路径变为inode 223
- 目录的内容 223
- namei() 224
- access() 230
- 9.8 初始化与同步 232
- iinit() 232
- update() 232
- 9.9 小结 234
- 第10章 文件处理 235
- 10.1 用户程序对文件的处理 235
- 10.2 3 个结构体 235
- 标准输入输出 237
- 10.3 文件的生成和打开处理 237
- 系统调用creat 238
- maknode() 238
- wdir() 239
- 系统调用open 240
- open1() 241
- falloc() 242
- ufalloc() 243
- openi() 243
- 10.4 文件的读取和写入 244
- 系统调用read、write 244
- rdwr() 245
- readi() 246
- writei() 248
- iomove() 250
- getf() 252
- 10.5 指定文件的读写位置 252
- 系统调用seek 252
- 10.6 关闭文件 254
- 系统调用close 254
- closef() 254
- closei() 255
- 10.7 目录的生成 255
- 系统调用mknod 255
- 10.8 文件的链接 256
- 系统调用link 257
- suser() 258
- 10.9 删除文件 258
- 系统调用unlink 258
- 10.10 小结 260
- 第11章 管道 261
- 11.1 什么是管道 261
- 使用管道的优点 262
- 11.2 开始管道通信 262
- 系统调用pipe 262
- 11.3 收发数据 264
- writep() 264
- readp() 266
- plock() 267
- prele() 267
- 11.4 结束管道通信 268
- closef() 268
- 11.5 建立管道通信的流程 268
- 建立父子进程间的通信 268
- 系统调用dup 272
- 11.6 小结 273
- 第VI 部分
- 字符I/O 系统 275
- 第12章 字符设备 276
- 12.1 字符设备驱动 276
- 字符设备缓冲区 277
- 对缓冲区的操作 278
- 初始化缓冲区池 280
- 12.2 LP11设备驱动 281
- 什么是LP11 281
- LP11设备驱动的功能 282
- lpopen() 284
- lpwrite() 285
- lpcanon() 285
- lpoutput() 287
- lpstart() 288
- lpint() 288
- lpclose() 289
- 12.3 小结 289
- 第13章 电传终端 290
- 13.1 什么是电传终端 290
- 电传终端的接口 290
- 特殊文件 291
- tty 结构体 292
- maptab[] 295
- partab[] 295
- KL11/DL11 296
- KL11/DL11设备驱动的规格 297
- KL11/DL11设备驱动函数 298
- 13.2 终端的开启和关闭 298
- klopen() 298
- klclose() 300
- wflushtty() 300
- flushtty() 301
- 13.3 终端的设定 302
- gtty() 302
- stty() 302
- sgtty() 303
- klsgtty() 304
- ttystty() 304
- 13.4 从终端输入文字 305
- klrint() 306
- ttyinput() 306
- 13.5 读取输入的数据 308
- klread() 309
- ttread() 309
- canon() 310
- 13.6 向终端输出数据 313
- klwrite() 314
- ttwrite() 315
- ttyoutput() 316
- ttstart() 318
- ttrstrt() 319
- klxint() 320
- 13.7 小结 320
- 第VII 部分
- 启动系统 321
- 第14章 启动系统 322
- 14.1 启动的流程 322
- start 323
- main() 326
- /etc/init 329
- 14.2 小结 330
- 附 录 参考资料等 331
- A.1 参考文献、网站 331
- A.2 pre K&R C 335
- 后记 337
- 索引 338