Linux源码趣读
  • 推荐0
  • 收藏0
  • 浏览156

Linux源码趣读

闪客 (作者)  张月萍 (责任编辑)

  • 书  号:9787121462870
  • 出版日期:2023-09-01
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 维护人:博文小编
用读一本小说的心态来阅读本书,你会对整个操作系统的体系结构和逻辑细节有非常清晰的认识,从此爱上并阅读更多的操作系统源码。
• 第1部分:进入内核前的苦力活。覆盖从开机到运行到Linux中的main函数的关键流程解析,帮你清晰认识Intel CPU的体系结构。
• 第2部分:“大战”前期的初始化工作。讲述main中的各种初始化函数,这些函数是操作系统各个模块的交互桥梁,为理解后续操作系统各个模块的运作原理打好基础。
• 第3部分:一个新进程的诞生。讲述从内核态切换至用户态,并建立起第一个用户进程的全部过程。学完这部分,你将会理解一个多进程的操作系统是如何建立和运作的。
• 第4部分:shell程序的到来。主要讨论如何将磁盘中存储的shell程序加载到内存中来,并最终交给CPU去执行。通过这个过程你会看清一个程序从存储到硬盘到最终被执行的全部过程。
• 第5部分:一条shell命令的执行。让我们跟着一条shell命令“走南闯北”,从用户输入给计算机一个字符串开始,一直到该程序的最终执行,这一过程能帮你把前面所学的知识融会贯通,整个操作系统的启动流程与运作原理,将会生动形象地浮现在你的脑海中。
以经典Linux版本进行源码解读,深入内核代码学习,提升开发和操作系统内核设计能力
闪客,平时乐于研究计算机底层技术与技术分享。作为“无聊的闪客”微信公众号作者,两年时间积累近10万粉丝,擅长使用通俗易懂的语言讲解复杂的技术原理,他的“破玩意儿”系列、“降妖除魔”系列、“操作系统源码”系列等,都深受读者喜爱。
每个程序员都有一个操作系统梦,而操作系统也是每个程序员的心结。
一知半解地了解一点儿操作系统的知识,已经无法满足当下程序员的需求。但要深入剖析操作系统,又是大部分程序员都很惶恐的一件事。如果要让程序员读一遍操作系统源码,那简直跟要了命一样。其实,操作系统的源码并没有那么可怕。
有很多优秀的操作系统图书都是以 Linux-0.11 这个经典版本为研究对象进行讲解的,可为什么即便是 Linux-0.11 这种代码量最少的版本,仍然令很多人望而却步呢?
先不直接回答这个问题,我们看一下《天龙八部》的开头:
青光闪动,一柄青钢剑倏地刺出,指向中年汉子左肩,使剑少年不待剑招用老,腕抖剑斜,剑锋已削向那汉子右颈。那中年汉子……
记住这个感觉没?我们再看某本Linux图书的开头:
对于操作系统而言,稳定且可靠地运行是最重要的。现行技术方案是将用户进程与用户进程之间、用户进程与操作系统之间进行分离,操作系统可以管理用户进程,但是用户进程之间不能相互干预……
好了,不用读下去了,这句话高瞻远瞩地从宏观上帮我们梳理了操作系统的体系结构,但对于尚不了解操作系统的人来说,可能完全不知道这句话在说什么。
虽然说思想很重要,但在没有任何细节做积累时强行进行思想的拔高,是拔不上去的,还不如一直保持一张白纸的状态。
反观《天龙八部》的开头,连人物的名字都没有,更别说梳理整个体系结构了,上来直接一个精彩镜头,让你迅速进入故事情节。可是读完整部小说的读者,无一不对里面的人物如数家珍,对大理的风光仿佛亲眼看见了一般,对宋辽矛盾的激烈感同身受。
为什么会这样呢?因为一切的爱恨情仇,都是读者通过一个个人物和事件的刻画感悟出来的。只有自己感悟出来的知识和靠自己总结出来的结论,才真正属于自己。而那些一上来就试图把整个脉络梳理清楚的尝试,对于新手来说可能徒劳无功,即便是死记硬背记住了,也终究不是属于自己的知识,无法感同身受。
我在学习操作系统的过程中,就有这样的感觉。
我曾一次次试图从较高的视角来看操作系统的知识体系,从宏观层面跟着大部头图书梳理操作系统的整体逻辑,但无一例外地以失败告终。而当我放下包袱,用读一本小说的心态去阅读 Linux源码时,我发现,我从来没有去想着梳理出什么体系,但不知道从哪一行代码开始,整个操作系统的体系结构已经较为清晰地出现在我面前了,竟是那么不知不觉。而且我也清晰地知道,这样的体系是怎么一步步从第一行代码开始,逐步建立起来的。
所以,我想把这个过程毫无保留地分享给大家,于是在 2021 年 11 月 8 日,我在我的微信公众号“程序员闪客”上开始连载 Linux-0.11 源码趣读这个系列,于 2022 年 9 月6 日发布最后一篇文章完结,共 50回。
在这个过程中,我收获了一大批对该系列感兴趣的读者,不断有读者对这个系列提出自己的想法、改进建议、内容勘误,甚至有不少读者将自己的读书笔记发给我。这些事让我非常感动,也是我能坚持下来不断更新并优化的动力。
后来,越来越多的读者建议我把这个系列整理成书,沉淀下来,我也越来越觉得这件事情非常有意义,同时也十分愿意去做,于是便有了这本书。
本书特色
我将用读一本小说的心态带你一起阅读 Linux-0.11 的源码,用通俗的语言帮你克服对操作系统源码的恐惧。
当然,只是用读小说的心态,并不是将各种技术都采用拟人化的方式讲解。你将按照 Linux-0.11 源码的执行顺序,像按照时间线读一本小说一样,本着探索与发现的心态来阅读源码。你会发现,原来阅读源码这么有趣,可以像读小说一样有种“上头”的感觉。
同时,本书在讲解晦涩难懂的技术原理和细节时,配有大量生动形象且准确的图解,会给你带来十足的画面感。

读者对象
如果你是一名程序员,但是计算机底层知识相对薄弱,又一直没有一个深入学习的突破口,那本书很适合你。
如果你是一名学生,不想仅停留在课堂中对操作系统概念上的学习,想要深入源码细节来加深自己的理解,那本书很适合你。
如果你是非技术领域的朋友,但是对操作系统非常感兴趣,或者想找到一个契机来较为深入地了解计算机原理,那本书也很适合你。

目录

第1 部分 进入内核前的苦力活
第1回 最开始的两行代码  / 2
第2回 从0x7c00 到0x90000  / 8
第3回 做好访问内存的基础准备工作  / 13
第4回 把全部的操作系统代码从硬盘搬到内存  / 17
第5回 将重要的操作系统代码放在零地址处  / 48
第6回 解决段寄存器的历史包袱问题  / 56
第7回 六行代码进入保护模式  / 63
第8回 重新设置中断描述符表与全局描述符表  / 69
第9回 开启分页机制  / 75
第10回 进入main 函数前的最后一跃  / 86
第1部分总结与回顾  / 92

第2部分 “大战”前期的初始化工作
第11回 整个操作系统就二十几行代码  / 98
第12回 管理内存前先划分出三个边界值  / 103
第13回 主内存初始化mem_init  / 106
第14回 中断初始化trap_init  / 110
第15回 块设备请求项初始化blk_dev_init  / 116
第16回 控制台初始化tty_init  / 123
第17回 时间初始化time_init  / 132
第18回 进程调度初始化sched_init  / 138
第19回 缓冲区初始化buffer_init  / 147
第20回 硬盘初始化hd_init  / 155
第2部分总结与回顾  / 159

第3 部分 一个新进程的诞生
第21回 第3 部分全局概述  / 172
第23回 如果让你来设计进程调度  / 184
第24回 从一次定时器滴答来看进程调度  / 192
第25回 通过fork 看一次系统调用  / 197
第26回 fork 函数中进程基本信息的复制  / 205
第27回 透过fork 来看进程的内存规划  / 213
第28回 番外篇——我居然会认为权威著作写错了  / 221
第29回 番外篇——写时复制就这么几行代码  / 227
第30回 番外篇——你管这破玩意儿叫文件系统  / 237
第3部分总结与回顾  / 251
第4部分展望  / 254

第4部分 shell 程序的到来
第31回 拿到硬盘信息   / 258
第32回 加载根文件系统  / 264
第33回 打开终端设备文件  / 272
第34回 进程2 的创建   / 281
第35回 execve 加载并执行shell 程序   / 287
第36回 缺页中断  / 301
第37回 shell 程序跑起来了  / 311
第38回 操作系统启动完毕!  / 317
第39回 番外篇——调试Linux 最早期的代码  / 322
第40回 番外篇——为什么有些技术原理你怎么看也看不懂  / 331
第4部分总结与回顾  / 333

第5部分 一条shell 命令的执行
第41回 一条shell 命令的执行过程概述   / 338
第42回 用键盘输入一条命令  / 342
第43回 shell 程序读取你的命令  / 352
第44回 进程的阻塞与唤醒  / 359
第45回 解析并执行shell 命令  / 364
第46回 读硬盘数据全流程  / 375
第47回 读取硬盘数据的细节  / 391
第48回 信号  / 400
第49回 番外篇——为什么你学得比别人慢  / 406
第5部分总结与回顾  / 411

读者评论