《趣话计算机底层技术》用一系列有趣的小故事讲述计算机底层相关的技术知识。
• 第1章:聚焦计算机中最核心的CPU,从最基础的门电路开始,到基本的指令执行过程,最后到CPU的一些高级技术。内容涵盖缓存、原子操作、指令流水线、分支预测、乱序执行、超线程、SIMD、 内存管理、TLB等。
• 第2章:主要讲述计算机中的存储设施,包括CPU中的缓存,内存、机械硬盘三者数据存储的原理,以及硬盘上的数据管理组织的软件——文件系统基本模型。
• 第3章:主要讲述计算机中的I/O和数据传输。内容涵盖总线系统、中断机制、DMA技术、零拷贝技术。重点关注网卡相关的数据传输,包括网卡的基本工作机制,网卡接收数据包后的处理,最后介绍一种时下流行的数据包处理技术——DPDK。
• 第4章:前面三章主要是在硬件层面,这一章开始介绍软件。本章聚焦计算机中最重要的软件——操作系统。本书默认以Linux为参考,内容涵盖操作系统的一些基础知识,包括进程、线程、系统调用、异常处理、信号、锁、权限管理,最后介绍一个时下流行的容器技术Docker的原理。
• 第5章:主要涉及系统编程中和操作系统紧密相关的一些技术点。包括进程的创建过程、线程栈、进程间通信、I/O多路复用、内存映射文件、协程,最后简单介绍调试器GDB和可执行文件ELF。
• 第6章:本章的主题是安全。网络安全涉及方方面面,本章挑选了和计算机系统底层相关的一些安全技术,通过故事去感受计算机攻击的原理,包含栈溢出攻击、整数溢出攻击、DDoS攻击、TCP会话劫持、HTTPS原理,还有前几年大火的CPU漏洞——熔断与幽灵攻击原理等。
一趟故事与技术的奇幻之旅。涵盖CPU、存储、IO、操作系统、编程、安全六大主题。几十个故事之间既有关联让你像追剧一样学技术;也有一定独立性,随时翻开一篇都有收获
轩辕之风(@编程技术宇宙),前百度、360、奇安信高级安全研发工程师,专注网络安全、流量分析、大数据处理领域的软件研发。
你好,我是轩辕之风,熟悉我的读者喜欢叫我轩辕。
相信不少人都有过这样的感受:当我们去学习一项新的技术时,会有一大堆的技术名词和专业术语向我们袭来。而当我们试图去学习和理解它们时,网络上的各种学习资料,要么是非常晦涩的原理阐述,要么是大段的代码讲解,看得云里雾里。在我们对一项技术还没有一个全局和整体的认识之前,一下就陷入到细节中,这对新手学习的效率和信心都有不少负面影响。
除了学习,在工作中也有类似的现象,经常会有技术分享和技术讲座,很多时候,负责分享和讲述的人都只顾着单方面的信息输出,把自己要讲的东西说完就算完事,至于下面的人听懂没有,听懂多少,似乎并不关心。
上面的两种现象,在我十一年的编程生涯中,就经常遇到。
每到这个时候,我就在想:为什么不能站在读者/观众的角度来想一想呢,想一想什么样的方式更容易让他们接受和理解。如果是我来讲、我来写,该用什么样的语言让大
家更好理解呢?
后来,我总结了自己的一套方法,那就是举例子、打比方、讲故事,把一个晦涩的
概念用我们熟知的事物表达出来,去降低技术名词本身的神秘感,让我们能快速知道这个技术是干什么的,要解决什么问题,然后才关注它具体是怎么工作的。
运用上面的表达方式,我曾经在大学的时候通过远程语音讲述的方式,帮助一个学经济学专业的高中同学从零基础开始学C语言并通过了计算机二级考试。
我们再来看另外一个问题。
在我面试过的很多人中,以及在如今的互联网上,我发现很多程序员都在忙着学习各种编程语言、各种开发框架和各种中间件的使用,却对计算机底层相关的技术知之甚少。我思考造成这一现象主要有几个原因:
1. 很多程序员都是半路出家的,没有系统地学习过计算机底层知识。
2. 科班出身的程序员由于大学里陈旧的教学方式对这些底层技术也提不起兴趣。
3. 实际工作中的很多岗位只需要具备增删查改(CRUD)能力,对计算机底层技术没那么看重。
由于这些原因,很多程序员的基础知识欠缺,在工作中涉及技术原理的时候就会发现不足。
随着越来越多新人的加入,计算机软件开发行业的竞争也越来越激烈,只靠CRUD技能很大程度上会限制程序员在技术领域的发展。而学习这些底层技术知识,修炼好程序员的内功,可以帮助我们知其然还能知其所以然。
举个简单的例子,如果不知道零拷贝技术和I/O多路复用技术底层的原理,就很难理解Nginx为什么能支持高并发。
由于我从事的是网络安全方向的软件研发工作,经常会与计算机底层技术打交道,如CPU、操作系统内核等,这些通常给人的印象就是艰深、晦涩。所以我就在想,我能不能试着用通俗易懂的方式去把这些晦涩的东西讲清楚?
在2019年年底的时候,我注册了一个微信公众号:编程技术宇宙,开始尝试用写故事的方式去讲述编程相关的技术知识。
刚开始的时候方向比较分散,没有什么起色。后来我开始专注在计算机底层相关的方向上,收到不少好评,尤其是我的CPU系列故事,吸引了很多粉丝的追更,并在CSDN、博客园、知乎等平台获得多次精选推荐。
后来不知不觉就写了一百多篇故事,帮助许许多多的读者“解锁”了原来一直感觉很艰深难懂的知识,对我而言也是很有成就感的一件事。
在这期间,还发生了一个让我感动的小故事。
一位叫“未来永劫”的网友,由于非常喜欢我的这些用故事讲解技术的文章,特地把公众号里这几个系列的文章打印出来装订成了一本“书”寄给了我。看着自己创作的内容变成手里沉甸甸的一本书,心里还是非常开心和激动的。那时候我就在想,要是以后真能写一本书就好了。
果然,后来成都道然科技有限责任公司的姚新军(@长颈鹿27)老师找到了我,对我的创作内容很认可,也给了我很多写书方面的介绍和建议,我俩聊得很尽兴,于是我决定在原来公众号文章的基础上,继续创作更多计算机底层技术文章,汇集成大家手里拿到的这本书。
本书特色
这本书主要是用讲故事的方式介绍计算机底层相关的技术,用通俗易懂的表达方式帮助大家学习底层技术。
故事的主人公可能是计算机里的一个程序、一个进程、一个线程、一个函数、一个数据包、一个文件等这样的软件角色,也可能是CPU、内存、网卡等这样的硬件角色。
本书透过这些角色的视角去讲述发生在计算机世界里的故事,帮助大家在故事中学习和了解计算机底层技术的工作原理。
整本书由几十个故事构成,故事之间既有关联性,让你像“追剧”一样学习技术,也有一定的独立性,让你随时翻开一篇都能看下去。
本书主要涵盖计算机中的CPU、存储、I/O、操作系统、系统编程、安全六个主题,每个主题一章,你不必从头到尾逐篇阅读,完全可以挑选自己感兴趣的任何章节开始阅读。
读者对象
这不是一本讲述如何编程的书,也不是一本技术知识的工具书。如果你是没有任何计算机知识背景的纯小白,那建议先去学习一些基本课程后阅读本书会更加合适。
如果你是一个程序员,懂一些编程知识,但希望学习一些计算机底层技术原理,去夯实自己的技术内功,那这本书很适合你。
如果你是一个学生,学了一些计算机基础课程,但希望用另一种有趣的方式理解得更透彻,那这本书很适合你。
如果你是一个学生,未来想从事C/C++编程或者系统底层相关软件开发,那这本书很适合你。
勘误与支持
由于作者水平有限,书中难免会出现一些错误或不准确的地方,恳请广大读者朋友批评指正。
大家可以在我的微信公众号“编程技术宇宙”后台留言,我会认真回复并解答读者提出的书中的问题。
致谢
感谢微信公众号“编程技术宇宙”的读者们,没有你们的支持,就不会有这本书的诞生,是大家的一次次留言、转发、点赞、打赏、催更让我坚持了下来。还要感谢“未来永劫”这位网友,感谢你亲手为我制作的“书”,给了当时的我很大的鼓舞。
感谢微信公众号“帅地玩编程”的作者帅地,在我微信公众号创作的道路上给了我很多支持,不仅帮助我拥有了最早的一批读者,还教了我很多微信公众号运营的知识。
感谢成都道然科技有限责任公司的姚新军(@长颈鹿27)老师,在本书的萌芽、创作、后期等各个阶段,姚老师都给我提供了很多建议和帮助,还安排插画师对本书的全部插图进行了统一绘制,省去了我很多操心劳神的事情,姚老师认真负责的工作态度让我觉得他是非常可靠的合作伙伴。
最后要特别感谢我的爱人,在我开心的时候陪我开心,在我失落的时候给我加油。
我在公众号创作的过程中,很多次想要放弃,但她总是给我加油和打气,而且不厌其烦的帮助我分析文章阅读低迷的原因,给我提出很多建议和努力的方向。在写作这本书的过程中,我几乎没有时间陪伴她,但她不仅没有怨言,还承担了各种家务琐事,烹饪各种美食,让我可以安心的创作。除此之外,她还经常和我一起探讨创作思路,并作为本书的第一个读者,帮助我发现书稿中的错误,提出了很多修改意见。如果说创作一本书算是一点小小的成绩,那这成绩有一半都来自于她。
谨以此书献给我的家人和一路关注我支持我的读者朋友,希望所有喜欢计算机的朋友都能在书中收获知识和快乐!
轩辕之风