Unix内核源码剖析

8.324 评价豆瓣读书
阅读
¥31.99
  • 导言
  • 目录
  • 作品信息

本书是一本Unix内核源代码的阅读指南。作者结合UNIX V6已公开的相关文档,对其内核源码进行详细剖析,旨在让读者更深入地理解进程、中断、块I/O系统、文件系统、字符I/O系统、启动系统等操作系统的基本原理。

本书适合操作系统的初中级学习者阅读,特别适合通过大学课程和其他入门书对操作系统有所了解,但是对具体细节缺乏深入理解的读者,以及那些对操作系统的具体实现有兴趣的读者。

作者简介:

青柳隆宏

日本资深程序员,现在硅谷从事计算机处理芯片的设计工作。曾设计了超级计算机“京”的L1缓存,该计算机在2011年排名世界Top 500超级计算机的第1位,也是人类历史上第一台计算能力跨越1亿亿次每秒的计算系统。作者Email:v6@gachapin.jp。

译者简介:

殷中翔

日本国立九州大学系统信息专业硕士学位。具有十余年软件开发经验,现主要从事企业Web系统服务器端的开发及维护工作。

黄炎

同济大学本科毕业,现供职于上海爱可生,从事数据库高可用软件开发。大学有幸师从陈闳中教授,一窥UNIX V6代码的门径。

周金杰

同济大学硕士,法国国立高等电信学院(TELECOM PARIS)硕士。曾通读并研究UNIX V6源代码,同时参与了面向对象操作系统的移植以及操作系统调试器的开发工作,熟悉系统底层相关的技术知识。崇尚设计,享受编程给生活带来的乐趣。

  1. Unix内核源码剖析
  2. 译者序
  3. 前言
  4. 阅读内核源代码的意义
  5. 对计算机系统的全貌有更深入的了解
  6. 让操作计算机成为一种令人愉快的体验
  7. 加深对知识的理解
  8. 提升技术人员自身的水平
  9. 为何选择 UNIX V6
  10. 代码行数约为 1 万行
  11. 充实的资料
  12. 网罗了操作系统的基本功能
  13. 简化的设计
  14. 便于读者对系统有完整的了解
  15. 有模拟器可供参考
  16. 几个难点
  17. 面向的读者
  18. 需要具备的知识基础
  19. 本书的结构
  20. 关于本书的说明
  21. 关于代码的说明
  22. 结构体的讲解
  23. 函数的讲解
  24. 栈的说明
  25. 寄存器
  26. 数字的表示形式
  27. 几点有助于增进理解的建议
  28. 首先通读全书
  29. 阅读规格说明书和程序员手册
  30. 仔细阅读结构体
  31. 区分内存空间地址
  32. 寻找志同道合的朋友
  33. 本书的写作原委和谢辞
  34. 小结
  35. 第 I 部分 什么是 UNIX V6
  36. 第 1 章 UNIX V6 的全貌
  37. 1.1 什么是 UNIX V6
  38. 1.2 UNIX 的历史
  39. 1.3 UNIX V6 内核
  40. 1.4 构成 UNIX V6 运行环境的硬件
  41. PDP-11
  42. PSW
  43. 通用寄存器
  44. MMU
  45. 内存
  46. 块设备
  47. 行式打印机
  48. 终端
  49. 1.5 代码
  50. 1.6 手册
  51. 1.7 小结
  52. 第 II 部分 进程
  53. 第 2 章 进程
  54. 2.1 进程的概要
  55. 什么是进程
  56. 进程的并行执行
  57. 进程的执行状态
  58. 用户模式和内核模式
  59. 交换处理
  60. 2.2 proc 结构体和 user 结构体
  61. proc 结构体
  62. user 结构体
  63. 2.3 为进程分配的内存
  64. 代码段
  65. 数据段
  66. 虚拟地址空间
  67. 程序能够使用以任意地址为起点的内存空间
  68. 实现对内存访问的管理
  69. 提高内存的使用效率
  70. 变换地址
  71. 2.4 小结
  72. 第 3 章 进程的管理 I
  73. 3.1 进程的生命周期
  74. 3.2 创建进程
  75. 进程的复制
  76. 父进程和子进程
  77. 系统调用 fork
  78. 父进程的处理
  79. 子进程的处理
  80. newproc()
  81. panic()
  82. 3.3 切换执行进程
  83. 中断执行进程
  84. 进程的执行状态
  85. 选择执行进程的算法
  86. 上下文切换
  87. 系统调用 wait
  88. sleep()
  89. swtch()
  90. swtch() 的返回位置
  91. 函数调用
  92. savu()
  93. retu()、aretu()
  94. setpri()
  95. wakeup()
  96. setrun()
  97. 3.4 执行程序
  98. 程序执行文件的格式
  99. 系统调用 exec
  100. estabur()
  101. sureg()
  102. expand()
  103. 3.5 进程的终止
  104. 系统调用 exit
  105. 系统调用 wait
  106. 3.6 数据区域的扩展
  107. 系统调用 break
  108. 3.7 管理内存和交换空间
  109. map 结构体
  110. 获取未使用区域
  111. 释放区域
  112. 3.8 小结
  113. 第 4 章 交换处理
  114. 4.1 什么是交换处理
  115. 代码段和数据段
  116. sched()
  117. xswap()
  118. 4.2 共享代码段的处理
  119. xalloc()
  120. xfree()
  121. xccdec()
  122. 4.3 小结
  123. 第 III 部分 中断
  124. 第 5 章 中断与陷入
  125. 5.1 什么是中断与陷入
  126. 什么是中断
  127. 什么是陷入
  128. 什么是系统调用
  129. 5.2 优先级与向量(Vector)
  130. 中断优先级和处理器优先级
  131. 中断和陷入向量
  132. 5.3 中断和陷入的处理流程
  133. 发生中断或陷入
  134. 发生中段时的处理
  135. 发生陷入时的处理
  136. 执行 call 和 trap
  137. 中断处理的流程
  138. 陷入处理的流程
  139. 5.4 时钟中断处理函数
  140. 时钟设备的规格
  141. 时钟中断处理函数的内容
  142. 时钟设备寄存器的再设定
  143. 定时执行
  144. 系统调用 sleep
  145. 时间处理
  146. 递增 CPU 时间
  147. 再计算执行优先级
  148. 尝试对进程进行再调度
  149. 信号处理
  150. lightning bolt
  151. clock()
  152. 5.5 陷入处理函数
  153. trap()
  154. grow()
  155. 5.6 系统调用的处理流程
  156. 传递参数的方法
  157. sysent 结构体
  158. trap()
  159. 5.7 小结
  160. 第 6 章 信号
  161. 6.1 什么是信号
  162. 信号的发送方法
  163. 确认接收信号
  164. 信号的种类
  165. ssig()
  166. kill()
  167. signal()
  168. psignal()
  169. issig()
  170. psig()
  171. core()
  172. 在系统调用处理中处理信号
  173. 6.2 跟踪功能
  174. 什么是跟踪
  175. ipc 结构体
  176. 跟踪的处理流程
  177. stop()
  178. ptrace()
  179. procxmt()
  180. wait()
  181. 6.3 小结
  182. 第 IV 部分 块 I/O 系统
  183. 第 7 章 块设备子系统
  184. 7.1 设备的基础
  185. 设备的种类
  186. 设备驱动
  187. 类别和设备编号
  188. 特殊文件
  189. 7.2 块设备子系统
  190. 缓冲区
  191. b-list 和 av-list
  192. RAW 输入输出
  193. 7.3 缓冲区的初始化
  194. binit()
  195. clrbuf()
  196. 7.4 缓冲区的获取和释放
  197. getblk()
  198. notavail()
  199. brelse()
  200. 7.5 读取
  201. 读取的种类
  202. bread()
  203. iowait()
  204. iodone()
  205. geterror()
  206. breada()
  207. incore()
  208. 7.6 写入
  209. 写入的种类
  210. bwrite()
  211. bawrite()
  212. bdwrite()
  213. bflush()
  214. 7.7 RAW 输入输出
  215. physio()
  216. swap()
  217. 7.8 小结
  218. 第 8 章 块设备驱动
  219. 8.1 什么是块设备驱动
  220. 块设备驱动表
  221. 设备处理队列
  222. 处理流程
  223. 8.2 RK-11 磁盘驱动
  224. RK11-D
  225. 特殊文件
  226. 设定 bdevsw[]
  227. 中断处理函数
  228. RK11-D 的寄存器
  229. rkstrategy()
  230. rkstart()
  231. rkaddr()
  232. devstart()
  233. rkintr()
  234. RAW 输入输出
  235. 8.3 小结
  236. 第 V 部分 文件系统
  237. 第 9 章 文件系统
  238. 9.1 什么是文件系统
  239. inode
  240. 树状结构的命名空间
  241. 挂载
  242. 访问权限
  243. 根磁盘
  244. 9.2 块设备的区域
  245. 用于启动的区域
  246. 超级块
  247. inode 区域
  248. 存储区域
  249. 9.3 挂载
  250. mount 结构体
  251. 系统调用 mount
  252. getmdev()
  253. 系统调用umount
  254. 9.4 inode 的获取和释放
  255. inode[]
  256. iget()
  257. iput()
  258. iupdat()
  259. 9.5 inode 与存储区域的对应关系
  260. bmap()
  261. itrunc()
  262. 9.6 分配块设备中的块
  263. ialloc()
  264. ifree()
  265. alloc()
  266. free()
  267. getfs()
  268. badblock()
  269. 9.7 将路径变为 inode
  270. 目录的内容
  271. namei()
  272. access()
  273. 9.8 初始化与同步
  274. iinit()
  275. update()
  276. 9.9 小结
  277. 第 10 章 文件处理
  278. 10.1 用户程序对文件的处理
  279. 10.2 3 个结构体
  280. 标准输入输出
  281. 10.3 文件的生成和打开处理
  282. 系统调用 creat
  283. maknode()
  284. wdir()
  285. 系统调用 open
  286. open1()
  287. falloc()
  288. ufalloc()
  289. openi()
  290. 10.4 文件的读取和写入
  291. 系统调用read、write
  292. rdwr()
  293. readi()
  294. writei()
  295. iomove()
  296. getf()
  297. 10.5 指定文件的读写位置
  298. 系统调用 seek
  299. 10.6 关闭文件
  300. 系统调用 close
  301. closef()
  302. closei()
  303. 10.7 目录的生成
  304. 系统调用 mknod
  305. 10.8 文件的链接
  306. 系统调用 link
  307. suser()
  308. 10.9 删除文件
  309. 系统调用unlink
  310. 10.10 小结
  311. 第 11 章 管道
  312. 11.1 什么是管道
  313. 使用管道的优点
  314. 11.2 开始管道通信
  315. 系统调用 pipe
  316. 11.3 收发数据
  317. writep()
  318. readp()
  319. plock()
  320. prele()
  321. 11.4 结束管道通信
  322. closef()
  323. 11.5 建立管道通信的流程
  324. 建立父子进程间的通信
  325. 系统调用 dup
  326. 11.6 小结
  327. 第 VI 部分 字符 I/O 系统
  328. 第 12 章 字符设备
  329. 12.1 字符设备驱动
  330. 字符设备缓冲区
  331. 对缓冲区的操作
  332. 初始化缓冲区池
  333. 12.2 LP11 设备驱动
  334. 什么是 LP11
  335. LP11设备驱动的功能
  336. lpopen()
  337. lpwrite()
  338. lpcanon()
  339. lpoutput()
  340. lpstart()
  341. lpint()
  342. lpclose()
  343. 12.3 小结
  344. 第 13 章 电传终端
  345. 13.1 什么是电传终端
  346. 电传终端的接口
  347. 特殊文件
  348. tty 结构体
  349. maptab[]
  350. partab[]
  351. KL11/DL11
  352. KL11/DL11设备驱动的规格
  353. KL11/DL11设备驱动函数
  354. 13.2 终端的开启和关闭
  355. klopen()
  356. klclose()
  357. wflushtty()
  358. flushtty()
  359. 13.3 终端的设定
  360. gtty()
  361. stty()
  362. sgtty()
  363. klsgtty()
  364. ttystty()
  365. 13.4 从终端输入文字
  366. klrint()
  367. ttyinput()
  368. 13.5 读取输入的数据
  369. klread()
  370. ttread()
  371. canon()
  372. 13.6 向终端输出数据
  373. klwrite()
  374. ttwrite()
  375. ttyoutput()
  376. ttstart()
  377. ttrstrt()
  378. klxint()
  379. 13.7 小结
  380. 第 VII 部分 启动系统
  381. 第 14 章 启动系统
  382. 14.1 启动的流程
  383. start
  384. main()
  385. /etc/init
  386. 14.2 小结
  387. 附录 参考资料等
  388. A.1 参考文献、网站
  389. A.2 pre K&R C
  390. 后记
  391. 看完了

作者〔日〕青柳隆宏

译者殷中翔

类别 图书 / 非虚构

出版社人民邮电出版社

出版日期

ISBN9787115345219

提供方图灵社区

标签计算机(1439)OS(5)操作系统(35)kernel(3)UNIX(2)Linux/Unix(4)

喜欢这本书的人也喜欢

来自豆瓣读书的评论3